Oracle数据库基本命令的8个模块

Oracle 数据库的命令体系庞大,按功能模块可划分为 连接与退出、用户与权限管理、表结构操作、数据操纵、查询优化、事务控制、存储过程与函数、数据库维护 等核心模块。以下按模块整理常用基本命令,并标注关键说明,便于理解和使用。

一、连接与退出数据库(基础入口)

连接 Oracle 需通过客户端工具(如 sqlplus、PL/SQL Developer),核心命令用于建立会话或断开连接,是所有操作的前提。

命令 功能说明 示例
sqlplus 用户名/密码 本地连接数据库(默认端口 1521) sqlplus scott/tiger(经典示例用户)
sqlplus 用户名/密码@服务名 远程连接(需配置 tnsnames.ora sqlplus scott/tiger@orclorcl 为服务名)
sqlplus / as sysdba 超级管理员(SYS) 身份登录(本地特权) 无需密码,直接进入最高权限模式
conn 用户名/密码 会话内切换用户(无需重新打开 sqlplus) conn sys/change_on_install as sysdba(切换为 SYS)
disconnect 断开当前会话连接(保留 sqlplus 窗口) 断开后需重新 conn 连接
exit / quit 退出 sqlplus 客户端 执行后关闭命令行窗口

二、用户与权限管理(安全控制)

Oracle 基于 "用户 - 角色 - 权限" 的三层模型管理访问权限,核心是创建用户、分配角色 / 权限,保障数据安全。

1. 用户管理命令

命令 功能说明 示例
CREATE USER 用户名 IDENTIFIED BY 密码; 创建新用户(初始无任何权限) CREATE USER test_user IDENTIFIED BY Test123;
ALTER USER 用户名 IDENTIFIED BY 新密码; 修改用户密码 ALTER USER test_user IDENTIFIED BY NewTest456;
DROP USER 用户名; 删除用户(需无依赖对象) DROP USER test_user;
DROP USER 用户名 CASCADE; 强制删除用户(含其所有对象,如表、视图) DROP USER test_user CASCADE;
ALTER USER 用户名 ACCOUNT LOCK; 锁定用户(禁止登录) ALTER USER test_user ACCOUNT LOCK;
ALTER USER 用户名 ACCOUNT UNLOCK; 解锁用户 ALTER USER test_user ACCOUNT UNLOCK;

2. 权限与角色管理

  • 权限分类
    • 系统权限:数据库级操作(如 CREATE TABLEDROP USER);
    • 对象权限:对特定对象的操作(如查询他人表 SELECT ON 表名)。
  • 常用角色 :Oracle 预定义角色(简化权限分配),如 CONNECT(基础连接权限)、RESOURCE(创建表 / 索引等对象权限)、DBA(超级权限,慎用)。
命令 功能说明 示例
GRANT 角色/权限 TO 用户名; 授予用户角色或权限 GRANT CONNECT, RESOURCE TO test_user;(授予基础角色)
GRANT SELECT ON 表名 TO 用户名; 授予用户对指定表的查询权限 GRANT SELECT ON scott.emp TO test_user;(允许 test_user 查 scott 的 emp 表)
REVOKE 角色/权限 FROM 用户名; 回收用户的角色或权限 REVOKE RESOURCE FROM test_user;(回收创建对象的权限)
REVOKE UPDATE ON 表名 FROM 用户名; 回收对指定表的更新权限 REVOKE UPDATE ON scott.emp FROM test_user;
SELECT * FROM DBA_USERS; 查看所有用户信息(需 DBA 权限) -
SELECT * FROM USER_SYS_PRIVS; 查看当前用户的系统权限 -

三、表结构操作(DDL:数据定义语言)

用于创建、修改、删除表及表的约束(如主键、外键),属于 "结构级" 操作,执行后立即生效(无需提交)。

1. 表的创建(CREATE TABLE)

核心语法:CREATE TABLE 表名 (列名 数据类型 [约束] [默认值], ...);常用数据类型:VARCHAR2(n)(字符串,n 为最大长度)、NUMBER(p,s)(数值,p 总位数,s 小数位)、DATE(日期)、CLOB(大文本)。

命令 功能说明 示例
CREATE TABLE 表名(列1 类型, 列2 类型); 基础建表(无约束) CREATE TABLE student (id NUMBER, name VARCHAR2(20), birth DATE);
CREATE TABLE 表名(列1 类型 PRIMARY KEY, 列2 类型); 建表时指定主键(唯一标识行) CREATE TABLE student (id NUMBER PRIMARY KEY, name VARCHAR2(20));(id 为主键)
CREATE TABLE 表名(列1 类型, 列2 类型, FOREIGN KEY(列2) REFERENCES 主表(主表列)); 建表时指定外键(关联主表) CREATE TABLE score (stu_id NUMBER, score NUMBER, FOREIGN KEY(stu_id) REFERENCES student(id));(stu_id 关联 student 的 id)

2. 表的修改(ALTER TABLE)

命令 功能说明 示例
ALTER TABLE 表名 ADD (列名 类型); 给表新增列 ALTER TABLE student ADD (gender CHAR(1));(新增性别列,1 字符)
ALTER TABLE 表名 MODIFY (列名 新类型); 修改列的数据类型(需注意数据兼容性) ALTER TABLE student MODIFY (name VARCHAR2(30));(姓名长度从 20 改为 30)
ALTER TABLE 表名 DROP COLUMN 列名; 删除表的某一列 ALTER TABLE student DROP COLUMN gender;
ALTER TABLE 表名 RENAME TO 新表名; 重命名表 ALTER TABLE student RENAME TO stu;

3. 表的删除与清空

命令 功能说明 区别
DROP TABLE 表名; 删除表(结构 + 数据全删,无法恢复) 彻底删除,释放存储空间
TRUNCATE TABLE 表名; 清空表数据(保留表结构,无法恢复) DELETE 快(不写日志),不能回滚

四、数据操纵(DML:数据操纵语言)

用于对表中数据进行 增、删、改 ,操作后需执行 COMMIT 提交才生效,ROLLBACK 可回滚未提交的操作。

命令 功能说明 示例
INSERT INTO 表名(列1,列2) VALUES(值1,值2); 插入单行数据 INSERT INTO student(id,name) VALUES(1,'张三');
INSERT INTO 表名 SELECT 列1,列2 FROM 其他表; 从其他表批量插入数据 INSERT INTO stu_back SELECT * FROM student;(备份 student 数据到 stu_back)
UPDATE 表名 SET 列1=值1,列2=值2 WHERE 条件; 修改符合条件的数据(无 WHERE 则改全表) UPDATE student SET name='李四' WHERE id=1;(修改 id=1 的姓名)
DELETE FROM 表名 WHERE 条件; 删除符合条件的数据(无 WHERE 则删全表) DELETE FROM student WHERE id=1;(删除 id=1 的行)
COMMIT; 提交当前会话的 DML 操作(永久生效) 执行后数据无法通过 ROLLBACK 回滚
ROLLBACK; 回滚当前会话未提交的 DML 操作 如插入后未提交,执行后数据恢复到插入前

五、数据查询(DQL:数据查询语言)

通过 SELECT 语句从表中提取数据,是 Oracle 最核心、最灵活的命令,支持多表关联、过滤、排序、聚合等。

1. 基础查询

命令 功能说明 示例
SELECT 列1,列2 FROM 表名; 查询指定列的所有数据 SELECT id,name FROM student;
SELECT * FROM 表名; 查询表的所有列(不推荐生产环境,效率低) SELECT * FROM student;
SELECT 列1,列2 FROM 表名 WHERE 条件; 过滤查询(只查符合条件的数据) SELECT * FROM student WHERE id>10;(查 id>10 的学生)
SELECT 列1,列2 FROM 表名 ORDER BY 列1 [ASC/DESC]; 排序查询(ASC 升序,默认;DESC 降序) SELECT * FROM student ORDER BY id DESC;(按 id 降序)

2. 高级查询(常用扩展)

  • 聚合函数 :对数据分组计算,如 COUNT()(计数)、SUM()(求和)、AVG()(平均值)、MAX()(最大值)。示例:SELECT COUNT(*) 总人数, AVG(score) 平均分 FROM student;

  • 分组查询GROUP BY 按指定列分组,搭配聚合函数使用。示例:SELECT class_id, COUNT(*) 班级人数 FROM student GROUP BY class_id;

  • 多表关联JOIN 关联多个表(内连接、左连接等)。示例:SELECT s.name, sc.score FROM student s JOIN score sc ON s.id = sc.stu_id;(查学生姓名和对应分数)

  • 分页查询 :Oracle 用 ROWNUM 实现(需嵌套子查询),如查第 11-20 条数据:

    sql

    复制代码
    SELECT * FROM (
      SELECT ROWNUM rn, id, name FROM student WHERE ROWNUM <=20
    ) WHERE rn >=11;

六、事务控制(保障数据一致性)

Oracle 事务遵循 ACID 原则(原子性、一致性、隔离性、持久性),核心命令用于控制事务的提交、回滚和保存点。

命令 功能说明 示例
COMMIT; 提交事务(所有 DML 操作永久生效) 插入 10 条数据后执行 COMMIT,数据写入磁盘
ROLLBACK; 回滚事务(撤销所有未提交的 DML 操作) 误删数据后未提交,执行 ROLLBACK 恢复
SAVEPOINT 保存点名称; 设置事务保存点(可回滚到指定点,不影响保存点前的操作) ```sql
INSERT INTO student VALUES (1,' 张三 ');
SAVEPOINT sp1; -- 设置保存点
INSERT INTO student VALUES (2,' 李四 ');
ROLLBACK TO sp1; -- 回滚到 sp1,仅删除 "李四" 的记录,"张三" 保留
COMMIT; -- 最终仅提交 "张三" 的记录

|

复制代码
| `SET TRANSACTION ISOLATION LEVEL 隔离级别;` | 设置事务隔离级别(如 `READ COMMITTED`  默认、`SERIALIZABLE`) | 控制并发时的数据可见性,避免脏读、幻读 |


# 七、存储过程与函数(PL/SQL 编程)
Oracle 支持 PL/SQL 语言,可编写 **存储过程(无返回值)** 和 **函数(有返回值)**,用于封装复杂逻辑(如批量处理数据),提高执行效率。

## 1. 存储过程(PROCEDURE)
```sql
-- 创建存储过程:批量插入学生数据
CREATE OR REPLACE PROCEDURE insert_student(
p_id NUMBER,       -- 输入参数:学生ID
p_name VARCHAR2    -- 输入参数:学生姓名
) AS
BEGIN
INSERT INTO student(id, name) VALUES(p_id, p_name);
COMMIT; -- 内部提交(也可外部提交)
EXCEPTION
WHEN OTHERS THEN
  ROLLBACK; -- 异常时回滚
  DBMS_OUTPUT.PUT_LINE('插入失败:' || SQLERRM); -- 输出错误信息
END;
/

-- 调用存储过程
CALL insert_student(3, '王五'); -- 方式1
EXEC insert_student(4, '赵六');  -- 方式2(sqlplus 支持)

2. 函数(FUNCTION)

sql

复制代码
-- 创建函数:根据学生ID查询姓名
CREATE OR REPLACE FUNCTION get_student_name(
  p_id NUMBER -- 输入参数:学生ID
) RETURN VARCHAR2 -- 定义返回值类型
AS
  v_name VARCHAR2(20); -- 局部变量
BEGIN
  SELECT name INTO v_name FROM student WHERE id = p_id;
  RETURN v_name; -- 返回结果
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    RETURN '无此学生'; -- 无数据时返回提示
END;
/

-- 调用函数
SELECT get_student_name(3) FROM DUAL; -- DUAL 是 Oracle 虚拟表,用于无表查询

八、数据库维护命令(监控与管理)

用于查看数据库状态、会话信息、表空间等,辅助运维和问题排查(需对应权限)。

命令 功能说明 示例
SELECT * FROM V$INSTANCE; 查看数据库实例状态(如 OPEN 表示正常运行) -
SELECT * FROM V$SESSION; 查看所有当前会话(谁在连接数据库) SELECT username, status FROM V$SESSION WHERE username IS NOT NULL;
SELECT * FROM USER_TABLES; 查看当前用户的所有表 -
SELECT * FROM USER_INDEXES; 查看当前用户的所有索引(索引用于加速查询) -
ANALYZE TABLE 表名 COMPUTE STATISTICS; 收集表的统计信息(帮助 Oracle 优化查询计划) ANALYZE TABLE student COMPUTE STATISTICS;
SHOW PARAMETER 参数名; 查看数据库参数(如端口、字符集) SHOW PARAMETER port;(查看监听端口)

关键注意事项

  1. 命令结尾 :Oracle 命令需以 ; 结束(PL/SQL 块以 / 结束);
  2. 大小写敏感 :默认情况下,Oracle 对表名、列名不区分大小写(会自动转为大写),但字符串值区分大小写(如 WHERE name='张三' 不等于 '张三 ');
  3. 权限控制 :大部分操作需对应权限(如 CREATE TABLERESOURCE 角色,DROP USERDBA 权限),避免滥用 SYS 用户;
  4. 事务特性 :DML 操作(增删改)需 COMMIT 生效,DDL 操作(建表、删表)会自动提交事务,无需手动执行 COMMIT
相关推荐
Cx330❀3 小时前
《Linux基础入门指令(二)》:从零开始理解Linux系统
linux·运维·服务器·网络·经验分享
洲覆4 小时前
基于 clangd 搭建 Redis 6.2 源码阅读与调试环境
开发语言·数据库·redis·缓存
凯子坚持 c4 小时前
Redis 事务深度解析:从基础到实践
数据库·redis·缓存
梁正雄4 小时前
扩展-docker-ovs编译
运维·docker·容器
是良辰4 小时前
Linux 服务器NFS文件共享
运维·服务器
_dindong4 小时前
Linux网络编程:Socket编程预备
linux·运维·网络·学习
Net_Walke4 小时前
【Linux系统】系统编程
linux·运维·服务器
啊吧怪不啊吧4 小时前
初识SQL
服务器·数据库·sql
FIavor.4 小时前
程序包org.junit.jupiter.api不存在这怎么办
数据库·junit·sqlserver