目录
设计完表后,必须为其设置约束,以保证表中数据尽可能合法有效的数据。
约束,是保证数据完整性的一种手段。
非空约束(NOT BULL,NK)
CREATE TABLE member(name VARCHAR(20) NOT NULL,age NUMBER);
当插入数据中name为空时会出现错误提示
唯一约束(UNIQUE,UK)
CREATE TABLE member(name VARCHAR(20),email VARCHAR(20) UNIQUE);
表中的email不可重复,但null不受限制
CREATE TABLE students(name VARCHAR2(20),email VARCHAR2(30),CONSTRAINT uk_email UNIQUE(email));
提示约束信息为”表用户名.UK_EMAIL“
查看数据库下的约束信息
SELECT * FROM user_constraints;
查看约束对应的列
SELECT * FROM user_cons_columns;
主键约束(PRIMARY,PK)
主键约束=唯一约束+非空约束
CREATE TABLE memmber(mid NUMBER,name VARCHAR2(20) NOT NULL,CONSTRAINT pk_mid PRIMARY KEY(mid));
当存在多个主键(复合主键)时,只有当多列的主键完全相同时才会报错
但一般情况下复合主键用的较少
检查约束(CHECK,CK)
CREATE TABLE member(name VARCHAR2(20) NOT NULL,age NUMBER(3),CONSTRAINT ck_age CHECK (age BETWEEN 0 AND 100));
设置过多约束在更新数据时会验证影响程序性能
外键约束 (FOREING KEY,FK)
作用在两张数据表上的约束;
- 创建父表
CREATE TABLE member(name VARCHAR2(20),age NUMBER,CONSTRAINT pk_name PRIMARY KEY(name));
- 创建子表
CREATE TABLE book(title VARCHAR2(20),name VARCHAR2(20),CONSTRAINT fk_name FOREIGN KEY(name) REFERENCES member(name));
外键关联:控制子表中某一列的内容与父表中数据范围相匹配;子表的数据范围受父表控制
限制一
- 若两表存在外键关系,则在删除子表前必先删除父表
- 若两表互有外键关系,则需强制删除(尽量少使用此操作)
DROP TABLE tab_name CASCADE CONSTRAIN;
限制二
- 父表中作为子表关联的外键字段,必须设置为主键约束或者唯一约束
设置父表的数据被删除,子表对应的数据被自动删除,那么就需要设置数据的级联操作:
两类:
- 数据的级联删除(ON DELETE CASCADE):
CREATE TABLE book( title VARCHAR2(20), name VARCHAR2(20), CONSTRAINT fk_name FOREIGN KEY(name) REFERENCES member(name) ON DELETE CASCADE);
- 级联更新(ON DELETE SET NULL ):
CREATE TABLE book1( title VARCHAR2(20), name VARCHAR2(20), CONSTRAINT fk_name FOREIGN KEY(name) REFERENCES member(name) ON DELETE SET NULL);
添加约束
公式:ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 约束类型(字段)[选项];
创建原表不添加主键约束
CREATE TABLE tab_1(name VARCHAR2(20),age NUMBER);
为name添加主键约束
ALTER TABLE tab_1 ADD CONSTRAINT pk_name PRIMARY KEY(name);
将age更改为非空约束
ALTER TABLE tab_1 MODIFY(age NUMBER NOT NULL);
删除约束
公式:ALTER TABLE 表名称 DROP CONSTRAINT 约束名称;
删除上表中的主键约束
ALTER TABLE tab_1 DROP CONSTRAINT pk_name1;
删除非空约束
ALTER TABLE tab_1 MODIFY(age NUMBER);