看文档说 insertSelective 不插入为 null 的项,但就算在 insert 里面插入,为 null 的项不也是不会插入吗? 如果意思是 insertSelective 为 null 的项会用自动生成的值,那难道 insert 插入时 null 项不会用自动生成的值?
class User{
Integer id;
String name;
String address;
}
那么insert(User{null,"Jack",null}
和insertSelective(User{null,"Jack",null}
有什么区别?
1
Oktfolio 2023-01-15 10:59:02 +08:00
User{null,"Jack","@email.com"}
INSERT INTO `user`(field, name, email) VALUES(null, 'Jack', '@email.com') INSERT INTO `user`(name, email) VALUES('Jack', '@email.com') 这样的区别 |
2
movq OP @Oktfolio 如果没有设置自增主键,那么这两种插入的结果 id 都是 null 。如果设置了自增主键,这两者的 id 都是自增主键,区别在哪里呢?
|
3
Oktfolio 2023-01-15 11:20:17 +08:00
@movq field 为 not null 时前者插不进去(有自增主键除外); field 有 default value 时前者插进去为 null 而不是 default value ;设置了自增主键时,执行结果都是自增主键。
|
4
kingwrcy 2023-01-15 11:21:55 +08:00
你为何不看一眼生成的 SQL ,不就知道区别在哪里了?
|
7
Oktfolio 2023-01-15 11:35:04 +08:00
field 为 not null 时均插不进去(有自增主键除外);
field 有 default value 时前者插进去为 null 而不是 default value ; field 为 not null 且有 default value 时前者插不进去,后者为 default value ; 设置了自增主键时,执行结果都是自增主键。 |
8
h0099 2023-01-16 08:45:46 +08:00
#4 早已道明`你为何不看一眼生成的 SQL ,不就知道区别在哪里了?`
#1 INSERT INTO `user`(field, name, email) VALUES(null, 'Jack', '@email.com') INSERT INTO `user`(name, email) VALUES('Jack', '@email.com') 说白了就是 null 值的语义到底是 作为字段列表的 null 值 还是 不在字段列表中指定他 而数据库层对您没指定的字段赋值是 field default value ,如果没有 field value 会返回 ERROR |