mysql数据库中常用的增删改样式
常见的新增操作
mysql数据库中常使用insert into 关键字添加数据,在使用insert into过程中,最常见的就是
insert into tb_name(字段1,字段2, 字段3... )
values('data1', 'data2', 'data3'...);
但除了上述的操作之外,还有很多种用法
1. 全字段单条数据插入
全字段就是一个表中所有的字段,包括自增的主键(该字段值可写为null)
insert into tb_name
values('data1', 'data2', 'data3'...)
-- values();中必须包含该表中的所有字段
2. 指定字段单条插入
insert into tb_name(字段1,字段2, 字段3... )
values('data1', 'data2', 'data3'...);
3. 多条数据插入
多条数据插入又分为全字段和指定字段,和上述一样,下来只介绍全字段的多条数据插入,. 注意的是,多条插入中,values只写一个,括号后用逗号隔开
insert into tb_name
values('data1', 'data2', 'data3', 'data4'...),
('data1', 'data2', 'data3', 'data4'...),
('data1', 'data2', 'data3', 'data4'...),
('data1', 'data2', 'data3', 'data4'...),
('data1', 'data2', 'data3', 'data4'...);
4. 替换插入
mysql除了使用insert into插入数据之外,还有replace into,顾名思义,如果表中存在相同主键的数据,则覆盖它。例如,学生表中有学号为’2120802’,姓名为’张三’的一条数据,该学生已经毕业,此时,李四同学使用该学号可直接使用replace into替换掉张三的数据,其用法和insert into 一样,分为全字段,指定字段,多条和单条,以下只演示指定字段单条数据替换插入用法:
replace into tb_name(字段1,字段2, 字段3... )
values('data1', 'data2', 'data3'...);
5.表中数据复制
如果把一个表中符合条件的数据复制到另一张表中,可以使用该方法,该语法中没有values关键字,select语句把符合条件的数据从已知表中查询出来作为插入目标表中的数据
语法格式如下:
insert into tb_name
select 字段1, 字段2, 字段3...
from tb_name2
where 条件表达式
其中被插入表的字段类型必须和插入表的一致
常见的更新操作
mysql数据库中使用update关键字来修改表中数据
更新操作的常用语法格式如下:
设置为新值:UPDATE table_name SET
column_name=new_value
[, column_name2=new_value2]
[WHERE column_name3=value3]
根据已有值替换:UPDATE table_name SET
key1=replace(key1, '查找内容', '替换成内容')
[WHERE column_name3=value3]
常见删除操作汇总
根据条件删除:
DELETE FROM tb_name [WHERE options]
[ [ ORDER BY fields ] LIMIT n ]
limit的用法有两种:
带一个参数limit n :表示罗列查询后的前n项数据
带两个参数limit m, n :表示从第m行数据开始,罗列出n行数据
全部删除(表清空,包含自增计数器重置):
TRUNCATE tb_name
使用delete from tb_name 也可以删除所有的数据,但不能重置自增计数器
要想重置已存在数据的自增id,也可以使用代码:
-- 重置已有数据主键
SET @rownum = 0;
UPDATE timer SET id = @rownum := @rownum +1;
删除中常见的日期操作方法:
求时间差:
TIMESTAMPDIFF(interval, time_start, time_end)可计算time_start-time_end的时间差,单位以指定的interval为准,常用可选:
SECOND 秒
MINUTE 分钟(返回秒数差除以60的整数部分)
HOUR 小时(返回秒数差除以3600的整数部分)
DAY 天数(返回秒数差除以3600*24的整数部分)
MONTH 月数
YEAR 年数
例如牛客上一道经典例题
请删除exam_record表中作答时间小于5分钟整且分数不及格(及格线为60分)的记录;
delete from exam_record
where timestampdiff(minute, start_time, submit_time) < 5
-- where submit_time - start_time < 500
and score < 60;
求日期可以用函数timestampdiff(), 如果用两个日期相减,得到结果为一个将日期看做整数的整数。