1.数值数据类型
数值类型用于存储精确或近似的数值数据,分为整数、定点数和浮点数三类。
1.1 整数类型
特点:精确存储整数,无小数部分,占用固定字节空间。
TINYINT:
作用:存储小范围整数(-128~127),占用1字节。
示例:状态码、性别标记(0/1)
示例:状态码、性别标记(0/1)
CREATE TABLE user_status (
user_id INT,
is_active TINYINT -- 0表示未激活,1表示激活
);
INSERT INTO user_status VALUES (1, 1);
SMALLINT:
作用:存储中等范围整数(-32768~32767),占用2字节。
示例:年龄、订单数量
示例:年龄、订单数量
CREATE TABLE product_stock (
product_id INT,
stock SMALLINT
);
INSERT INTO product_stock VALUES (1, 1500);
INT/INTEGER:
作用:常规整数存储(-2147483648~2147483647),占用4字节。
示例:用户ID、计数器
示例:用户ID、计数器
CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT
);
INSERT INTO orders VALUES (1, 1001);
BIGINT:
作用:存储大范围整数(-263 ~263 -1),占用8字节。
示例:金融交易流水号、大数据量统计
示例:金融交易流水号、大数据量统计
CREATE TABLE transaction_log (
log_id BIGINT,
amount DECIMAL(18,2)
);
INSERT INTO transaction_log VALUES (9223372036854775807, 999999.99);
1.2 定点数类型
特点:精确存储小数,适用于财务计算等场景。
NUMERIC/DECIMAL/NUMBER:
作用:存储指定精度和标度的定点数(精度1~38)。
语法:NUMERIC(p,s),p为总位数,s为小数位数。
示例:商品价格、税率
语法:NUMERIC(p,s),p为总位数,s为小数位数。
示例:商品价格、税率
CREATE TABLE financial_records (
record_id INT,
price NUMERIC(10,2), -- 如999999.99
tax_rate DECIMAL(5,4) -- 如0.1234
);
INSERT INTO financial_records VALUES (1, 12345.67, 0.0825);
1.3 浮点数类型
特点:存储近似值,适用于科学计算。
FLOAT:
作用:单精度浮点数(4字节),精度约10位小数。
示例:温度测量、传感器数据
示例:温度测量、传感器数据
CREATE TABLE sensor_data (
sensor_id INT,
temperature FLOAT
);
INSERT INTO sensor_data VALUES (501, 23.456789);
DOUBLE/DOUBLE PRECISION:
作用:双精度浮点数(8字节),精度约10位小数。
示例:地理坐标计算
示例:地理坐标计算
CREATE TABLE location_points (
point_id INT,
latitude DOUBLE,
longitude DOUBLE
);
INSERT INTO location_points VALUES (1, 39.904202, 116.407394);
2.字符数据类型
字符类型用于存储文本数据,分为定长和变长两类。
2.1 定长字符串
CHAR/CHARACTER:
特点:固定长度,不足时填充空格,最大长度由页面大小决定(如8K页面对应3900字节)。
示例:固定编码、状态标志
示例:固定编码、状态标志
CREATE TABLE country_codes (
country_code CHAR(3) -- 如'CHN'、'USA'
);
INSERT INTO country_codes VALUES ('CHN');
2.2 变长字符串
VARCHAR/VARCHAR2:
特点:动态调整长度,节省存储空间,最大长度同样受页面大小限制(默认8188字节)。
示例:用户名、地址
示例:用户名、地址
CREATE TABLE user_profiles (
user_id INT,
username VARCHAR(50),
address VARCHAR(200)
);
INSERT INTO user_profiles VALUES (1001, 'user_张三', '北京市海淀区');
3.位串数据类型
BIT:
特点:BIT 类型用于存储整数数据 1、0 或 NULL,只有 0 才转换为假,其他非空、非 0 值都会自动转换为真,可以用来支持 ODBC 和 JDBC 的布尔数据类型。
示例:性别标识
--表,定义性别字段为 sex, 1-男,0-女
示例:性别标识
--表,定义性别字段为 sex, 1-男,0-女
CREATE TABLE USERS(
id INT NOT NULL,
name VARCHAR(10),
sex BIT
);
--插入数据
INSERT INTO USERS values('1','张三',1);
INSERT INTO USERS values('2','李四',0);
COMMIT;
SELECT * FROM USERS;
4.日期时间类型
4.1 基本类型
DATE:
作用:存储年月日。
示例:生日、订单日期
示例:生日、订单日期
CREATE TABLE employee_birthdays (
employee_id INT,
birth_date DATE
);
INSERT INTO employee_birthdays VALUES (1, '2025-05-14');
TIME:
作用:存储时分秒,精度至毫秒。
示例:会议时间
示例:会议时间
CREATE TABLE meeting_schedule (
meeting_id INT,
start_time TIME(3)
);
INSERT INTO meeting_schedule VALUES (1, '14:30:00.123');
TIMESTAMP/DATETIME:
作用:组合日期和时间,精度至微秒。
示例:日志时间戳
示例:日志时间戳
CREATE TABLE system_logs (
log_id BIGINT,
log_time TIMESTAMP(6)
);
INSERT INTO system_logs VALUES (1, '2025-05-14 14:30:00.123456');
4.2 时区扩展类型
TIMESTAMP WITH TIME ZONE:
作用:包含时区信息,适用于跨时区系统。
示例:全球化交易记录
示例:全球化交易记录
CREATE TABLE global_transactions (
trans_id BIGINT,
trans_time TIMESTAMP WITH TIME ZONE
);
INSERT INTO global_transactions VALUES (1, '2025-05-14 14:30:00+08:00');
5.多媒体与大对象类型
5.1 文本大对象
TEXT/CLOB:
作用:存储长文本(最大2GB),如日志文件、文档内容。
示例:文章内容存储
示例:文章内容存储
CREATE TABLE articles (
article_id INT,
content CLOB
);
INSERT INTO articles VALUES (1, '此处为长文本内容...');
5.2 二进制大对
BLOB/IMAGE:
作用:存储二进制数据(如图片、视频),IMAGE为达梦特有类型。
示例:用户头像存储
示例:用户头像存储
CREATE TABLE user_avatars (
user_id INT,
avatar BLOB
);
INSERT INTO user_avatars VALUES (1, 0x89504E470D0A1A0A...);
5.3 外部文件引用
BFILE:
作用:存储外部文件路径,不占用数据库空间。
示例:链接服务器文件
示例:链接服务器文件
CREATE TABLE external_files (
file_id INT,
file_ref BFILE
);
-- 假设文件路径为'/opt/files/report.pdf'
INSERT INTO external_files VALUES (1, BFILENAME('DIR_EXTERNAL', 'report.pdf'));
6.高级扩展类型
6.1 空间数据类型
ST_GEOMETRY:
作用:存储平面空间数据(如地图坐标)。
示例:GIS系统点位
-- 在 DM 数据库中创建 DMGEO2 包
SP_INIT_GEO2_SYS(1);
-- 确认 DMGEO2 系统包为启用状态。(0:关闭,1:开启)
SELECT SF_CHECK_GEO2_SYS;
示例:GIS系统点位
-- 在 DM 数据库中创建 DMGEO2 包
SP_INIT_GEO2_SYS(1);
-- 确认 DMGEO2 系统包为启用状态。(0:关闭,1:开启)
SELECT SF_CHECK_GEO2_SYS;
-- 创建表
CREATE TABLE map_points (
point_id INT,
coordinates SYSGEO2.ST_GEOMETRY
);
INSERT INTO map_points VALUES (1, ST_GeomFromText('POINT(116.407394 39.904202)'));
ST_GEOGRAPHY:
作用:存储地理空间数据(如经纬度)。
示例:地理位置服务
-- 在 DM 数据库中创建 DMGEO2 包
SP_INIT_GEO2_SYS(1);
-- 确认 DMGEO2 系统包为启用状态。(0:关闭,1:开启)
SELECT SF_CHECK_GEO2_SYS;
示例:地理位置服务
-- 在 DM 数据库中创建 DMGEO2 包
SP_INIT_GEO2_SYS(1);
-- 确认 DMGEO2 系统包为启用状态。(0:关闭,1:开启)
SELECT SF_CHECK_GEO2_SYS;
-- 创建表
CREATE TABLE geo_locations (
location_id INT,
geo_data SYSGEO2.ST_GEOGRAPHY
);
INSERT INTO geo_locations VALUES (1, ST_GeogFromText('SRID=4326;POINT(116.407394 39.904202)'));
6.2 JSON类型
JSON:
作用:存储和查询JSON格式数据,支持半结构化场景。
示例:动态配置存储
示例:动态配置存储
CREATE TABLE app_config (
config_id INT,
config_data JSON
);
INSERT INTO app_config VALUES (1, '{"theme": "dark", "notifications": true}');
-- 查询JSON字段
SELECT json_value(config_data, '$.theme') FROM app_config;