【场景】:插入新数据、批量 【分类】:插入数据、自增ID

分析思路

难点:

1.如何自动计算时间

insert into table(col1, col2,...,coln) values (value1, value2,...,valuen) 

不写字段名,需要填充自增ID

  • [使用]:0或者null或者default,自增id默认从1开始。
  • [使用]:或者没有在自增id中出现的(不重复)数(例如-1,-2),浮点型数据例如3.4,最后显示3,会进行四舍五入。即使定义了int类型,输入‘3’或者浮点型,都会强制转化为int类型,但是输入'a'会报错。具体细节可以看源码。

第一个字段id为什么可以写null? 示例中建表的时候写了id为自增id,而写0或者null或者default或者没有在自增id中出现的(不重复)数(例如-1,-2),系统都会自动填充id。如果建表的时候没有写明是自增id,那么主键一定是不能为空的,这个时候写null就会报错。

按字段名填充,可以不录入id

  • [注意]:字段要与值一一对应。

其余注意事项:

  • 字段名可以省略,默认所有列;

  • datetime插入要加引号。因为录入值的类型和字段的类型要一致或兼容;

  • 字段和值的个数必须一致。不能出现一行记录5个值,另外一行6个值的情况;

  • 如果写了字段,即使是空值也不能空着,用null代替;

  • 时间的计算:系统计算,最好不要人工计算。

扩展

前往查看:MySQL 插入语句

求解代码

方法一:

写字段名

insert into 
    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 07:01:02', null, null)

方法二:

不写字段名 + 自增id + 人工算时间

insert into 
    exam_record 
values
(null,1001,9001, "2021-09-01 22:11:12","2021-09-01 23:01:12",90),
(null,1002,9002, "2021-09-04 07:01:02",null,null)

方法三:

不写字段名 + 自增id + 系统算时间使用date_add

insert into 
    exam_record
values 
(default,1001,9001,'2021-09-01 22:11:12',date_add('2021-09-01 22:11:12',interval 50 minute) ,90),
(default,1002,9002,'2021-09-04 07:01:02',default ,default)

方法四:

不写字段名 + 自增id + 系统算时间使用 + interval 50 minute

insert into 
    exam_record 
values 
(0,1001,9001,'2021-9-1 22:11:12','2021-9-1 22:11:12' + interval 50 minute,90),
(0,1002,9002,'2021-9-4 7:1:2',null,null)