如题,id字段设置了主键且自增,但是插入数据时的语句为 insert into table (id,name) values (null, 'zhagnsan') 会报错,但是这种语句在mysql是可以执行的,如何解决呢?正常情况下逻辑会有带id和不带id新增数据的情况
在 mysql 8.0.23 上试验了一下你的语句:
REATE TABLE entity4
( id
int(11) NOT NULL AUTO_INCREMENT, fitem_field
int(11) DEFAULT NULL, PRIMARY KEY (id
) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3;
然后
insert into entity4 (id,fitem_field) values (null,666);
确实可以成功,但是可以看到,实际上 mysql 是把 id 先按照 auto_increment=5 ,null+5=5 ,插入的记录的 id 是 5,而不是 null ;再同样语句插入一遍,id 就是 6 ;如果你期望的 id 是 null ,就不对了;
pgsql 上面可能是处理流程不一样;也许在语法检查时,就认为sql语句不正确,而不是先运算再检查语法;
试验过程如下:
mysql> CREATE TABLE entity4
( id
int(11) NOT NULL AUTO_INCREMENT, fitem_field
int(11) DEFAULT NULL, PRIMARY KEY (id
) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3;
Query OK, 0 rows affected, 3 warnings (0.09 sec)
mysql> show tables;
| Tables_in_twt |
| entity4 |
1 row in set (0.00 sec)
mysql>
mysql>
mysql>
mysql> insert into entity4 (id,fitem_field) values (null,666);
Query OK, 1 row affected (0.01 sec)
mysql> show tables;
| Tables_in_twt |
| entity4 |
1 row in set (0.00 sec)
mysql> select * from entity4;
| id | fitem_field |
| 5 | 666 |
1 row in set (0.00 sec)
mysql>
mysql>
mysql>
mysql>
mysql> insert into entity4 (id,fitem_field) values (null,666);
Query OK, 1 row affected (0.00 sec)
mysql> select * from entity4;
| id | fitem_field |
| 5 | 666 |
| 6 | 666 |
2 rows in set (0.00 sec)
mysql>
mysql>
mysql>
收起1 首先说这个是数据库基础理论问题
2 我个人认为myslq 也不会成功 (如果id 是数字类型的主键)
可以再聊聊你的正式需求和场景