一、DDL(数据定义语言)
1. 数据库操作
-- 创建数据库 CREATE DATABASE 数据库名 DATAFILE '文件路径' SIZE 大小; -- 修改数据库 ALTER DATABASE MOUNT; ALTER DATABASE OPEN; ALTER DATABASE ADD LOGFILE '文件路径' SIZE 大小; -- 删除数据库 DROP DATABASE;2. 表操作
-- 创建表 CREATE TABLE 表名 ( 列名1 数据类型 [约束条件], 列名2 数据类型 [约束条件], ... [表级约束] ); -- 创建表示例 CREATE TABLE employee ( emp_id INT PRIMARY KEY, emp_name VARCHAR(50) NOT NULL, dept_id INT, salary DECIMAL(10,2), hire_date DATE DEFAULT SYSDATE, CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES department(dept_id) ); -- 修改表结构 ALTER TABLE 表名 ADD 列名 数据类型; -- 添加列 ALTER TABLE 表名 DROP COLUMN 列名; -- 删除列 ALTER TABLE 表名 MODIFY 列名 新数据类型; -- 修改列类型 ALTER TABLE 表名 RENAME COLUMN 旧列名 TO 新列名; -- 重命名列 -- 重命名表 ALTER TABLE 旧表名 RENAME TO 新表名; RENAME TABLE 旧表名 TO 新表名; -- 删除表 DROP TABLE 表名 [CASCADE CONSTRAINTS]; -- CASCADE 删除关联约束 -- 清空表 TRUNCATE TABLE 表名;3. 索引操作
-- 创建索引 CREATE INDEX 索引名 ON 表名(列名); -- 普通索引 CREATE UNIQUE INDEX 索引名 ON 表名(列名); -- 唯一索引 CREATE INDEX 索引名 ON 表名(列名1, 列名2); -- 复合索引 -- 删除索引 DROP INDEX 索引名;4. 视图操作
-- 创建视图 CREATE VIEW 视图名 AS SELECT语句; -- 创建或替换视图 CREATE OR REPLACE VIEW 视图名 AS SELECT语句; -- 删除视图 DROP VIEW 视图名;5. 序列操作
-- 创建序列 CREATE SEQUENCE 序列名 START WITH 起始值 INCREMENT BY 步长 MAXVALUE 最大值 MINVALUE 最小值 CYCLE | NOCYCLE CACHE 缓存大小; -- 修改序列 ALTER SEQUENCE 序列名 [修改选项]; -- 删除序列 DROP SEQUENCE 序列名;二、DML(数据操作语言)
1. INSERT 插入数据
-- 插入完整行 INSERT INTO 表名 VALUES (值1, 值2, ...); -- 插入指定列 INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...); -- 插入查询结果 INSERT INTO 表名 (列1, 列2, ...) SELECT 列1, 列2, ... FROM 源表 WHERE 条件; -- 批量插入 INSERT ALL INTO 表名 VALUES (值1, 值2, ...) INTO 表名 VALUES (值1, 值2, ...) SELECT * FROM DUAL;2. UPDATE 更新数据
-- 更新所有行 UPDATE 表名 SET 列名 = 新值; -- 条件更新 UPDATE 表名 SET 列1 = 值1, 列2 = 值2, ... WHERE 条件; -- 使用子查询更新 UPDATE 表名 SET 列名 = (SELECT 子查询) WHERE 条件;3. DELETE 删除数据
-- 删除所有行 DELETE FROM 表名; -- 条件删除 DELETE FROM 表名 WHERE 条件; -- 使用子查询删除 DELETE FROM 表名 WHERE 列名 IN (SELECT 子查询);4. MERGE 合并数据(达梦特有)
MERGE INTO 目标表 USING 源表 ON (匹配条件) WHEN MATCHED THEN UPDATE SET 列名 = 值 WHEN NOT MATCHED THEN INSERT (列列表) VALUES (值列表);三、DQL(数据查询语言)
1. 基础查询
-- 查询所有列 SELECT * FROM 表名; -- 查询指定列 SELECT 列1, 列2, ... FROM 表名; -- 使用别名 SELECT 列名 AS 别名 FROM 表名; SELECT 列名 别名 FROM 表名; -- 去重查询 SELECT DISTINCT 列名 FROM 表名;2. 条件查询
SELECT * FROM 表名 WHERE 条件; -- 比较运算符 =, !=或<>, >, <, >=, <= -- 逻辑运算符 AND, OR, NOT -- 范围查询 BETWEEN 值1 AND 值2 NOT BETWEEN 值1 AND 值2 -- 集合查询 IN (值1, 值2, ...) NOT IN (值1, 值2, ...) -- 模糊查询 LIKE '模式' -- % 匹配任意字符, _ 匹配单个字符 NOT LIKE '模式' -- 空值判断 IS NULL IS NOT NULL3. 排序和限制
-- 排序 SELECT * FROM 表名 ORDER BY 列1 [ASC|DESC], 列2 [ASC|DESC]; -- 限制返回行数(达梦特有) SELECT * FROM 表名 LIMIT n; -- 前n行 SELECT * FROM 表名 LIMIT m, n; -- 从m+1行开始的n行 SELECT TOP n * FROM 表名; -- 前n行4. 分组和聚合
-- 聚合函数 COUNT(*), COUNT(列名), SUM(列名), AVG(列名), MAX(列名), MIN(列名) -- 分组查询 SELECT 分组列, 聚合函数(列名) FROM 表名 WHERE 条件 GROUP BY 分组列 HAVING 分组条件; -- 示例 SELECT dept_id, COUNT(*), AVG(salary) FROM employee GROUP BY dept_id HAVING AVG(salary) > 5000;5. 连接查询
-- 内连接 SELECT * FROM 表1 INNER JOIN 表2 ON 连接条件; -- 左外连接 SELECT * FROM 表1 LEFT JOIN 表2 ON 连接条件; -- 右外连接 SELECT * FROM 表1 RIGHT JOIN 表2 ON 连接条件; -- 全外连接 SELECT * FROM 表1 FULL JOIN 表2 ON 连接条件; -- 交叉连接 SELECT * FROM 表1 CROSS JOIN 表2;6. 子查询
-- WHERE子句中的子查询 SELECT * FROM 表1 WHERE 列名 IN (SELECT 列名 FROM 表2 WHERE 条件); -- FROM子句中的子查询(派生表) SELECT * FROM ( SELECT 列1, 列2 FROM 表名 WHERE 条件 ) AS 别名; -- SELECT子句中的子查询 SELECT 列1, (SELECT 聚合函数 FROM 表2) AS 别名 FROM 表1;7. 集合运算
-- 并集 SELECT 语句1 UNION SELECT 语句2; -- 去重 SELECT 语句1 UNION ALL SELECT 语句2; -- 不去重 -- 交集 SELECT 语句1 INTERSECT SELECT 语句2; -- 差集 SELECT 语句1 MINUS SELECT 语句2;四、DCL(数据控制语言)
1. 用户管理
-- 创建用户 CREATE USER 用户名 IDENTIFIED BY 密码 [DEFAULT TABLESPACE 表空间名]; -- 修改用户 ALTER USER 用户名 IDENTIFIED BY 新密码; ALTER USER 用户名 ACCOUNT LOCK|UNLOCK; -- 删除用户 DROP USER 用户名 [CASCADE]; -- CASCADE删除用户所有对象2. 权限管理
-- 系统权限授予 GRANT 权限1, 权限2, ... TO 用户名|角色名; -- 系统权限回收 REVOKE 权限1, 权限2, ... FROM 用户名|角色名; -- 对象权限授予 GRANT 权限 ON 对象名 TO 用户名|角色名 [WITH GRANT OPTION]; -- 对象权限回收 REVOKE 权限 ON 对象名 FROM 用户名|角色名 [CASCADE CONSTRAINTS];3. 角色管理
-- 创建角色 CREATE ROLE 角色名; -- 给角色授权 GRANT 权限 TO 角色名; -- 将角色授予用户 GRANT 角色名 TO 用户名; -- 删除角色 DROP ROLE 角色名;五、常用系统权限
数据库级权限
CREATE SESSION- 创建会话CREATE TABLE- 创建表CREATE VIEW- 创建视图CREATE PROCEDURE- 创建存储过程CREATE USER- 创建用户CREATE ROLE- 创建角色DROP USER- 删除用户DROP ANY TABLE- 删除任意表ALTER DATABASE- 修改数据库SELECT ANY TABLE- 查询任意表INSERT ANY TABLE- 插入任意表UPDATE ANY TABLE- 更新任意表DELETE ANY TABLE- 删除任意表
对象级权限
SELECT- 查询权限INSERT- 插入权限UPDATE- 更新权限DELETE- 删除权限ALTER- 修改结构权限INDEX- 创建索引权限REFERENCES- 创建外键权限EXECUTE- 执行权限
六、事务控制
1. 事务语句
BEGIN TRANSACTION; -- 开始事务(达梦通常自动开始) COMMIT; -- 提交事务 ROLLBACK; -- 回滚事务 SAVEPOINT 保存点; -- 设置保存点 ROLLBACK TO 保存点; -- 回滚到保存点2. 事务特性控制
-- 设置事务隔离级别 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; -- 设置只读事务 SET TRANSACTION READ ONLY;七、实用技巧和注意事项
1. 达梦特有功能
-- 虚拟列(计算列) CREATE TABLE 表名 ( 列1 INT, 列2 INT, 列3 AS (列1 + 列2) VIRTUAL ); -- 分区表 CREATE TABLE 表名 (...) PARTITION BY RANGE(列名) (...); -- 闪回查询(查询历史数据) SELECT * FROM 表名 AS OF TIMESTAMP '时间戳'; -- 伪列 SELECT ROWNUM, ROWID, * FROM 表名;2. 性能优化提示
索引使用:WHERE、JOIN、ORDER BY中的列考虑建索引
**避免SELECT ***:只查询需要的列
批量操作:使用批量INSERT/UPDATE提高效率
分区策略:大数据量表使用分区
统计信息:定期更新统计信息:
DBMS_STATS.GATHER_TABLE_STATS()
3. 兼容性注意事项
达梦兼容Oracle和MySQL语法,但部分语法有差异
字符串连接使用
||或CONCAT()分页查询建议使用
LIMIT或ROWNUM系统函数前缀不同(如:
SYSDATE、USER等)
这个大全涵盖了达梦数据库的主要SQL操作,具体使用时请参考官方文档版本说明。