[英]How to make the Primary Key have X digits in PostgreSQL?
我对SQL相当陌生,但是一直在努力学习。 我目前在设置主键无论如何都具有8位数字方面遇到问题。
我尝试使用INT(8)
但是没有用。 同样, AUTO_INCREMENT
在PostgreSQL中不起作用,但是我看到有几种可以自动递增的数据类型,但是仍然存在键不够长的问题。
基本上,我希望数字代表用户ID,从10000000
开始并向上移动。 00000001
及以上版本也可以使用,对我来说无关紧要。
我看到了一个与之接近的答案,但不幸的是,它不适用于PostgreSQL。
希望我的问题有道理,如果没有,我会尽力澄清。
我的代码(我正在网站上使用该代码尝试为练习项目建立自己的论坛):
CREATE Table users (
user_id INT(8) NOT NULL AUTO_INCREMENT,
user_name VARCHAR(30) NOT NULL,
user_pass VARCHAR(255) NOT NULL,
user_email VARCHAR(255) NOT NULL,
user_date DATETIME NOT NULL,
user_level INT(8) NOT NULL,
UNIQUE INDEX user_name_unique (user_name),
PRIMARY KEY (user_id)
) TYPE=INNODB;
它不适用于PostgreSQL(9.4 Windows x64版本)。 我该怎么办?
您正在混合两个方面:
AUTO_INCREMENT
是MySQL的非标准概念,SQL Server使用IDENTITY(1,1)
等。
在Postgres中使用serial
列:
CREATE TABLE users (
user_id serial PRIMARY KEY
, ...
)
这是一种伪类型,它实现为integer
数据类型,并具有来自附加SEQUENCE
的列默认图形。 integer
很容易满足您的情况(-2147483648至+2147483647)。
如果您确实需要强制使用最多8个十进制数字的数字,请添加CHECK
约束 :
CONSTRAINT id_max_8_digits CHECK (user_id BETWEEN 0 AND < 99999999)
要以任何所需的方式显示数字-将0填充为8位数字(对于您的情况),请使用to_char()
:
SELECT to_char(user_id, '00000000') AS user_id_8digit
FROM users;
那太快了。 请注意,输出现在是text
,而不是integer
。
SQL提琴。
您的代码中还有一些其他特定于MySQL的东西:
您可以将user_id设置为串行类型列,并将此序列的种子设置为10000000。
为什么?
mysql中的int(8)实际上并不只存储8位数字,它仅显示8位数字
Postgres支持检查约束。 您可以使用如下形式:
create table foo (
bar_id int primary key check ( 9999999 < bar_id and bar_id < 100000000 )
);
如果这是为了给重要文件(如发票)打上空白,那么就不应该使用序列/ auto_increment
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.