当前位置: 首页 > 面试题库 >

自动增量表列

王豪
2023-03-14
问题内容

使用Postgres,我试图用AUTO_INCREMENTSQL自动编号主键。但是,这给了我一个错误。

CREATE TABLE Staff   (
  ID        INTEGER NOT NULL AUTO_INCREMENT,
  Name      VARCHAR(40) NOT NULL,
  PRIMARY KEY (ID)
);

错误:

********** Error **********
ERROR: syntax error at or near "AUTO_INCREMENT"
SQL state: 42601
Character: 63

知道为什么吗?


问题答案:

Postgres 10或更高版本

serial列(请参见下文)保持不变。但是考虑一个 IDENTITY 专栏。Postgres10实现了此标准SQL功能。

手册CREATE TABLE中的基本语法和信息。

__用IDENTITY创建

CREATE TABLE staff (
   staff_id **int GENERATED BY DEFAULT AS IDENTITY** PRIMARY KEY
 , staff    text NOT NULL
);

IDENTITY添加 到现有表

表可能填充也可能不填充行。

ALTER TABLE staff ADD COLUMN staff_id int GENERATED BY DEFAULT AS IDENTITY;

同时使它成为PK(表还不能拥有PK):

ALTER TABLE staff ADD COLUMN staff_id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY;

有关的:

  • 如何在具有行的现有表中添加PostgreSQL 10标识列?

Postgres 9.6或更旧的版本

(或者,实际上是任何版本。)
改用 serial 伪数据类型:

CREATE TABLE staff (
   staff_id **serial** PRIMARY KEY,
 , staff    text NOT NULL
);

它会自动创建并附加序列对象,并从序列中将DEFAULT其设置为nextval()。它可以满足您的所有需求。

在示例中,我使用了小写的标识符。使用Postgres使您的生活更轻松。



 类似资料:
  • 这就是我所拥有的 当程序运行时,会出现一个添加新类别的屏幕,用户必须写入类别的名称和描述,但ID应该是自动的,并且应该在每次用户输入新类别时增加ID。我这样做并没有达到预期效果,它只增加了一次,但由于初始值保持在5,所以它总是6。

  • 问题内容: 我正在尝试在mysql数据库中创建一列,该列自动递增1但从0-Z开始然后滚动。 例如000、001、002,…,009、00A,00B,…,00Z,010,…,0ZZ,…,100。 我想让数据库通过自动递增字段创建列。 我的想法是: 为从0到36的每个字符创建一列,然后将行N(其中N是最低有效数字)自动递增1。然后在每列上添加触发器,以在第N列达到36时向N-1列添加1 。 创建一个包

  • 问题内容: 我刚遇到一个我无法解决的问题。 我有一个用作队列的数据库表,我在其中存储一些记录。处理记录后,它们将被删除。删除是由Rails构建在一个触发MySql数据库的循环中调用的。 但是现在我注意到,在表中将 autoIncrement Id (主键)设置回 1 。(这损坏了我在审计表中的引用。相同记录现在指向多个不同的项目队列) 我不使用或删除表构造,而是在代码中再次创建它。 是否有人遇到像

  • 问题内容: 我正在尝试更改没有主键或auto_increment列的表。我知道如何添加主键列,但我想知道是否有可能自动将数据插入主键列(我已经在数据库中有500行,并希望为其提供ID,但我不想手动执行) 。有什么想法吗?非常感谢。 问题答案: 在我的测试中,添加列的语句可以正常工作: 在为测试目的而创建的临时表上,以上语句创建了该 列,并为该表中的每个现有行插入了自动递增值,从1开始。

  • 问题内容: 我有下面的SQL,我正在尝试使用它创建一个表和一些列。作为它的一部分,我希望其中两列自动递增一个整数。当我尝试使用以下代码时,它给我一个错误。 当我从SQL中删除关键字“ AUTOINCREMENT”时,它可以正常工作。 是否可以有两个自动增量列?如果不是,是否有办法让一列在插入时自动从另一列(自动递增)中获取值? 谢谢 问题答案: 您不能有两个自动增量字段。您应该使用一个自动增量字段

  • 问题内容: 我正在寻找这样的查询: id | int | 自动增量 varchar | 255 这样桌子就看起来像 1 | val1 2 | val2 3 | val3 … 除了id总是以每一行都结束而已。 我怎样才能做到这一点? 问题答案: