1、显式设置

顾名思义,显式设置就是,把id固定,例如下面的插入sql,id设置为1

1.1、例子

# 实际填充数据
insert into from user(id,name,age,email) 
values(1,'burns',25,'357252539@qq.com');

1.2、优点:

简单,

1.3、缺点:

如果之前插入过这条记录,或者其他记录的id改为1,那么再次插入时就会报id冲突,这还是一条记录,如果批量插入,都写死id,那么你会痛苦到怀疑人生

2、查询出表中主键ID最大值+1做为添加下一条数据的主键ID

2.1、例子

# 实际填充数据
insert into from user(id,name,age,email) 
values((select max(id)+1 from user u),'burns',25,'357252539@qq.com');

2.2、优点:

1、不会出现id冲突的情况,

2、充分利用id,这点和表结构设置id自增,插入时不需要设置id值有明显区别;这种方式获取id最大值再加一,而表结构设置id自增,插入时不需要设置id值虽然也是自增,但是加入你删除了最新数据,再次插入数据不设置id的时候,你会发现以前使用过的id的数据即使删除了,也不会再使用,而是从从未用过的id开始

2.3、缺点:

为了id的灵活性,牺牲了sql的简洁性。

2.4、常见错误整理

执行语句报错

You can't specify target table 'user' for update in FROM clause

意思是不能再同一个表中查出数据又修改数据,所以要给表取个别名,避免错误。

3、表结构设置id自增,插入时不需要设置id值

如果你的表设置了主键自增,类似如下

那么你在插入数据的时候不用考虑id的值,例如spring boot,mybatis ,jpa框架 调用插入的时候,自动给id复制,不需要显示设置id,这种的话,

插入sql可以简单不设置id的值

3.1、例子

# 实际填充数据
insert into from user(name,age,email) 
values('burns',25,'357252539@qq.com');

3.2、优点

减少sql内容,方便,不会出现id冲突的情况

3.3、缺点

1、需要设置主键id为自增

 2、浪费id资源,即使最新id相关数据插入后又删除,这些id也无法被利用。

综上,建议使用查询出表中主键ID最大值+1做为添加下一条数据的主键ID方式

更多推荐