insertintoselectfrom部分字段插⼊_SQL-插⼊与更新删除
⼀前⾔
经过之前的 【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,
insert语句字段顺序`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 2
3 毕业⽣
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 2
3 毕业⽣
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 语句验证;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论