我在PostgreSQL中有两个表。第一个应该具有一个自动递增的ID字段,第二个要引用该字段:
CREATE TABLE tableA (id SERIAL NOT NULL PRIMARY KEY, ...)
CREATE TABLE tableB (parent INTEGER NOT NULL REFERENCES tableA(id), ...)
Run Code Online (Sandbox Code Playgroud)
根据文档,SERIAL在签名时充当无符号4字节整数INTEGER:
serial 4 bytes autoincrementing integer 1 to 2147483647
integer 4 bytes typical choice for integer -2147483648 to +2147483647
Run Code Online (Sandbox Code Playgroud)
如果我正确理解,我使用的数据类型不兼容,但是PostgreSQL显然缺少无符号整数。我知道我可能不会使用超过2 * 10 ^ 9个ID(如果我这样做了,我总是可以使用BIGSERIAL),这并不是那么重要,但是对我来说,带符号整数引用一个无符号似乎有点不干净一。我确信必须有一个更好的方法-我错过了什么吗?
A serial 是一个整数,并且不是“无符号”。自动创建的序列恰好从1开始-仅此而已。列的数据类型仍然是integer(如果需要,您可以使序列从-2147483648开始)。
Run Code Online (Sandbox Code Playgroud)CREATE TABLE tablename ( colname SERIAL );是等同于
Run Code Online (Sandbox Code Playgroud)CREATE SEQUENCE tablename_colname_seq; CREATE TABLE tablename ( colname integer NOT NULL DEFAULT nextval('tablename_colname_seq') ); ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
(强调我的)
| 归档时间: |
|
| 查看次数: |
593 次 |
| 最近记录: |