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
相关推荐
XIAOHEZIcode7 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220701 天前
如何搭建本地yum源(上)
运维
倔强的石头_2 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab3 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence3 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神3 天前
三、用户与权限管理
数据库·mysql
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信