【问题标题】:Raw query to set AutoIncrement to false?将 AutoIncrement 设置为 false 的原始查询?
【发布时间】:2021-12-30 07:49:25
【问题描述】:

student 表中的id 列是自动递增的。我想将其设为非自动递增。我可以知道,我该如何修改以下查询以使其正常工作?

 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;)

【问题讨论】:

    标签: laravel database postgresql migration laravel-8


    【解决方案1】:

    PostgreSQL 中的正确语法是:

    ALTER TABLE student ALTER COLUMN id DROP DEFAULT;
    

    其中id 是串行列。

    您可能还想删除 not null 约束:

    ALTER TABLE student ALTER COLUMN id DROP NOT NULL;
    

    【讨论】:

      【解决方案2】:

      这是为什么发布表定义 (ddl) 和 Postgres 版本至关重要的一个示例。如果 Postgres 版本早于版本 10,或者如果版本 10 或更高版本仍然定义为串行/大串行,@Zakaria 是正确的。但是,版本 10 及更高版本的首选定义是 generated always as identity。如果定义为您需要的身份:

      alter table student alter column id drop identity.
      

      我不会放弃 not null 约束,如果它是 PK 则没有实际意义,因为它会自动不为空。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-12
        • 2010-10-31
        • 2010-10-16
        • 1970-01-01
        • 2015-06-26
        • 1970-01-01
        • 1970-01-01
        • 2019-02-03
        相关资源
        最近更新 更多