我正在从 MySQL 切换到 PostgreSQL,我想知道如何才能拥有一个带有 AUTO INCREMENT
的 INT
列。我在 PostgreSQL 文档中看到了一个名为 SERIAL
的数据类型,但在使用它时出现语法错误。
是的,SERIAL 是等效的功能。
CREATE TABLE foo (
id SERIAL,
bar varchar
);
INSERT INTO foo (bar) VALUES ('blah');
INSERT INTO foo (bar) VALUES ('blah');
SELECT * FROM foo;
+----------+
| 1 | blah |
+----------+
| 2 | blah |
+----------+
SERIAL 只是一个围绕序列的创建表时间宏。您不能将 SERIAL 更改为现有列。
您可以使用任何其他 integer data type,例如 smallint
。
例子 :
CREATE SEQUENCE user_id_seq;
CREATE TABLE user (
user_id smallint NOT NULL DEFAULT nextval('user_id_seq')
);
ALTER SEQUENCE user_id_seq OWNED BY user.user_id;
最好使用您自己的数据类型,而不是用户 serial data type。
CREATE SEQUENCE
postgresql.org/docs/8.1/interactive/sql-createsequence.html 之后)。但是,我不太确定您为什么要更改所有者。
如果要将序列添加到已经存在的表中的 id 中,可以使用:
CREATE SEQUENCE user_id_seq;
ALTER TABLE user ALTER user_id SET DEFAULT NEXTVAL('user_id_seq');
"Table"
和"table"
,否则只需将其不加引号并将其规范化为table
。惯例是永远不要在 Pg 中使用引号。如果需要,您可以使用混合大小写的名称来显示外观,只是不需要它:CREATE TABLE fooBar ( .. ); SELECT * FROM fooBar;
可以工作,SELECT * FROM foobar
也可以。INSERT INTO user
。