注册
达梦SQL学习
技术分享/ 文章详情 /

达梦SQL学习

悠哈 2025/09/30 18 0 0

达梦数据库学习笔记

1.创建了一个智能文博事件档案表,包含了DM支持的常用数据类型

创建表格

CREATE TABLE SMART_MULTITYPE_LOG ( log_id CHAR(10) PRIMARY KEY, -- 固定长度主键 title VARCHAR(100), -- 可变长标题 seq_no INT, total_cnt BIGINT, phase_step SMALLINT, tiny_flag TINYINT, status_code BYTE, price NUMERIC(12,2), weighting NUMBER(8,4), raw_bin BINARY(16), -- 例如 MD5 file_sha VARBINARY(64), -- 例如 SHA256 lat FLOAT, lng DOUBLE, temperature REAL, is_active BIT, happen_date DATE, happen_time TIME, happen_ts TIMESTAMP, valid_span INTERVAL YEAR(2) TO MONTH, happen_tz TIME WITH TIME ZONE, note_text TEXT, thumb_img IMAGE, attach_blob BLOB, full_report CLOB );

插入数据

-- 事件一:馆藏文物定期检测 INSERT INTO SMART_MULTITYPE_LOG ( log_id, title, seq_no, total_cnt, phase_step, tiny_flag, status_code, price, weighting, raw_bin, file_sha, lat, lng, temperature, is_active, happen_date, happen_time, happen_ts, valid_span, happen_tz, note_text, thumb_img, attach_blob, full_report ) VALUES ( 'EVT000001', '青铜器春季巡检', 1, 1200, 2, 1, 12, 3520.50, 0.8721, HEXTORAW('5F4DCC3B5AA765D61D8327DEB882CF99'), HEXTORAW('D7A8FBB3F6B8C58B'), 30.57, 114.30, 21.8, 1, DATE '2025-03-12', TIME '09:30:00', TIMESTAMP '2025-03-12 09:30:00', TO_YMINTERVAL('1-6'), TIME '09:30:00 +08:00', '检测未发现明显破损', EMPTY_BLOB(), EMPTY_BLOB(), EMPTY_CLOB() ); -- 事件二:文物临展借出登记 INSERT INTO SMART_MULTITYPE_LOG ( log_id, title, seq_no, total_cnt, phase_step, tiny_flag, status_code, price, weighting, raw_bin, file_sha, lat, lng, temperature, is_active, happen_date, happen_time, happen_ts, valid_span, happen_tz, note_text, thumb_img, attach_blob, full_report ) VALUES ( 'EVT000002', '汉隶墨迹外借登记', 2, 300, 1, 0, 9, 12500.00, 0.9653, HEXTORAW('9D5DE678FE57BCCA610140957AFAB571'), HEXTORAW('ABCDEF1234567890'), 31.22, 121.48, 23.0, 1, DATE '2025-04-01', TIME '14:15:00', TIMESTAMP '2025-04-01 14:15:00', INTERVAL '0001-06' YEAR TO MONTH, TIME '14:15:00 +08:00', '借展至南京博物院', EMPTY_BLOB(), EMPTY_BLOB(), EMPTY_CLOB() ); -- 事件三:数字化修复项目 INSERT INTO SMART_MULTITYPE_LOG ( log_id, title, seq_no, total_cnt, phase_step, tiny_flag, status_code, price, weighting, raw_bin, file_sha, lat, lng, temperature, is_active, happen_date, happen_time, happen_ts, valid_span, happen_tz, note_text, thumb_img, attach_blob, full_report ) VALUES ( 'EVT000003', '唐三彩马数字化修复', 3, 150, 3, 1, 5, 9800.75, 0.7435, HEXTORAW('E59A18C428CB38D5F260853678922E03'), HEXTORAW('1234567890ABCDEF'), 34.26, 108.95, 20.5, 0, DATE '2025-05-18', TIME '10:45:00', TIMESTAMP '2025-05-18 10:45:00', TO_YMINTERVAL('1-6'), TIME '10:45:00 +08:00', 'AR模型建立中,尚未完成渲染', EMPTY_BLOB(), EMPTY_BLOB(), EMPTY_CLOB() );

更新数据

UPDATE SMART_MULTITYPE_LOG SET note_text = '借展已结束,文物归还', is_active = 0 WHERE log_id = 'EVT000002';

删除数据

DELETE FROM SMART_MULTITYPE_LOG WHERE log_id = 'EVT000003';

2.创建带自增列的表,包括IDENTITY和AUTO_INCREMENT两种方式,插入数据,生成自增列数据,查看自增列数据

创建带自增列的表(IDENTITY方式)

CREATE TABLE auto_test_identity ( id INT IDENTITY(1,1) PRIMARY KEY, name VARCHAR(50) );

创建带自增列的表(AUTO_INCREMENT方式)

CREATE TABLE auto_test_auto ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) );

插入数据

INSERT INTO auto_test_identity (name) VALUES ('张三'); INSERT INTO auto_test_identity (name) VALUES ('李四');

3.创建不同约束,包括主键、外键、唯一、检查、非空约束,插入符合和不符合约束的数据;

创建外键参考表class_info

CREATE TABLE class_info ( class_id INT PRIMARY KEY, class_name VARCHAR(50) NOT NULL );

创建测试表 student_info(包括主键、外键、唯一、检查、非空约束)

CREATE TABLE student_info ( student_id INT PRIMARY KEY, -- 主键约束(唯一且非空) name VARCHAR(50) NOT NULL, -- 非空约束 id_number VARCHAR(18) UNIQUE, -- 唯一约束(身份证号不能重复) age INT CHECK (age >= 0 AND age <= 120), -- 检查约束(0~120岁) class_id INT, -- 外键字段(引用班级表) CONSTRAINT fk_class FOREIGN KEY (class_id) REFERENCES class_info(class_id) -- 外键约束 );

插入几条班级数据,供外键引用

INSERT INTO class_info VALUES (101, '软件工程一班'); INSERT INTO class_info VALUES (102, '计算机二班');

插入符合约束的数据

-- 符合所有约束的学生记录 INSERT INTO student_info VALUES ( 1, '张三', '420101199001011234', 22, 101 ); INSERT INTO student_info VALUES ( 2, '李四', '420101199202023456', 19, 102 );

插入不符合约束的数据

主键重复(student_id=1 已存在)

INSERT INTO student_info VALUES ( 1, '王五', '420101199303033333', 20, 101 ); -- 错误:违反主键约束 PRIMARY KEY

name 为空(违反 NOT NULL)

INSERT INTO student_info VALUES ( 3, NULL, '420101199404044444', 21, 101 ); -- 错误:违反 NOT NULL 约束

id_number 重复(违反 UNIQUE)

INSERT INTO student_info VALUES ( 4, '赵六', '420101199001011234', 23, 102 ); -- 错误:违反 UNIQUE 约束(身份证号已存在)

age 不合法(违反 CHECK)

INSERT INTO student_info VALUES ( 5, '钱七', '420101199505055555', 150, 101 ); -- 错误:违反 CHECK 约束(年龄超出范围)

class_id 不存在(违反 FOREIGN KEY)

INSERT INTO student_info VALUES ( 6, '孙八', '420101199606066666', 20, 999 ); -- 错误:class_id = 999 不存在于 class_info 表中(外键约束失败)

4.创建不同类型的表,包括行表、列表、分区表、对象表、临时表,通过查询数据字典,确认表类型和各种属性正确;

创建行表

CREATE TABLE row_table ( id INT PRIMARY KEY, name VARCHAR(50) );

创建列表

CREATE TABLE list_table ( id INT PRIMARY KEY, value FLOAT ) STORAGE(ON COLUMN);

创建分区表

CREATE TABLE partition_table ( id INT, created_date DATE ) PARTITION BY RANGE (created_date) ( PARTITION p1 VALUES LESS THAN (DATE '2023-01-01'), PARTITION p2 VALUES LESS THAN (DATE '2024-01-01'), PARTITION pmax VALUES LESS THAN (MAXVALUE) );

创建对象表

-- 定义一个对象类型 CREATE TYPE address_obj AS OBJECT ( province VARCHAR(50), city VARCHAR(50) ); -- 创建包含对象字段的表 CREATE TABLE object_table ( id INT PRIMARY KEY, name VARCHAR(50), address address_obj );

创建临时表

CREATE GLOBAL TEMPORARY TABLE temp_table ( id INT, note VARCHAR(100) ) ON COMMIT DELETE ROWS;
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服