ORACLE 约束
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术:Oracle sql * plus PLSQL Developer
作者:叶
撰写时间:2019年01月01日
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
约束: 对创建的表的列属性、字段进行的限制。
诸如:
NOT NULL ------ 非空约束
UNIQUE ------ 唯一性约束
PRIMARY KEY ------ 主键约束
FOREIGN KEY ------ 外 键 约束
CHECK ------- 检查性约束
查询定义约束的列:
SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME = ‘EMP10’;
查询约束:
SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME = ‘EMP10’;
- 定义约束---在创建表的同时,添加对应的属性的约束
- 表 级约束 & 列 级约束
非空约束:保证 列 值不能为空, 而且NOT NULL 约束只能定义在 列 级上。
检查性约束:定义每一行满足的条件。
CREATE TABLE EMP001 (
EMP_ID NUMBER (8) PRIMARY KEY,
SALARY NUMBER (8),
---列 级 约 束
HIRE_DATE DATE NOT NULL,
DEPT_ID NUMBER (8),
EMAIL VARCHAR2 (8) CONSTRAINT EMP001_EMAIL_UK UNIQUE,
NAME VARCHAR2 (8) CONSTRAINT EMP001_NAME_UU NOT NULL,
FIRST_NAME VARCHAR2 (8),
---表 级 约 束
CONSTRAINT EMP001_EMP_ID_CK PRIMARY KEY (EMP_ID),
CONSTRAINT EMP001_FIR_NAME_UK UNIQUE (FIRST_NAME),
CONSTRAINT EMP001_DEPT_ID_FK FOREIGN KEY (DEPT_ID) REFERENCES DEPARTMENTS (DEPARTMENT_ID)
);
注: 如果不指定约束名,Oracle server 自动按照SYS_CN 的格式指定约束名。
FOREIGN KEY: 在表 级 指定子表中的列
REFERENCES: 标示在父表中的列
ON DELETE CASCADE (级联删除): 当父表中的列被删除时,子表中相应的列也被删除
ON DELETE SET NULL ( 级 联 置 空 ): 子表中相应的列置空。
1.2 只有 NOT NULL 只能使用列 级 约 束。其他的约束两种方式皆可。
添加约束:
使用 ALTER TABLE 语句:
- 添加或删除约束,但是不能修改约束。
- 有效化或无效化约束。
- 添加 NOT NULL 约束要使用 MODIFY 语句。
2.添加和删除表的约束—在创建表以后,只能添加和删除,不能修改
2.1 添加:
ALTER TABLE EMP001
ADD CONSTRAINT EMP001_SAL_CK CHECK (SALARY >5000)
INSERT INTO EMP001
VALUES
(‘10’,’6000’,’01-5-2019’,’10’,’123456’,’Jeason’,’ZhangJie’)
新增一条数据时,要满足约束条件,否则会出错提示,如下:
2.1.1 对于 NOT NULL 来讲,不用ADD, 需要使用MODIFY:
ALTER TABLE EMP001
MODIFY (SALARY NOT NULL)
2.2 删除:
ALTER TABLE EMP001
DROP CONSTRAINT EMP001_SAL_CK
2.3 使某一个约束失效:此约束还存在表中,只是不起作用
ALTER TABLE EMP001
DISABLE CONSTRAINT SYS_C0011491;
2.4 使某一个约束激活:激活以后,此约束具有约束力
ALTER TABLE EMP001
ENABLE CONSTRAINT SYS_C0011491;