当前位置:首页 > 问答 > 正文

Oracle数据库控制语句怎么用,分类讲解和细节分享,帮你快速上手

Oracle数据库的控制语句,说白了就是用来管理数据库里各种“东西”的语句,比如创建新用户、建表、给用户权限、修改表结构等等,你可以把它们想象成管理一个仓库的命令:创建新货架(建表)、给新员工发钥匙(授权)、调整货架大小(修改表结构),下面我们就分分类,详细讲讲怎么用。

第一类:数据定义语言(DDL)—— 用来创建、修改、删除数据库对象

这类语句一执行就会立刻生效,不能反悔(也就是不能回滚),所以用的时候要特别小心。

  1. 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部分)。

  2. 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章节)注意,修改数据类型时,如果已有数据不兼容,会报错。

  3. DROP(删除)

    Oracle数据库控制语句怎么用,分类讲解和细节分享,帮你快速上手

    • 删除表:这个要非常谨慎,表和数据一下就都没了。
      DROP TABLE employees; -- 直接删除
    • 安全删除:如果你不确定,可以先让表“消失”,但保留一段时间,后悔了还能救回来。
      DROP TABLE employees PURGE; -- 彻底删除,不进回收站
      -- 或者在开启了回收站功能的情况下,默认是放入回收站,可以使用 FLASHBACK TABLE employees TO BEFORE DROP; 来恢复。

第二类:数据控制语言(DCL)—— 控制用户的访问权限

这部分就像分配仓库不同区域的进门卡和操作权限。

  1. 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章节)

  2. REVOKE(收回权限)

    • 给了权限也能收回来。
      REVOKE INSERT ON employees FROM myuser; -- 收回myuser对employees表的插入权限

第三类:事务控制语句(TCL)—— 管理数据变更的“确认”和“取消”

Oracle数据库控制语句怎么用,分类讲解和细节分享,帮你快速上手

你把数据增删改之后,这些操作不会马上永久保存,需要你主动确认。

  1. COMMIT(提交)

    • 当你完成一系列操作(比如给10个员工发完工资),确认这些更改永久生效,一旦提交,就不能用ROLLBACK撤销了。
      UPDATE employees SET salary = salary * 1.1 WHERE department_id = 80; -- 给80部门的员工加薪10%
      COMMIT; -- 确认加薪操作,数据永久改变
  2. ROLLBACK(回滚)

    • 当你发现刚才的操作有误时,可以撤销所有从上一次COMMIT之后的操作,就像什么都没发生过。
      DELETE FROM employees; -- 糟糕!误操作删除了所有员工记录!
      ROLLBACK; -- 赶紧回滚,数据恢复如初

      (根据Oracle官方文档《SQL Language Reference》中的COMMIT和ROLLBACK章节)这个功能是保证数据安全性的关键。

  3. 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数据库的控制语句,多在实际环境中练习是掌握它们的最好方法。