PostgreSQL单主键自增表插入问题:仅主键列时插入报错问询
解决单自增主键列的表插入问题
首先得修正你的建表语句——原来的语句只把id设为主键和非空,但没开启自增属性,不同数据库的自增语法不一样,对应写法如下:
按数据库类型设置自增主键
MySQL/MariaDB
CREATE TABLE my_table ( id INT PRIMARY KEY AUTO_INCREMENT NOT NULL );
PostgreSQL
-- 兼容旧版本的写法 CREATE TABLE my_table ( id SERIAL PRIMARY KEY ); -- PostgreSQL 10及以上推荐用IDENTITY CREATE TABLE my_table ( id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY );
SQL Server
CREATE TABLE my_table ( id INT PRIMARY KEY IDENTITY(1,1) NOT NULL );
插入数据的正确姿势
当表只有这一个自增主键列时,INSERT INTO my_table () VALUES ();这种写法不符合SQL语法规范,会报错,改用以下方法:
通用写法(多数数据库支持)
直接让数据库使用默认值生成自增ID:
INSERT INTO my_table DEFAULT VALUES;
特定数据库的替代写法
- MySQL/MariaDB:可以显式指定列并传
NULL,自增列会自动忽略NULL生成新值:
INSERT INTO my_table (id) VALUES (NULL);
- PostgreSQL(IDENTITY):如果用了
GENERATED ALWAYS,可以指定列并传DEFAULT:
INSERT INTO my_table (id) VALUES (DEFAULT);
内容的提问来源于stack exchange,提问作者Max888
相关产品推荐
相关产品推荐

