【PostgreSQL】从零开始:(十六)数据类型-数值类型

发布时间:2023年12月20日

数值类型定义

数值类型是一种用于存储数字的数据类型。在编程语言中,数值类型通常包括整数类型和浮点数类型。

整数类型用于存储整数值,包括正整数、负整数和零。在不同的编程语言中,整数类型可能有不同的大小限制,例如8位、16位、32位或64位。

浮点数类型用于存储带有小数部分的数字,也称为实数。浮点数类型可以表示很大或很小的数字,并具有一定的精度。浮点数类型通常分为单精度和双精度,分别表示32位和64位的浮点数。

数值类型可以进行各种数学运算,如加法、减法、乘法和除法。数值类型还可以用于存储和处理数值数据,如计算、统计和科学计算等领域。

PostgreSQL数值类型又可以分为以下几类

  • 整数类型
  • 任意精度数
  • 浮点类型
  • 串行类型

整数类型

整数类型表:

名字存储大小描述范围
smallint2 字节小范围整数 -32768 至 +32767
integer4 字节整数的典型选择-2147483648 至 +2147483647
bigint8 字节大范围整数-9223372036854775808 至 +9223372036854775807
smallserial2 字节小的自动递增整数1 到 32767
serial4 字节自动递增整数 1 至 2147483647
bigserial8 字节大自动递增整数1 至 9223372036854775807

任意精度数

任意精度数类型表:

名字存储大小描述范围
decimal变量用户指定的精度、精确度小数点前最多 131072 位;小数点后最多 16383 位数字
numeric变量用户指定的精度、精确度小数点前最多 131072 位;小数点后最多 16383 位数字

如果要存储的值的小数位数大于该列声明的小数位数,则系统会将该值四舍五入到指定的小数位数

ci_database_test02=> create table num_test (numeric1 numeric(3,1),numeric2 numeric(2,-3),numeric3 numeric(3,5));
CREATE TABLE
ci_database_test02=> insert into num_test(numeric1,numeric2,numeric3) values (88.888,66666.9999,-0.008888);
INSERT 0 1
ci_database_test02=> select * from num_test;
 numeric1 | numeric2 | numeric3 
----------+----------+----------
     88.9 |    67000 | -0.00889
(1 row)

ci_database_test02=> 

decimal与numeric的区别

在SQL中,DECIMAL和NUMERIC都是用于存储精确数值的数据类型。它们的主要区别在于存储和计算的精度。

DECIMAL是用于存储固定精度和小数位数的数值。它可以存储的总位数和小数位数在创建列时被指定。例如,DECIMAL(10, 2)可以存储最多10位数,其中2位用于小数部分。

NUMERIC也是用于存储固定精度和小数位数的数值,但它可以存储的位数范围更大。例如,NUMERIC(10, 2)可以存储最多10位数,其中2位用于小数部分。

另一个区别是在计算时的行为。当两个DECIMAL或NUMERIC值进行计算时,计算结果的精度和小数位数将根据运算符和操作数的精度规则进行自动调整。在DECIMAL类型中,结果的精度和小数位数将始终与操作数中最大的精度和小数位数一致。而在NUMERIC类型中,结果的精度和小数位数将根据运算符和操作数之间的关系进行适当的调整,以确保结果的精度不超过NUMERIC列的定义。

综上所述,DECIMAL和NUMERIC之间的主要区别在于存储和计算的精度范围。如果需要更大的精度范围,可以选择NUMERIC类型。否则,选择DECIMAL类型即可。

浮点类型

浮点类型表:

名字存储大小描述范围
real4 字节精度可变,不精确精度为6位十进制数字
double precision8 字节精度可变,不精确15 位十进制精度

real 类型用于表示单精度浮点数。它是一个 4 字节的数据类型,可以存储大约 6 位小数的精度范围。
real 数据类型可以用来存储小数、分数、比率等具有小数部分的数值。例如,一个 real 值可以是 3.14159 或 0.5 等。

CREATE TABLE measurements (
    id SERIAL PRIMARY KEY,
    value real
);

INSERT INTO measurements (value) VALUES (3.14159);

SELECT * FROM measurements;

double precision类型是一种双精度浮点数类型,它存储双精度浮点数,可以表示大约15位小数。
double precision类型可以存储很大范围的数值,具有较高的精度。它占用8个字节(64位)的存储空间。

CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    price DOUBLE PRECISION
);
INSERT INTO products (name, price) VALUES ('Product A', 9.99);
INSERT INTO products (name, price) VALUES ('Product B', 19.99);

串行类型

串行类型是一种序列自增的数据类型,它可以在插入数据时自动生成一个唯一的数值。通过使用串行类型,可以简化在数据库中创建自增主键的过程。

示例1:

CREATE SEQUENCE my_sequence START 1 INCREMENT 1;
ALTER TABLE my_table ALTER COLUMN my_column SET DEFAULT nextval('my_sequence');

示例2:

CREATE TABLE users (
    id serial PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);
INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');
id | name     | email
---+----------+-------------------
1  | John Doe | john@example.com
文章来源:https://blog.csdn.net/sinat_36528886/article/details/135077565
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。