更新时间:2026-07-28 GMT+08:00
为什么自增列插入0后无法通过该字段查询到该数据?
答:自增列插入值为0的数据后,表示自动为该字段分配下一个值。通过sql_mode参数增加no_auto_value_on_zero可以控制该机制(一般不建议在自增字段中插入值为0的数据)。
--建表,并插入数据。 gaussdb=# CREATE DATABASE testdb DBCOMPATIBILITY = 'B'; gaussdb=# \c testdb testdb=# CREATE TABLE test(c1 int, c2 int AUTO_INCREMENT); testdb=# INSERT INTO test VALUES (1,0),(2,0),(3,0); --通过如下查询无法查询到c2字段为0的数据。 testdb=# SELECT * FROM test WHERE c2 = 0; c1 | c2 ----+---- (0 rows) --实际数据如下: testdb=# SELECT * FROM test; c1 | c2 ----+---- 1 | 1 2 | 2 3 | 3 (3 rows) --通过如下设置后,可以在当前会话中在test表中插入c2字段为0的数据。 testdb=# SET sql_mode = 'no_auto_value_on_zero'; testdb=# INSERT INTO test VALUES(4,0); testdb=# SELECT * FROM test; c1 | c2 ----+---- 1 | 1 2 | 2 3 | 3 4 | 0 (4 rows) --重置sql_mode参数为默认值。 testdb=# RESET sql_mode; --删除。 testdb=# DROP TABLE test; testdb=# \c postgres gaussdb=# DROP DATABASE testdb;
父主题: 其他