第三十四例:插入记录(1)
- 题目地址:插入记录(一)牛客题霸牛客网 (nowcoder.com)
- 初始化数据:
droptable if EXISTS exam_record;
CREATETABLE IF NOT EXISTS exam_record (
id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
uid intNOTNULL COMMENT '用户ID',
exam_id intNOTNULL COMMENT '试卷ID',
start_time datetimeNOTNULL COMMENT '开始时间',
submit_time datetime COMMENT '提交时间',
score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;
TRUNCATE exam_record;
- 题目描述:牛客后台会记录每个用户的试卷作答记录到exam_record表,现在有两个用户的作答记录详情如下:
- 用户1001在2021年9月1日晚上10点11分12秒开始作答试卷9001,并在50分钟后提交,得了90分;
- 用户1002在2021年9月4日上午7点1分2秒开始作答试卷9002,并在10分钟后退出了平台。
- 试卷作答记录表exam_record中,表已建好,其结构如下,请用一条语句将这两条记录插入表中。
- 方法1:指定表的列名,提供插入的值,支持多行
insertinto table_name(column1,column2,...) values(value1,value2,...),(value3,value4,...);
- 示例
insertinto
exam_record(uid,exam_id,start_time,submit_time,score)
values
(1001,9001,'2021-09-01 22:11:12','2021-09-01 23:01:12',90),
(1002,9002,'2021-09-04 7:1:2',null,null);
- 方法2:不需要指定表的列名,只需要提供要插入的值,支持插入一行
insertinto table_name value(values1,value2,...);
- 示例
insertinto exam_record value(null,1001,9001,'2021-09-01 22:11:12','2021-09-01 23:01:12',90);
- 方法3:不需要指定表的列名,只需要提供要插入的值,支持插入多行
insertinto table_name values(value1,value2,value3,...),(value4,value5,...);
- 示例
insertinto exam_score values(null,1001,9001,'2021-09-01 22:11:12','2021-09-01 21:01:12',90),(null.1002,9002,'2021-09-04 7:01:02',null,null);
- 方法4:要指定表的列名,提供要插入的值,支持插入一行
insertinto table_name(column1,column2,...)value(value1,value2,value3,...);
- 示例
insertinto exam_record(uid,exam_id,start_time,submit_time,score) value(1001,9001,'2021-09-01 22:11:12','2021-09-01 23:01:12',90);
第三十五例:插入记录(2)
- 题目地址:插入记录(二)牛客题霸牛客网 (nowcoder.com)
- 初始化数据:
droptable if EXISTS exam_record;
CREATETABLE IF NOT EXISTS exam_record (
id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
uid intNOTNULL COMMENT '用户ID',
exam_id intNOTNULL COMMENT '试卷ID',
start_time datetimeNOTNULL COMMENT '开始时间',
submit_time datetime COMMENT '提交时间',
score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATETABLE IF NOT EXISTS exam_record_before_2021 (
id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
uid intNOTNULL COMMENT '用户ID',
exam_id intNOTNULL COMMENT '试卷ID',
start_time datetimeNOTNULL COMMENT '开始时间',
submit_time datetime COMMENT '提交时间',
score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;
TRUNCATE exam_record;
TRUNCATE exam_record_before_2021;
INSERTINTO exam_record(uid,exam_id,start_time,submit_time,score) VALUES
(1001, 9001, '2020-01-01 09:00:01', null, null),
(1001, 9002, '2020-01-02 09:01:01', '2020-01-02 09:21:01', 70),
(1001, 9002, '2020-09-02 09:00:01', null, null),
(1002, 9001, '2021-05-02 10:01:01', '2021-05-02 10:30:01', 81),
(1002, 9002, '2021-09-02 12:01:01', null, null);
- 题目描述:我们已经创建了一张新表exam_record_before_2021用来备份2021年之前的试题作答记录,结构和exam_record表一致,请将2021年之前的已完成了的试题作答纪录导入到该表。后台会通过执行"SELECT * FROM exam_record_before_2021;"语句来对比结果
- 方法1:
insertinto table_name_new(column1,column2,column3,...) selectcolumn1,column2,column3,...from table_name where 条件
- 示例
insertinto exam_record_before_2021(uid,exam_id,start_time,submit_time,score)
select uid,exam_id,start_time,submit_time,score
from exam_record
whereyear(submit_time)<2021;
第三十六例:插入记录(3)
- 题目地址:插入记录(三)牛客题霸牛客网 (nowcoder.com)
- 初始化数据:
droptable if EXISTS examination_info;
CREATETABLE IF NOT EXISTS examination_info (
id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
exam_id int UNIQUE NOTNULL COMMENT '试卷ID',
tag varchar(32) COMMENT '类别标签',
difficulty varchar(8) COMMENT '难度',
duration intNOTNULL COMMENT '时长(分钟数)',
release_time datetime COMMENT '发布时间'
)CHARACTER SET utf8 COLLATE utf8_bin;
TRUNCATE examination_info;
INSERTINTO examination_info(exam_id,tag,difficulty,duration,release_time) VALUES
(9001, 'SQL', 'hard', 60, '2020-01-01 10:00:00'),
(9002, '算法', 'easy', 60, '2020-01-01 10:00:00'),
(9003, 'SQL', 'medium', 60, '2020-01-02 10:00:00'),
(9004, '算法', 'hard', 80, '2020-01-01 10:00:00');
- 题目描述:现在有一套ID为9003的高难度SQL试卷,时长为一个半小时,请你将 2021-01-01 00:00:00 作为发布时间插入到试题信息表examination_info(其表结构如下图),不管该ID试卷是否存在,都要插入成功,请尝试插入它。
- 方法1:就是使用replace into插入数据这个方式与insert into很相同,但不同的是:1.如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。2否则,直接插入新的数据。这将会使得表中出现重复的数据。
REPLACE INTO table_name_new(column1,column2,...) VALUES (value1,value2,...);
- 示例
replace into examination_info(exam_id,tag,difficulty,duration,release_time)
values(9003, 'SQL', 'hard', 90, '2021-01-01 00:00:00');