PostgreSQL 整数类型
本文介绍了 PostgreSQL 中的三种整数数据类型:SMALLINT
,INTEGER
,和 BIGINT
。
整数类型将内容存储为整数,PostgreSQL 提供了三种整数数据类型: SMALLINT
,INTEGER
,和 BIGINT
。
下表展示了不同的整数类型的占用的字节数和数值范围:
类型 | 存储大小 | 最小值 | 最大值 |
---|---|---|---|
SMALLINT |
2 字节 | -32,768 | 32,767 |
INTEGER |
4 字节 | -2,147,483,648 | 2,147,483,647 |
BIGINT |
8 字节 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
注意,BIGINT
类型占用空间大,并且会降低数据库性能。
PostgreSQL 整数类型用法
要定义一个整数类型的列,请使用如下语法:
column_name {SMALLINT | INTEGER | BIGINT} column_constrait
注意, INT
是 INTEGER
的同义词,您可以使用 INT
代替 INTEGER
。
要定义一个整数类型的主键列,请使用如下语法:
column_name {SMALLINT | INTEGER | BIGINT} GENERATED ALWAYS AS IDENTITY PRIMARY KEY
要定义一个整数类型的标识列,请使用如下语法:
column_name {SMALLINT | INTEGER | BIGINT} GENERATED ALWAYS AS IDENTITY
要定义一个 SERIAL
列, 请使用如下语法:
column_name SERIAL PRIMARY KEY
注意, SMALLSERIAL
的内部类型为 SMALLINT
,SERIAL
的内部类型为 INTEGER
,BIGSERIAL
的内部类型为 BIGINT
。
PostgreSQL 整数类型实例
SMALLINT
类型实例
首先,使用下面的语句创建一个测试表:
CREATE TABLE test_smallint(
name TEXT NOT NULL,
age SMALLINT NOT NULL
);
使用下面的语句插入两行数据:
INSERT INTO test_smallint (name, age)
VALUES ('Tom', '23'), ('Lucy', 20)
RETURNING *;
name | age
------+-----
Tom | 23
Lucy | 20
(2 rows)
注意, 虽然我们为整数列传入了一个字符类型的值 '23'
,PostgreSQL 自动将其转成了数字并存储到数据库。
使用 INTEGER 列作为主键
通常, INTEGER
数据类型的标识列可以作为主键列:
CREATE TABLE test_int_pk(
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name TEXT NOT NULL,
age SMALLINT NOT NULL
);
这里,id
列是主键列。它的类型是 INTEGER
,并且使用了 GENERATED ALWAYS AS IDENTITY
属性。
使用下面的语句插入和上面例子中相同的两条数据:
INSERT INTO test_int_pk (name, age)
VALUES ('Tom', '23'), ('Lucy', 20)
RETURNING *;
id | name | age
----+------+-----
1 | Tom | 23
2 | Lucy | 20
(2 rows)
结论
PostgreSQL 提供了三种整数数据类型: SMALLINT
,INTEGER
,和 BIGINT
。您可以根据自己不同的存储需求选择不同的类型以提高存取的效率。