容城县建设银行网站,whois查询 站长工具,工伤保险网站,app网站建站系统大家好#xff0c;我是RecordLiu!
今天给大家分享的是SQL中删除记录的不同方式#xff0c;我会用几道真题来给大家讲解。
题目直达链接#xff1a;
牛客网在线SQL编程练习
切换到SQL篇就能看到了。 我这里先列下知识点#xff1a;
SQL中进行简单删除的语法是什么?SQL…大家好我是RecordLiu!
今天给大家分享的是SQL中删除记录的不同方式我会用几道真题来给大家讲解。
题目直达链接
牛客网在线SQL编程练习
切换到SQL篇就能看到了。 我这里先列下知识点
SQL中进行简单删除的语法是什么?SQL中如何限定条数删除记录?SQL中如何清空表记录并重置自增长ID主键的值?
接下来我们详细看看。
题目1简单删除
描述
exam_record是一张试卷作答记录表其中包含多年来的用户作答试卷记录结构如下表 作答记录表exam_record中 start_time是试卷开始时间 submit_time 是交卷即结束时间。
请删除exam_record表中作答时间小于5分钟整且分数不及格及格线为60分的记录。
题解
SQL中删除记录可以使用以下语法
DELETE FROM tableName [WHERE xxx]同样跟update语句一样在不指定where条件下,delete会把表里面的记录全部删除这点是需要特别注意的不加where条件的delete语句相当危险线上应该避免这样的操作。
这道题的难点在于判断作答时间小于5分钟作答时间我们知道可以用结束时间减去开始时间得到。
观察exam_record可以发现start_time和submit_time设置的都是datetime类型即它们存储的是2020-01-01 22:11:12这样格式的数据是一个时间字符串这样就不能直接相减了。
一种办法是可以使用unix_timestamp 函数将start_time和submit_time的值转化成时间戳格式(即时间对应的秒数)在判断相差小于300秒(5分钟*60300秒)SQL代码如下:
DELETE FROM exam_record
WHERE (UNIX_TIMESTAMP(submit_time) - UNIX_TIMESTAMP(start_time))300
AND score60;另一种办法是可以使用timestampdiff函数来实现。
timestampdiff函数的具体用法为:
timestampdiff(interval,datetime1,datetime2)其中,比较单位interval取值可以为以下
second 秒数minute 分钟hour 小时day 天month 月year 年
比如为minutetimestampdiff最终的结果为datetime1和datetime2相差的秒数对60取整之后的值。
这道题用timestampdiff的写法为:
DELETE FROM exam_record
WHERE timestampdiff(minute,start_time,submit_time)5
AND score60;题目2限定条数删除
描述
请删除exam_record表中未完成作答或作答时间小于5分钟整的记录中开始作答时间最早的3条记录。
exam_record的表结构如题目1。
题解
未完成作答即submit_time为NULL的作答时间小于5分钟可以用timestampdiff函数来比较。
这道题多了一个限定条件开始作答时间最早的3条记录即我们要根据开始作答时间排序后再取前3条记录代码实现如下:
DELETE FROM exam_record
WHERE TIMESTAMPDIFF(MINUTE, start_time, submit_time) 5
OR submit_time IS NULL
ORDER BY start_time ASC LIMIT 3;题目3清空表记录
描述
请删除exam_record表中所有记录并重置自增主键。
exam_record的表结构如题目1。
题解
delete语句在不加where条件下会删除所有记录的数据但并不会重置自增主键。
因此这道题使用以下语句是不行的:
delete from exam_record而使用truncate语法就可以删除表中所有记录并且重置自增主键。
代码实现如下:
truncate table exam_record;好了今天的文章就分享到这里了如果觉得我的文章对你有帮助欢迎多分享给你身边的朋友。
我们下期再见