PostgreSQL 数字类型
PostgreSQL提供了多种数字类型,用于存储不同范围和精度的数值数据。这些类型包括整数、浮点数、定点数等。在本节中,我们将详细介绍这些数字类型,并通过示例展示它们的用法。
1. 整数类型
整数类型用于存储没有小数部分的数字。PostgreSQL支持以下几种整数类型:
SMALLINT
:2字节,范围从-32768到32767。INTEGER
(或INT
):4字节,范围从-2147483648到2147483647。BIGINT
:8字节,范围从-9223372036854775808到9223372036854775807。
示例
sql
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
age SMALLINT,
salary INTEGER
);
INSERT INTO employees (name, age, salary) VALUES ('Alice', 30, 50000);
INSERT INTO employees (name, age, salary) VALUES ('Bob', 25, 45000);
SELECT * FROM employees;
输出:
id | name | age | salary |
---|---|---|---|
1 | Alice | 30 | 50000 |
2 | Bob | 25 | 45000 |
备注
SERIAL
是一种特殊的整数类型,通常用于自动递增的主键。
2. 浮点数类型
浮点数类型用于存储带有小数部分的数字。PostgreSQL支持以下几种浮点数类型:
REAL
:4字节,单精度浮点数,精度约为6位小数。DOUBLE PRECISION
:8字节,双精度浮点数,精度约为15位小数。
示例
sql
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
price DOUBLE PRECISION
);
INSERT INTO products (name, price) VALUES ('Laptop', 999.99);
INSERT INTO products (name, price) VALUES ('Smartphone', 499.99);
SELECT * FROM products;
输出:
id | name | price |
---|---|---|
1 | Laptop | 999.99 |
2 | Smartphone | 499.99 |
警告
浮点数类型在存储非常大或非常小的数字时可能会有精度损失。
3. 定点数类型
定点数类型用于存储精确的小数,通常用于财务计算等需要高精度的场景。PostgreSQL支持以下定点数类型:
NUMERIC
(或DECIMAL
):用户定义的精度和范围。
示例
sql
CREATE TABLE transactions (
id SERIAL PRIMARY KEY,
amount NUMERIC(10, 2)
);
INSERT INTO transactions (amount) VALUES (1234.56);
INSERT INTO transactions (amount) VALUES (7890.12);
SELECT * FROM transactions;
输出:
id | amount |
---|---|
1 | 1234.56 |
2 | 7890.12 |
提示
NUMERIC
类型允许你指定精度和小数位数,例如 NUMERIC(10, 2)
表示最多10位数字,其中2位是小数。
4. 实际应用场景
场景1:存储员工信息
在存储员工信息时,我们通常使用整数类型来存储年龄和工资,因为这些数据通常是整数。
sql
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
age SMALLINT,
salary INTEGER
);
场景2:存储产品价格
在存储产品价格时,我们通常使用浮点数或定点数类型,因为价格通常包含小数部分。
sql
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
price NUMERIC(10, 2)
);
场景3:财务计算
在财务计算中,我们通常使用定点数类型来确保计算的精确性。
sql
CREATE TABLE transactions (
id SERIAL PRIMARY KEY,
amount NUMERIC(10, 2)
);
5. 总结
PostgreSQL提供了多种数字类型,以满足不同场景的需求。整数类型适用于存储没有小数部分的数字,浮点数类型适用于存储带有小数部分的数字,而定点数类型则适用于需要高精度的场景。选择合适的数字类型可以提高数据存储的效率和准确性。
6. 附加资源与练习
- 练习1:创建一个表来存储学生的成绩,包括学生ID、姓名、年龄和成绩(使用适当的数字类型)。
- 练习2:编写一个SQL查询,计算所有产品的平均价格。
- 附加资源:PostgreSQL官方文档 - 数字类型
注意
在实际应用中,请根据具体需求选择合适的数字类型,以避免数据精度损失或存储空间浪费。