MySQL从删库到跑路(六)——SQL插入、更新、删除操作
作者:天山老妖s
链接:http://blog.51cto.com/9291927
一、插入数据
1、为表的所有字段插入数据
使用基本的insert语句插入数据要求指定表名称和插入到新记录的值。
insert into table_name (column_list) values (value_list);
insert into `tsubject` (subjectid,subjectname,bookname,publisher) values ('0004','英语','大学英语走遍美国','清华出版社') 可以不指定插入的列
insert into `tsubject` values ('0005','高等数学','高等数学教材','清华出版社')
2、为表的指定字段插入数据
为表的指定字段插入数据,就是在insert语句中只向部分字段中插入值,而其他字段的值为表定义时的默认值。必须制定插入的列
insert into tsubject (subjectid,subjectname) values ('0006','高等数学2')
insert into tsubject (subjectname,subjectid) values ('数据结构','0007')
3、同时插入多条记录
insert语句可以同时向数据表中插入多条记录,插入时指定多个值列表,每个值列表之间用逗号分隔开,基本语法如下:
insert into table_name (column_list) values (value_list1), (value_list2),..., (value_listn);
示例:
insert into tsubject (subjectname,subjectid) values ('c#开发','0008'),('苹果开发','0009')
4、将查询结果插入到表中
insert语句和select语句组成的组合语句即可快速地从一个或多个表中向一个表中插入多个行。
insert into table_name1 (column_list1) select (column_list2) from table_name2 where (condition)
示例:
insert into st (subectid,subjectname) select subjectid,subjectname from tsubject where `publisher` is not null
二、更新数据
1、根据本表的条件更改记录
mysql中使用update语句更新表中的记录,可以更新特定的行或者同时更新所有的行
update table_name set column_name1 = value1, column_name2=value2,……, column_namen=valuen where (condition);
示例:
update `tstudent` set sname=concat(sname,'net') where class='net'update `tstudent` set sname=left(sname,3) where class='net'
根据学生的生日 在学生的姓名后标记 1988年大一 1987年大二 1986年大三 1985年大四
update tstudent set sname=concat(sname,case year(birthday)%5 when 0 then '大四' when 1 then '大三' when 2 then '大二' else '大一' end) where year(birthday)>=1985 and year(birthday)<=1988
2、根据另一张表的条件更改记录
update table_namea a join table_nameb b on a. column_name1=b. column_name1
set a.column_name1 = value1, a.column_name2=value2,……, a.column_namen=valuen
where b. column_name2>20
实例:将有不及格的学生姓名后加*标记
update tstudent a join tscore b on a.`studentid`=b.`studentid`set a.`sname`=concat(sname,'*') where b.mark<60
同时更改两张表的列
实例:把分数低于60分的学生,加5分,并在学生姓名添加标记+
update tstudent a join tscore b on a.`studentid`=b.`studentid`set a.`sname`=concat(sname,'+'), b.mark=b.`mark`+5 where b.mark<60;
子查询也能实现相同功能
以下语句将分数有大于98分的学生姓名后加#号标记
update tstudent set sname=concat(sname,'#') where studentid in(select studentid from tscore where mark>98);
三、删除数据
1、根据本表的条件删除记录
从数据库中删除数据使用delete语句,delete语句允许where子句指定删除条件。
delete from table_name [where condition>]
删除学号小于00010的学生
delete from tstudent where studentid< '00010'
2、根据另一张表的条件删除记录
delete a from table_a a join table_b b on a.column1 = b.column1 [where condition>]
删除分数小于60分的学生
delete a from tstudent a join tscore b on a.`studentid` = b.`studentid` where b.mark<60
也可以使用子查询实现。
删除分数表中分数大于90的学生
delete from tstudent where studentid in (select studentid from tscore where mark>90)
喜欢的小伙伴们可以搜索我们个人的微信公众号“程序员的成长之路”点击关注或扫描下方二维码