文档首页/ 云数据库 GaussDB/ 开发指南(集中式_V2.0-10.x)/ FAQ-非透明多写/ 其他/ 为什么自增列插入0后无法通过该字段查询到该数据?
更新时间: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;

相关文档