将 AutoIncrement 设置为 false 的原始查询?
Raw query to set AutoIncrement to false?
student
table 中的 id
列是自动递增的 one.I 想要将其变为非自动递增。我可以知道,我如何修改下面的查询才能正常工作?
DB::statement("ALTER TABLE student SET AUTO_INCREMENT=FALSE;");
以上代码显示以下错误。
Illuminate\Database\QueryException
SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "AUTO_INCREMENT"
LINE 1: ALTER TABLE student SET AUTO_INCREMENT=FALSE;
^ (SQL: ALTER TABLE student SET AUTO_INCREMENT=FALSE;)
PostgreSQL 中的正确语法是:
ALTER TABLE student ALTER COLUMN id DROP DEFAULT;
其中 id
是序列号列。
您可能还想删除 not null
约束:
ALTER TABLE student ALTER COLUMN id DROP NOT NULL;
这是一个例子,说明为什么发布 table 定义 (ddl) 和 Postgres 版本很重要。如果 Postgres 版本早于版本 10,或者版本 10 或更高版本并且仍定义为 serial/bigserial,@Zakaria 是正确的。但是,版本 10 及更高版本的首选定义是 generated always as identity
。如果定义为身份你需要:
alter table student alter column id drop identity.
我不会删除 not null
约束条件,如果它是 PK,则没有实际意义,因为它会自动不为空。
student
table 中的 id
列是自动递增的 one.I 想要将其变为非自动递增。我可以知道,我如何修改下面的查询才能正常工作?
DB::statement("ALTER TABLE student SET AUTO_INCREMENT=FALSE;");
以上代码显示以下错误。
Illuminate\Database\QueryException
SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "AUTO_INCREMENT"
LINE 1: ALTER TABLE student SET AUTO_INCREMENT=FALSE;
^ (SQL: ALTER TABLE student SET AUTO_INCREMENT=FALSE;)
PostgreSQL 中的正确语法是:
ALTER TABLE student ALTER COLUMN id DROP DEFAULT;
其中 id
是序列号列。
您可能还想删除 not null
约束:
ALTER TABLE student ALTER COLUMN id DROP NOT NULL;
这是一个例子,说明为什么发布 table 定义 (ddl) 和 Postgres 版本很重要。如果 Postgres 版本早于版本 10,或者版本 10 或更高版本并且仍定义为 serial/bigserial,@Zakaria 是正确的。但是,版本 10 及更高版本的首选定义是 generated always as identity
。如果定义为身份你需要:
alter table student alter column id drop identity.
我不会删除 not null
约束条件,如果它是 PK,则没有实际意义,因为它会自动不为空。