前置知识:
在Oracle数据库中,SYS 和 SYSTEM 确实是两个默认存在的超级管理员账户,但它们在权限级别、用途和管理对象上有着本质的区别。
以下是二者的主要区别简述:
- 权限级别与角色
SYS:
拥有最高权限。
默认以 SYSDBA 或 SYSOPER 角色登录。
可以执行几乎所有的数据库操作,包括启动和关闭数据库实例、修改数据库结构、访问数据字典基表(Base Tables)等。
它是数据字典的所有者。
SYSTEM:
拥有较高的管理权限,但低于 SYS。
默认以 DBA 角色登录(普通DBA权限,非SYSDBA)。
不能执行某些底层操作,如启动/关闭数据库实例、创建数据库、恢复控制文件等。
主要用于日常的数据库管理和维护任务。 - 存储对象与用途
SYS:
用途:用于维护数据库内部结构、数据字典和动态性能视图。
存储对象:所有数据字典表和动态性能视图都存储在 SYS 模式下。
原则:官方强烈建议不要在 SYS 模式下创建任何用户表、存储过程或业务对象,以免破坏数据字典或导致升级失败。
SYSTEM:
用途:用于日常的管理任务,如创建用户、分配权限、监控会话、管理存储等。
存储对象:通常存储一些额外的管理工具和视图(如 Oracle Enterprise Manager 的一些配置信息)。
原则:虽然可以在 SYSTEM 模式下创建对象,但最佳实践是避免在此模式下存放业务数据,应专门为业务创建新的表空间和用户。 - 密码管理与依赖
SYS:如果 SYS 密码丢失且无法通过操作系统认证登录,数据库将极难恢复,可能需要重建控制文件或进行复杂的恢复操作。
SYSTEM:如果 SYSTEM 密码丢失,可以使用 SYS 账户登录后对其进行重置,风险相对较小。

1.创建数据库
请看演示录屏
如果上班使用的数据库版本是9i 10g 11g
解锁一下scott用户
2.删除数据库
请看演示录屏
切记不能删除orcl !!!!
温馨提示:执行删除数据库时要非常谨慎,在执行该操作后,数据库中存储的所有的数据表和数据将一同删除,而且不能修复!
卸载数据库清理完注册表重启电脑后需要做的工作:
- Win + R,输入 lusrmgr.msc 并回车。

3.创建数据表
3.1 创建表的语法和注意事项
bash
create table <数据表名>
(
字段名1 数据类型 [列级别的约束][默认值],
字段名2 数据类型 [列级别的约束][默认值],
字段名3 数据类型 [列级别的约束][默认值],
.........
[表级别的约束]
);
备注:<>的内容必须写 []的内容根据需求写
创建表必须指定的信息:
1.创建的表的名称不区分字母大小写,不能使用SQL语言中的关键字 create 、table 。。。
2.数据表中的每一个列(字段)的名称和数据类型,如果说需要创建多个列,就要使用逗号隔开
创建员工信息表
字段名 数据类型 备注
id number(11) 员工编号
name varchar2(30) 员工姓名
deptid number(11) 所属部门编号
salary number(9,2) 工资
bash
create table tb_emp1( id number(11),name varchar2(30),deptid number(11),salary number(9,2));
3.2使用主键约束
标识唯一 针对于编号
bash
定义列的时候同时指定主键
语法:
字段名 数据类型 primary key
create table tb_emp2
(
id number(11) primary key,
name varchar2(30),
deptid number(11),
salary number(9,2)
);
编写好字段在后面填
create table tb_emp3
(
id number(11),
name varchar2(30),
deptid number(11),
salary number(9,2),
primary key(id)
);
上面讲的是单独的主键
多字段联合主键 (慎用)
primary key [字段1,字段2,....,字段n]
create table tb_emp4
(
name varchar2(30),
deptid number(11),
salary number(9,2),
primary key(name,deptid)
);
表已经创建好忘记添加主键的解决方案:
create table tb_emp5
(
id number(11),
name varchar2(30),
deptid number(11),
salary number(9,2)
);
创建好表以后再添加主键:
alter table 表名 add constraints 主键名pk_列名 primary key(列名);
操作的sql语句以及效果图:
bash
C:\Users\liuqingdong>sqlplus "/as sysdba"
SQL*Plus: Release 19.0.0.0.0 - Production on 星期三 2月 25 10:48:05 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
连接到:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> create table tb_emp1()
2 /
create table tb_emp1()
*
第 1 行出现错误:
ORA-00904: : 标识符无效
SQL> create table tb_emp1( id number(11),name varchar2(30),deptid number(11),salary number(9,2));
表已创建。
SQL> desc tb_emp1;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NUMBER(11)
NAME VARCHAR2(30)
DEPTID NUMBER(11)
SALARY NUMBER(9,2)
SQL> create table tb_emp2
2 (
3 id number(11) primary key,
4 name varchar2(30),
5 deptid number(11),
6 salary number(9,2)
7 );
表已创建。
SQL> desc tb_emp2;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(11)
NAME VARCHAR2(30)
DEPTID NUMBER(11)
SALARY NUMBER(9,2)
SQL> create table tb_emp3
2 (
3 id number(11),
4 name varchar2(30),
5 deptid number(11),
6 salary number(9,2),
7 primary key(id)
8 );
表已创建。
SQL> desc tb_emp3;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(11)
NAME VARCHAR2(30)
DEPTID NUMBER(11)
SALARY NUMBER(9,2)
SQL> create table tb_emp4
2 (
3 name varchar2(30),
4 deptid number(11),
5 salary number(9,2),
6 primary key(name,depid)
7 );
primary key(name,depid)
*
第 6 行出现错误:
ORA-00904: "DEPID": 标识符无效
SQL> create table tb_emp4
2 (
3 name varchar2(30),
4 deptid number(11),
5 salary number(9,2),
6 primary key(name,deptid)
7 );
表已创建。
SQL> desc tb_emp4;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
NAME NOT NULL VARCHAR2(30)
DEPTID NOT NULL NUMBER(11)
SALARY NUMBER(9,2)
SQL> create table tb_emp5
2 (
3 id number(11),
4 name varchar2(30),
5 deptid number(11),
6 salary number(9,2)
7 );
表已创建。
SQL> desc tb_emp5;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NUMBER(11)
NAME VARCHAR2(30)
DEPTID NUMBER(11)
SALARY NUMBER(9,2)
SQL> alter table tb_emp5 add constraints pk_id primary key(id);
表已更改。
SQL> desc tb_emp5;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(11)
NAME VARCHAR2(30)
DEPTID NUMBER(11)
SALARY NUMBER(9,2)
SQL>