Oracle 通用表
/*
emp 表 dept 部门表 salgrade 表
empno 员工编号 deptno 部门编号 grade 工资等级
ename 员工姓名 dname 部门名称 losal 工资范围下限
job 职位 loc 工作地点 hisal 工资范围上限
mgr 经理编号
hiredate 入职日期
sal 薪金
comm 奖金
deptno 部门编号
*/
Oracle实例演练
--约束:
--保证数据完整性的规则,设置在单个字段或者多个字段组合上,写入这些字段的
--数据必须符合约束的限制
--约束类型
--1、NOT NULL:非空约束,指定某列的所有行数据不能包含空值
--2、UNIQUE :唯一性约束,指定列或者列的组合 的所有行数据必须唯一
--3、PRIMARY KEY:主键约束,表的每行的唯一性标识,
--指定列或者列的组合 的所有行数据必须唯一
--4、FOREIGN KEY:外键约束,在列及引用列上建立的一种强制依赖关系
--5、CHECK:检查性约束,在列上指定一个必须满足的条件
--除了NOT NULL约束外,建议给其它约束起名字,命名规则为:表名_列名_约束类型。
--NOT NULL约束只能定义在列级别上,联合主键或联合唯一性约束只能定义在表级别上,
--其它约束既可以定义成表级别,也可以定义成列级别;
--CONSTRAINT:约束的关键字;constraint_name:约束名字;constraint_type:约束的类型;
1、创建非空约束
--NOT NULL
CREATE TABLE emp_nn(
empno NUMBER(4),
ename VARCHAR2(10) NOT NULL, --非空约束
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7, 2),
comm NUMBER(7,2),
deptno NUMBER(7,2) NOT NULL ); --非空约束
2、UNIQUE 约束
--唯一约束
--用来确保表中的某一列或者某几列组合的所有行数据必须唯一,
--定义UNIQUE约束的列 (或列组合) 被称为唯一键。
--每个表可以有多个为UNIQUE约束。
--①UNIQUE约束定义在列一级
CREATE TABLE deptment(
deptno number(2),
dname VARCHAR2(14) CONSTRAINT dept_dname_uk UNIQUE,
loc VARCHAR2(13));
--②UNIQUE约束定义在表一级
CREATE TABLE deptment(
deptno number(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
CONSTRAINT dept_dname_uk UNIQUE(dname));
3、PRIMARY KEY约束
--主键约束,用来确保表中的某一列或者某几列组合的所有行数据必须唯一,
---并且确保作为主键一部分的列不能包含空值;
--每个表只能创建一个主键约束。
--①可以定义在列一级
CREATE TABLE deptment(
deptno NUMBER(2) CONSTRAINT dept_deptno_pk PRIMARY KEY,
dname VARCHAR2(14),
loc VARCHAR2(13),
CONSTRAINT dept_dname_uk UNIQUE (dname));
--②可以定义在表一级
CREATE TABLE deptment(
deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
CONSTRAINT dept_dname_uk UNIQUE(dname),
CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno));
4、Foreign Key约束
--外键约束,外键确保了相关联的两个字段的关系:
--外键列的值必须在引用列值的范围内,或者为空;
--外键参照的是列必须是主键或者唯一键;
--主键表主键值被外键表参照时,主键表记录不允许被删除。
--定义在列一级
CREATE TABLE emp_fk1(
empno NUMBER(4),
ename VARCHAR2(10) NOT NULL,
job VARCHAR2(9),
deptno NUMBER(7, 2) NOT NULL,
CONSTRAINT emp_deptno_fk FOREIGN KEY(deptno) REFERENCES dept (deptno),
sal NUMBER(7,2));
--也可定义在表一级
CREATE TABLE emp_fk2(
empno NUMBER(4),
ename VARCHAR2(10) NOT NULL,
deptno VARCHAR2(7,2) NOT NULL,
CONSTRAINT emp_deptno_fk FOREIGN KEY(deptno) REFERENCES dept(deptno)
ON DELETE CASCADE);
--FOREIGN KEY: 定义在子表的列中
--REFERENCES: 引用列所在的父表
--注:ON DELETE CASCADE:当父表中的行被删除时,子表中相依赖的行同时被删除;
-- ON DELETE SET NULL:当父表的行被删除时,子表中相依赖的行被转换为空值;
-- 无ON DELETE CASCADE或ON DELETE SET NULL选项,
-- 当附表中的行被删除时,如果父表中的行在子表中被引用,则提示不能被删除。
5、CHECK约束
--检查性约束,确保某个列的所有行数据都必须满足的条件
--sal NUMBER(8,2) CONSTRAINT dept_sal_min CHECK (sal> 0)
--–要求sal字段的所有行数据必须大于0
--可以定义为列一级
CREATE TABLE emp_fk3(
empno NUMBER(4),
ename VARCHAR2(10) NOT NULL,
deptno NUMBER(7,2),
CONSTRAINT emp_deptno_ck CHECK(deptno BETWEEN 10 AND 99),
sal NUMBER(7,2));
--可以定义为表一级
CREATE TABLE emp_fk4(
empno NUMBER(4),
ename VARCHAR2(10) NOT NULL,
deptno NUMBER(7,2) NOT NULL,
sal NUMBER(7,2),
CONSTRAINT emp_deptno_ck CHECK(deptno BETWEEN 10 AND 99));