一 前言

经过之前的 【SQL】-SQL介绍【SQL】- SQL检索阶段一【SQL】-sql检索阶段二 的三篇文章你已经学会的sql的相关概念和如何查询数据库,这篇文章主要后续对数据库表的进入插入,更新,和删除操作,那么你学完这篇就等于最基础的sql开发你已经学完了,如果跟java结合起来也就是crud;后续会推出sql的进阶学习文章,当然出文章的速度不是很快,原因是还有其他类型文章要出;

建表语句:

CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
`name` varchar(255) DEFAULT NULL COMMENT '用户名',
`telephone` varchar(255) DEFAULT NULL COMMENT '用户电话',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`info` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (1, 'youku1', 18, '大一新生');
INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (2, 'youku2', 23, '毕业生');
INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (3, 'jeff', 25, '社会人士');
INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (4, 'smile', 17, '高三学子');

二 插入

插入数据库记录也就是使用 INSERT 关键字,能将一条语句插入数据库,高级的可以组合 SELECT 关键字 实现 插入查询的结果集,插入整张表;

2.1 插入一条完整数据

语句示例:

INSERT INTO `user` ( id, `name`, telephone) VALUES ('2','zszxz','1327');

语句结果:

2	zszxz	1327

语句分析:

插入 数据 到 user 表 字段分别是 id, name , telephone; 值 分别是 2 , zszxz , 1327; 这是插一条完整的语句,虽然INTO可以忽略不写,但不建议这么做,原因是在数据库管理系统间会出现移植性问题;还有字段也可以忽略不写,但也不建议这么做,这容易造成插入数据出错;字段的位置和值的位置是一 一对应;如果有的位置没值可以使用NULL代替;

2.2 插入部分数据

语句示例:

INSERT INTO `user` ( id, `name`) VALUES ('3','zszxz');

语句结果:

3	zszxz

语句分析:

插入数据到user表,字段分别是 id , name ; 值分别是,3,zszxz; 可以看见我们没有插入telephone字段;

2.3 插入检索数据

插入检索的数据也就是能将查询的结果插入进另一张表;我们可以使用 INSERT SELECT 关键组合成一条语句实现;

语句示例:

INSERT INTO `user` ( id, `name`)
SELECT id, `name` FROM student WHERE id = '4';

语句结果:

4	smile

语句分析:

插入数据到 user 表, 字段分别是 id, name ,值是查询字段 id ,name 来自 student 表,条件是 id 等于 4;可以看见我们插入数据的列根查询的列名称是匹配对应的,其实只要列顺序一致即可,不过为了不出错,建议使用名称匹配;

2.4 复制表

复制表即,检索一张表的数据全部插入另一张表;有两种方法,但是不同的数据库管理系统支持不同,具体的看下文;

语句示例:

SELECT id , `name`  INTO student_copy FROM student;

语句分析

查询字段 id, name 插入 student_copy 表,来自 student 表; 注意 这条语句会帮我们自动创建表 student_copy,由于作者使用的是mysql做演示,这条sql执行失败,原因是其不支持这种方式;如果是想复制整张表可以使用通配符 * ;

语句示例:

CREATE TABLE student_copy AS
SELECT * FROM student;

语句结果:

1	youku1	18	大一新生
2 youku2 23 毕业生
3 jeff 25 社会人士
4 smile 17 高三学子

语句分析:

创建表 student_copy 数据结构来源 查询 所有字段来自 student 表;

三 更新

更新数据库的行使用 UPDATE 关键字;更新操作是个很危险的操作,在每次执行前都应该检查是否丢了 where 子句;

3.1 更新所有行

语句示例:

UPDATE student_copy set age = Null;

语句结果:

1	youku1		大一新生
2 youku2 毕业生
3 jeff 社会人士
4 smile 高三学子

语句分析:

更新 student_copy 表, 设置 字段 age 值为null; 可以看见表中所有的学生年龄都是Null; 如果有多个字段需要更新,使用 逗号隔开;

3.2 更新特定的行

语句示例:

UPDATE student_copy set age = '18' WHERE id = '4';

语句结果:

4	smile	18	高三学子

语句分析:

更新 student_copy 设置 学生的年龄是 18 条件是 id 等于 4;

3.3 更新来自查询的结果集

语句示例:

UPDATE student_copy set age= student.age, name = student.name
FROM student
WHERE student.id = student_copy.id;

语句分析:

更新 student_copy 表 设置 age 是 student 表的 age,name 是 student 表的 name 条件是 student 的id 等于 student_copy 表的 id; 遗憾的是 mysql 数据库管理系统又执行失败了,其不支持这种方法更新,如果是postgresql就支持,其他数据库应查阅官方文档查看是否支持这种方式更新;

语句示例:

UPDATE student_copy INNER JOIN student on  student.id = student_copy.id
SET student_copy.age= student.age, student_copy.name = student.name;

语句结果:

1	youku1	18	大一新生
2 youku2 23 毕业生
3 jeff 25 社会人士
4 smile 17 高三学子

语句分析

更新 student_copy 关联 student 条件 是 student 的 id 等于 student_copy 表的id ; 设置 student_copy 表的 age 等于 student 的 age ; 设置 student_copy 表的 name 等于 student 的 name ;这才是正确进入Mysql 的更新查询姿势;

四 删除表

删除表中的行可以使用 DELETE 关键字 ,可以删除特定的行或者全部;使用时请先看是否丢了where子句;

4.1 删除整张表数据

DELETE from student_copy;

语句分析

删除 全部行 来自 student_copy 表;

4.2 删除特定的行

语句示例:

DELETE from student WHERE id = '4';

语句分析:

删除 行 来自 student 表条件时 id 等于 4;

五 更新和删除的建议

  1. 每次进行操作前检查是否丢失 where 子句;
  2. 每次操作前最好先使用 select 语句验证;

最新文章

  1. 『TCP/IP详解——卷一:协议』读书笔记——01
  2. Ubuntu安装Flash
  3. [SAP ABAP开发技术总结]选择屏幕——SELECT-OPTIONS
  4. Android核心分析之十四Android GWES之输入系统
  5. POJ 1458 最长公共子序列
  6. DWZ (JUI) 教程 dwz框架 刷新dialog解决方案
  7. 一个可序列化的C#对象,如何转成一个XML格式的文件或字符串【转】
  8. H-Index,H-Index II
  9. zerglurker的c语言教程006——第一功能
  10. 用 openSSL 生成 公钥 私钥
  11. java可用与串口通信的一些库
  12. C#开启异步 线程的四种方式
  13. elasticsearch -- kibana安装配置
  14. 自动化测试平台的搭建--Jenkins
  15. Spring整体了解
  16. go语言学习--map的并发
  17. java日志 -logback的使用和logback.xml详解(转)
  18. Java多线程—阻塞队列和生产者-消费者模式
  19. c语言打印uint64, int64
  20. mac/linux查询网络端口占用

热门文章

  1. 用图解&&实例讲解php是如何实现websocket实时消息推送的
  2. 基于Galera Cluster多主结构的Mysql高可用集群
  3. Java包package之间调用问题-cmd运行窗口编译运行
  4. 在 Kubernetes 集群快速部署 KubeSphere 容器平台
  5. 关于for循环中使用setTimeout
  6. java 运算符&表达式
  7. 重写系统自带tabbar出现的 代理错误
  8. Java学习笔记(面向对象上)
  9. nginx部署安装
  10. nginx、redis在Centos7中,加入开机自启动