Oracle数据库控制语句怎么用,分类讲解和细节分享,帮你快速上手
- 问答
- 2026-01-03 00:26:14
- 1
Oracle数据库的控制语句,说白了就是用来管理数据库里各种“东西”的语句,比如创建新用户、建表、给用户权限、修改表结构等等,你可以把它们想象成管理一个仓库的命令:创建新货架(建表)、给新员工发钥匙(授权)、调整货架大小(修改表结构),下面我们就分分类,详细讲讲怎么用。
第一类:数据定义语言(DDL)—— 用来创建、修改、删除数据库对象
这类语句一执行就会立刻生效,不能反悔(也就是不能回滚),所以用的时候要特别小心。
-
CREATE(创建)
-
创建表:这是最常用的,比如你想创建一个存员工信息的表。
CREATE TABLE employees ( employee_id NUMBER(6) PRIMARY KEY, -- 员工ID,数字类型,是主键 first_name VARCHAR2(20), -- 名字,变长字符串 last_name VARCHAR2(25) NOT NULL, -- 姓氏,不能为空 hire_date DATE DEFAULT SYSDATE -- 入职日期,日期类型,默认是系统当前时间 );
(根据Oracle官方文档《SQL Language Reference》中的CREATE TABLE章节)这里定义了表的结构,每个列的名字、数据类型和约束都写清楚了。
-
创建用户:要连接数据库,先得有用户。
CREATE USER myuser IDENTIFIED BY mypassword; -- 创建用户myuser,密码是mypassword
但光创建用户还不行,他连数据库都登不上去,还需要给他授权(见DCL部分)。
-
-
ALTER(修改)
- 给表增加一列:比如发现员工表缺个邮箱字段。
ALTER TABLE employees ADD (email VARCHAR2(50)); -- 增加一个email列
- 修改列的数据类型:比如发现名字长度不够用了。
ALTER TABLE employees MODIFY (first_name VARCHAR2(30)); -- 把first_name的长度从20改成30
(根据Oracle官方文档《SQL Language Reference》中的ALTER TABLE章节)注意,修改数据类型时,如果已有数据不兼容,会报错。
- 给表增加一列:比如发现员工表缺个邮箱字段。
-
DROP(删除)

- 删除表:这个要非常谨慎,表和数据一下就都没了。
DROP TABLE employees; -- 直接删除
- 安全删除:如果你不确定,可以先让表“消失”,但保留一段时间,后悔了还能救回来。
DROP TABLE employees PURGE; -- 彻底删除,不进回收站 -- 或者在开启了回收站功能的情况下,默认是放入回收站,可以使用 FLASHBACK TABLE employees TO BEFORE DROP; 来恢复。
- 删除表:这个要非常谨慎,表和数据一下就都没了。
第二类:数据控制语言(DCL)—— 控制用户的访问权限
这部分就像分配仓库不同区域的进门卡和操作权限。
-
GRANT(授权)
- 授予系统权限:让用户有连接数据库、建表等“大权限”。
GRANT CREATE SESSION TO myuser; -- 让myuser能登录数据库 GRANT CREATE TABLE TO myuser; -- 让myuser能建表
- 授予对象权限:让用户能对某张具体的表进行增删改查。
GRANT SELECT, INSERT ON employees TO myuser; -- 让myuser能查询和向employees表插入数据,但不能修改或删除。
(根据Oracle官方文档《SQL Language Reference》中的GRANT章节)
- 授予系统权限:让用户有连接数据库、建表等“大权限”。
-
REVOKE(收回权限)
- 给了权限也能收回来。
REVOKE INSERT ON employees FROM myuser; -- 收回myuser对employees表的插入权限
- 给了权限也能收回来。
第三类:事务控制语句(TCL)—— 管理数据变更的“确认”和“取消”

你把数据增删改之后,这些操作不会马上永久保存,需要你主动确认。
-
COMMIT(提交)
- 当你完成一系列操作(比如给10个员工发完工资),确认这些更改永久生效,一旦提交,就不能用ROLLBACK撤销了。
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 80; -- 给80部门的员工加薪10% COMMIT; -- 确认加薪操作,数据永久改变
- 当你完成一系列操作(比如给10个员工发完工资),确认这些更改永久生效,一旦提交,就不能用ROLLBACK撤销了。
-
ROLLBACK(回滚)
- 当你发现刚才的操作有误时,可以撤销所有从上一次COMMIT之后的操作,就像什么都没发生过。
DELETE FROM employees; -- 糟糕!误操作删除了所有员工记录! ROLLBACK; -- 赶紧回滚,数据恢复如初
(根据Oracle官方文档《SQL Language Reference》中的COMMIT和ROLLBACK章节)这个功能是保证数据安全性的关键。
- 当你发现刚才的操作有误时,可以撤销所有从上一次COMMIT之后的操作,就像什么都没发生过。
-
SAVEPOINT(保存点)
- 在一个复杂的事务里设置一个“标记点”,可以回滚到这个点,而不是回滚整个事务。
INSERT INTO employees (employee_id, last_name) VALUES (1001, 'Zhang'); SAVEPOINT point_a; -- 设置一个保存点叫point_a UPDATE employees SET salary = 10000 WHERE employee_id = 1001; -- 发现更新错了 ROLLBACK TO SAVEPOINT point_a; -- 只回滚到point_a,即撤销UPDATE,但INSERT操作还在。
- 在一个复杂的事务里设置一个“标记点”,可以回滚到这个点,而不是回滚整个事务。
一些关键细节分享:
- 分号很重要:在SQL*Plus、SQL Developer等工具里,语句末尾的分号(;)或斜杠(/)是执行命令的标志。
- DDL语句自带提交:执行任何CREATE、ALTER、DROP语句后,会自动执行一次COMMIT,所以你无法在DROP一张表之后再用ROLLBACK找回来。
- 权限的级联:使用
GRANT ... WITH ADMIN OPTION授予的系统权限和GRANT ... WITH GRANT OPTION授予的对象权限,被授权者可以把权限再授予别人,收回权限时可能需要特别注意级联影响。 - 事务的概念:一个事务是一组逻辑相关的DML操作(增删改),事务从第一条DML语句开始,以COMMIT或ROLLBACK结束,这保证了数据的完整性。
希望这些分类讲解和具体的例子能帮你快速上手Oracle数据库的控制语句,多在实际环境中练习是掌握它们的最好方法。
本文由帖慧艳于2026-01-03发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/73387.html
