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

PostgreSQL 9.1主键自动递增

孔海超
2023-03-14
问题内容

我正在尝试添加具有自动增量的主键。

我已经阅读了一些文档和其他问题-有SERIALnextval()声明,但是不起作用。

这是我做的:

CREATE TABLE IF NOT EXISTS "category" (
  "id" integer SERIAL PRIMARY KEY,
  "name" varchar(30) DEFAULT NULL
); // the error near "SERIAL"

CREATE SEQUENCE your_seq;
CREATE TABLE IF NOT EXISTS "category" (
  "id" integer PRIMARY KEY nextval('your_seq'),
  "name" varchar(30) DEFAULT NULL
); // the error near 'nextval'

我怎么了 我只想将主键增加1。


问题答案:

serial是或多或少是一种列类型,所以说integer serial就像说text text,只是说serial

CREATE TABLE IF NOT EXISTS "category" (
  "id" SERIAL PRIMARY KEY,
  "name" varchar(30) DEFAULT NULL
);

如果您想自己创建序列,那么您想id将序列中下一个值的默认值设为默认值,这意味着default nextval('your_seq')

CREATE SEQUENCE your_seq;
CREATE TABLE IF NOT EXISTS "category" (
  "id" integer PRIMARY KEY default nextval('your_seq'),
  "name" varchar(30) DEFAULT NULL
);

为了模拟通常的serial行为,您还需要使表拥有该序列:

alter sequence your_seq owned by category.id;

阅读手册的“串行类型”部分可能会很有成果。

我还建议您不要对表名和列名加双引号,除非必须这样做。PostgreSQL将折叠的标识符以小写因此id"id"将是相同的事情,但不必要的报价是一个坏习惯,很容易导致行情的大混乱无处不在。



 类似资料:
  • 我将向一个SQL Server表中添加一行,该表的主键列是自动递增的(< code>identity)。当我以编程方式向表中插入一个新行时,有没有办法获得所添加行的键值,因为我想在另一个相关表中将它用作外键?

  • 问题内容: 这可能在MySql中吗?我可以有一个以字母为前缀的自动递增主键,例如R1234,R1235,R1236 …等等吗? 问题答案: 您可以做的是将密钥存储为两列。一个char前缀和一个auto-incrementing int,它们都被分组为主键。

  • 问题内容: 我有一个带有自动递增主键的MySQL表。我删除了表中间的一些行。例如,现在在ID列中有类似的内容:12、13、14、19、20。我删除了15、16、17和18行。 我想重新分配/重置/重新排序主键,以便保持连续性,即将19设为15,将20设为16,依此类推。 我该怎么做? 问题答案: 您可以删除主键列并重新创建它。然后应按顺序重新分配所有ID。 但是,在大多数情况下,这可能不是一个好主

  • 问题内容: 是否可以在MySQL中制作结合了alpha元素和数字的自动增量功能? 我有一个具有QAb99,QAb101,QAd9003等键的现有系统。最大数字部分的范围为1到9999,而字母以QA开头,范围从QAa到QAd等,最终将通过QAd9999到QAe1等。 。 在SQL或SQL外部(例如php脚本)管理生成新密钥是否更好? 谢谢。 问题答案: 我前一阵子问过。不幸的是,Mysql并没有这样

  • 在spring data jpa应用程序中,我创建了一个带有@entity注释的模型。我正在将该模型数据保存到表中。我正在自动递增主键。但当我将数据保存到表中时,它不是按顺序自动递增的。 类文件 桌子 谁能告诉我为什么主键没有按顺序自动递增?为什么它不需要2,3,4......