1、插入记录的方式汇总:

  • 普通插入(全字段):INSERT INTO table_name VALUES (value1, value2, …)
  • 普通插入(限定字段):INSERT INTO table_name (column1, column2, …) VALUES (value1, value2, …)
  • 多条一次性插入:INSERT INTO table_name (column1, column2, …) VALUES (value1_1, value1_2, …), (value2_1, value2_2, …), …
  • 从另一个表导入:INSERT INTO table_name SELECT * FROM table_name2 [WHERE key=value]
  • 带更新的插入:REPLACE INTO table_name VALUES (value1, value2, …) (注意这种原理是检测到主键或唯一性索引键重复就删除原记录后重新插入)

2、案例

(1)现在有一套ID为9003的高难度SQL试卷,时长为一个半小时,请你将 2021-01-01 00:00:00 作为发布时间插入到试题信息表examination_info(其表结构如下图),不管该ID试卷是否存在,都要插入成功,请尝试插入它。

试题信息表examination_info:

FiledTypeNullKeyExtraDefaultComment
idint(11)NOPRIauto_increment(NULL)自增ID
exam_idint(11)NOUNI(NULL)试卷ID
tagvarchar(32)YES(NULL)类别标签
difficultyvarchar(8)YES(NULL)难度
durationint(11)NO(NULL)时长(分钟数)
release_timedatetimeYES(NULL)发布时间
--t1:先删除可能存在的9003号试卷,再用insert into插入:DELETE FROM examination_info WHERE exam_id=9003;INSERT INTO examination_info (exam_id,tag,difficulty,duration,release_time)VALUES (9003,'SQL','hard',90,'2021-01-01 00:00:00');--t2:试卷ID列有唯一性索引,自增主键可直接设置为NULL或0或DEFAULT:REPLACE INTO examination_info VALUES (NULL, 9003, "SQL", "hard", 90, "2021-01-01 00:00:00");--t3:可以限定字段插入REPLACE INTO examination_info(exam_id,tag,difficulty,duration,release_time) VALUES (9003, "SQL", "hard", 90, "2021-01-01 00:00:00");

(2)现有一张试卷作答记录表exam_record,结构如下表,其中包含多年来的用户作答试卷记录,由于数据越来越多,维护难度越来越大,需要对数据表内容做精简,历史数据做备份。

表exam_record:

FiledTypeNullKeyExtraDefaultComment
idint(11)NOPRIauto_increment(NULL)自增ID
uidint(11)NO(NULL)用户ID
exam_idint(11)NO(NULL)试卷ID
start_timedatetimeNO(NULL)开始时间
submit_timedatetimeYES(NULL)提交时间
scoretinyint(4)YES(NULL)得分
INSERT INTO exam_record_before_2021(uid, exam_id, start_time, submit_time, score)SELECT uid, exam_id, start_time, submit_time, scoreFROM exam_recordWHERE YEAR(submit_time) < '2021';

我们已经创建了一张新表exam_record_before_2021用来备份2021年之前的试题作答记录,结构和exam_record表一致,请将2021年之前的已完成了的试题作答纪录导入到该表。