跳到主要内容

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;

输出:

idnameagesalary
1Alice3050000
2Bob2545000
备注

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;

输出:

idnameprice
1Laptop999.99
2Smartphone499.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;

输出:

idamount
11234.56
27890.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官方文档 - 数字类型
注意

在实际应用中,请根据具体需求选择合适的数字类型,以避免数据精度损失或存储空间浪费。