分享

【第8天】SQL进阶-更新记录(SQL 小虚竹)

 小虚竹 2022-09-17 发布于福建

回城传送–》《32天SQL筑基》

文章目录

零、前言

今天是学习 SQL 打卡的第 8 天,每天我会提供一篇文章供群成员阅读( 不需要订阅付钱 )。

希望大家先自己思考,如果实在没有想法,再看下面的解题思路,自己再实现一遍。在小虚竹JAVA社区 中对应的 【打卡贴】打卡,今天的任务就算完成了,养成每天学习打卡的好习惯。

​ 虚竹哥会组织大家一起学习同一篇文章,所以有什么问题都可以在群里问,群里的小伙伴可以迅速地帮到你,一个人可以走得很快,一群人可以走得很远,有一起学习交流的战友,是多么幸运的事情。

​ 我的学习策略很简单,题海策略+ 费曼学习法。如果能把这些题都认认真真自己实现一遍,那意味着 SQL 已经筑基成功了。后面的进阶学习,可以继续跟着我,一起走向架构师之路。

今天的学习内容是:SQL进阶-更新记录

一、练习题目

题目链接难度
更新记录:SQL113 更新记录(一)★★☆☆☆
更新记录:SQL114 更新记录(二)★★★☆☆

二、SQL思路

更新记录:SQL113 更新记录(一)

在这里插入图片描述

初始化数据

drop table if EXISTS examination_info;
CREATE TABLE IF NOT EXISTS examination_info (
id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
exam_id int UNIQUE NOT NULL COMMENT '试卷ID',
tag varchar(32) COMMENT '类别标签',
difficulty varchar(8) COMMENT '难度',
duration int NOT NULL COMMENT '时长',
release_time datetime COMMENT '发布时间'
)CHARACTER SET utf8 COLLATE utf8_bin;
TRUNCATE examination_info;
INSERT INTO examination_info(exam_id,tag,difficulty,duration,release_time) VALUES
(9001, 'SQL', 'hard', 60, '2020-01-01 10:00:00'),
(9002, 'python', 'easy', 60, '2020-01-01 10:00:00'),
(9003, 'Python', 'medium', 80, '2020-01-01 10:00:00'),
(9004, 'PYTHON', 'hard', 80, '2020-01-01 10:00:00');

解法

要求处理:

  • 请把examination_info表中tag为PYTHON的tag字段全部修改为Python。

分析:

  • 更新的SQL语法是:

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

套用语法

UPDATE examination_info
SET tag ='Python' 
WHERE tag='PYTHON'

在这里插入图片描述
在这里插入图片描述

更新记录:SQL114 更新记录(二)

在这里插入图片描述

初始化数据

drop table if EXISTS exam_record;
CREATE TABLE IF NOT EXISTS exam_record (
id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
uid int NOT NULL COMMENT '用户ID',
exam_id int NOT NULL COMMENT '试卷ID',
start_time datetime NOT NULL COMMENT '开始时间',
submit_time datetime COMMENT '提交时间',
score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;
INSERT INTO exam_record(uid,exam_id,start_time,submit_time,score) VALUES
(1001, 9001, '2020-01-02 09:01:01', '2020-01-02 09:21:01', 80),
(1001, 9002, '2021-09-01 09:01:01', '2021-09-01 09:21:01', 90),
(1002, 9001, '2021-08-02 19:01:01', null, null),
(1002, 9002, '2021-09-05 19:01:01', '2021-09-05 19:40:01', 89),
(1003, 9001, '2021-09-02 12:01:01', null, null),
(1003, 9002, '2021-09-01 12:01:01', null, null);


解法

要求处理:

  • 请把exam_record表中2021年9月1日之前开始作答的未完成记录全部改为被动完成,即:将完成时间改为’2099-01-01 00:00:00’,分数改为0。

分析:

  • 更新的SQL语法是:

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

  • exam_record表中2021年9月1日之前开始作答的未完成记录,就是没有提交时间的记录,意味着submit_time字段的值是为null的
  • 要把完成时间改为’2099-01-01 00:00:00’,分数改为0

套用语法


UPDATE exam_record
SET submit_time='2099-01-01 00:00:00',
    score=0
WHERE start_time<'2021-09-01' 
AND submit_time is null

在这里插入图片描述

三、扩展

1、更新数据表中的所有记录

更新数据表中的所有记录,只需要将UPDATE语句的WHERE条件省略即可

2、更新表中特定的数据行

MySQL支持更新表中特定的数据行,此时,需要添加WHERE条件对更新的数据记录进行限制。

更新记录:SQL113 更新记录(一)就是这样的

3、更新某个范围内的数据

MySQL支持更新某个范围内的数据,可以通过BETWEEN…AND语句或者“>”“>=”“<”“<=”“<>”“!=”等运算符,或者LIKE、IN、NOT IN等语句实现。

更新记录:SQL114 更新记录(二)就是这样的

4、更新符合正则表达式的数据

MySQL中匹配正则表达式需要使用关键字REGEXP,在REGEXP关键字后面跟上正则表达式的规则即可。

例如:examination_info表有如下的数据
在这里插入图片描述
要对difficulty字段的值是以sy结尾的记录数据,更新duration值为61
在这里插入图片描述
在这里插入图片描述

刚好说到SQL的正则表达式,这里简单介绍几句

开始支持的版本:3.22.21 ,所以可放心使用
SQL正则表达式提供了四种函数:

  • REGEXP_LIKE (匹配)
  • REGEXP_INSTR (包含)
  • REGEXP_REPLACE (替换)
  • REGEXP_SUBSTR (提取)

正则表达式常用字
在这里插入图片描述

常用的正则表达式:

匹配由26个英文字母组成的字符串: ^[A-Za-z]+$
匹配由26个英文字母的大写组成的字符串: ^[A-Z]+$
匹配由26个英文字母的小写组成的字符串: ^[a-z]+$
匹配由数字和26个英文字母组成的字符串: ^[A-Za-z0-9]+$
匹配由数字和26个英文字母或者下划线组成的字符串: ^\w+$
匹配整数: ^-?[1-9]\d*$
匹配正整数: ^[1-9]\d*$
匹配负整数: ^-[1-9]\d*$
匹配非负整数: ^[1-9]\d*|0$
匹配非正整数: ^-[1-9]\d*|0$
电子邮箱: ^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$
URL	: ^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
IP地址:	^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
HTML标签: ^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$
SQL语句: ^(select|drop|delete|create|update|insert).*$
邮政编码: ^[1-9]\d{5}(?!\d)$
Unicode编码中文字符串: ^[u4e00-u9fa5],{0,}$
空白行: \n[\s| ]*\r
首尾空格: (^\s*)|(\s*$)
双字节字符:	[^\x00-\xff]

四、参考

SQL正则表达式:https://blog.csdn.net/hyfstyle/article/details/114640134
mysql 入门技能树-数据修改:https://edu.csdn.net/skill/mysql/mysql-2eb9e9d351e848f580b70cf9e7b93280?category=1087&typeId=81219

我是虚竹哥,我们明天见~

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多