Oracle数据库里怎么弄个scott用户还有那些表该咋建和用
- 问答
- 2026-01-05 19:49:27
- 3
的经典来源是Oracle数据库早期版本自带的演示脚本,在旧版的Oracle(例如Oracle 10g、11g)中,数据库安装介质或默认安装后通常会包含一个名为 scott.sql(有时也可能是 utlsampl.sql)的脚本文件,这个脚本的唯一目的就是创建scott用户和那些著名的示例表,虽然在新版Oracle(如12c, 18c, 19c, 21c)中默认不再提供此脚本,但Oracle官方文档中仍然会提及这些示例方案,并且网络上可以很容易找到这个脚本的原始内容,以下操作就是基于这个经典脚本的核心逻辑。
创建scott用户
你需要以具有高级权限的用户身份登录数据库,通常我们使用 sys 用户或 system 用户,打开SQL*Plus或SQL Developer等工具,连接数据库。
第一步是创建用户,核心命令是 CREATE USER。
来源脚本中的命令大致是这样的:
CREATE USER scott IDENTIFIED BY tiger;
这句话的意思是:创建一个用户,用户名是“scott”,密码是“tiger”,为什么是scott和tiger?没有特别深奥的原因,据说是因为当时Oracle公司里有一位名叫Bruce Scott的早期员工,他养了一只猫,猫的名字叫Tiger,于是这个经典的组合就流传下来了。
光创建用户还不够,新用户就像一个新开的银行账户,里面既没钱也没有办理任何业务的权利,所以需要给它一些基本的权限,让它能够登录数据库、创建表格、操作数据等。
来源脚本中会接着执行授权命令,主要是:
GRANT CONNECT, RESOURCE TO scott;
CONNECT 权限允许scott用户连接到数据库。RESOURCE 权限允许scott用户在自己的模式(可以理解为自己的地盘)里创建表、视图、存储过程等数据库对象,在一些非常旧的脚本中,可能还会看到 GRANT UNLIMITED TABLESPACE TO scott;,这是允许scott用户无限使用表空间(存储数据的地方),但在新版本中,RESOURCE 角色通常已经包含了足够的权限。
创建经典的表并插入数据
创建好用户并授权后,需要切换到scott用户来建表,使用命令 CONNECT scott/tiger; 即可切换。
接下来就是创建那几张著名的表:部门表(DEPT)和员工表(EMP),通常还会包括工资等级表(SALGRADE)和奖金表(BONUS),这些表的结构设计巧妙,数据之间有关联,非常适合演示基本的SQL查询,特别是多表连接查询。
-
创建部门表(DEPT) 部门表通常包含部门编号、部门名称和部门所在地三个字段,来源脚本中的建表语句类似:
CREATE TABLE dept (deptno NUMBER(2) PRIMARY KEY, dname VARCHAR2(14), loc VARCHAR2(13));这里创建了一个名为dept的表,有三个列:deptno(数字类型,是主键),dname(部门名称,字符串),loc(地点,字符串),主键保证了每个部门的编号是唯一的。建好表结构后,需要往里面添加数据,脚本中会使用
INSERT INTO语句插入几条固定的记录:INSERT INTO dept VALUES (10, 'ACCOUNTING', 'NEW YORK');INSERT INTO dept VALUES (20, 'RESEARCH', 'DALLAS');INSERT INTO dept VALUES (30, 'SALES', 'CHICAGO');INSERT INTO dept VALUES (40, 'OPERATIONS', 'BOSTON');这样就有了四个部门。 -
创建员工表(EMP) 员工表是核心,字段较多,包括员工编号、姓名、职位、上级经理编号、入职日期、工资、奖金、所在部门编号等,它通过“部门编号(DEPTNO)”与DEPT表关联,来源脚本中的建表语句类似:
CREATE TABLE emp (empno NUMBER(4) PRIMARY KEY, ename VARCHAR2(10), job VARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(2) REFERENCES dept(deptno));注意最后一个字段deptno,它后面跟了REFERENCES dept(deptno),这表示它是一个外键,指向了DEPT表的DEPTNO主键,这就建立了两个表之间的约束关系,确保员工所属的部门必须是DEPT表中真实存在的部门。同样,之后会插入一系列员工记录,
INSERT INTO emp VALUES (7369, 'SMITH', 'CLERK', 7902, TO_DATE('1980-12-17', 'YYYY-MM-DD'), 800, NULL, 20);INSERT INTO emp VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('1981-2-20', 'YYYY-MM-DD'), 1600, 300, 30);(会插入十多名员工的数据,包括著名的KING, BLAKE, CLARK, JONES等) -
创建其他表
- SALGRADE表:存储工资等级范围,用于演示非等值连接。
建表:
CREATE TABLE salgrade (grade NUMBER, losal NUMBER, hisal NUMBER);插入数据:包括从1到5共五个工资等级。 - BONUS表:一个空表,结构类似EMP表的某些字段,有时用于演示。
建表:
CREATE TABLE bonus (ename VARCHAR2(10), job VARCHAR2(9), sal NUMBER, comm NUMBER);
所有数据插入完毕后,务必执行
COMMIT;命令提交事务,使所有更改永久保存到数据库。 - SALGRADE表:存储工资等级范围,用于演示非等值连接。
建表:
基本使用示例
表建好后,就可以用scott用户登录进行各种SQL练习了,举几个最经典的例子:
-
简单查询:
SELECT * FROM emp;-- 查看所有员工信息。SELECT ename, sal FROM emp WHERE sal > 2000;-- 查询工资超过2000的员工姓名和工资。 -
多表连接查询(这是scott模式的核心价值):
SELECT e.ename, e.job, d.dname, d.loc FROM emp e, dept d WHERE e.deptno = d.deptno;这个查询将员工表(EMP)和部门表(DEPT)连接起来,显示每个员工的姓名、职位以及他所在的部门名称和地点,通过WHERE e.deptno = d.deptno这个条件将两个表关联起来。 -
子查询:
SELECT ename FROM emp WHERE deptno = (SELECT deptno FROM dept WHERE dname = 'SALES');查询所有在“SALES”部门工作的员工姓名,先通过子查询找出部门名称为'SALES'的部门编号,再用这个编号去EMP表里找员工。 -
分组统计:
SELECT deptno, AVG(sal) FROM emp GROUP BY deptno;计算每个部门的平均工资。
在新版Oracle中的注意事项
如果你使用的是Oracle 12c及以后的版本,由于引入了“可插拔数据库”(PDB)的概念,你需要在连接时注意,默认可能连接到CDB(容器数据库)的根容器,而普通用户通常创建在PDB中,你需要先连接到具体的PDB(比如ORCLPDB)再执行上述操作,或者在使用SQL*Plus连接时使用类似 sqlplus sys/password@localhost:1521/ORCLPDB as sysdba 的命令指定PDB服务名。
在Oracle中重建scott/tiger演示方案的过程就是:用管理员账号创建用户并授权 -> 切换至新用户 -> 依次执行建表和插入数据的SQL语句,这套简单的方案是无数Oracle初学者的起点,其表结构设计至今仍是学习SQL语法的绝佳范例。

本文由酒紫萱于2026-01-05发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/75134.html
