constraint 约束
PRIMARY 主要的
UNIQUE 独一无二的
CHECK 检查,核对
FOREIGN 外交的
KEY 关键字
REFERENCES 把...引做参考
约束
什么是约束?
约束就是为了完成数据库中数据的完整性与一致性的一种检查机制
通过定义在数据库中的表来完成约束条件
有哪些约束?
- 主键约束 PRIMARY KEY 唯一加非空
–作用:识别一个行
–要求:在给一个列建立主键时不能重复不能为空
注意:推荐使用无意义且有序的数字作为主键,例如1,2,3,4....一张表只能有一个主键
SELECT * FROM STUDENT;
建表后加上主键约束
ALTER TABLE STUDENT ADD CONSTRAINT PK_STU_ID PRIMARY KEY (ST_ID);
更新主键使其符合约束条件
UPDATE STUDENT SET ST_ID=7 WHERE ST_NAME ='娜娜';
INSERT INTO STUDENT(ST_ID) VALUES(8);
CREATE TABLE T_USER(
T_ID NUMBER(4), --PRIMARY KEY,--CONSTRAINT PK_USER_ID PRIMARY KEY,--行级定义
T_NAME VARCHAR2(20),
CONSTRAINT PK_USER_ID PRIMARY KEY(T_ID) --表级定义
)
SELECT * FROM T_USER;
2.唯一约束 UNIQUE
作用:确保被指定的字段每行数据不重复,可以为空
建表后创建
ALTER TABLE STUDENT ADD CONSTRAINT UN_STU_NAME UNIQUE(ST_NAME);
建表时创建
CREATE TABLE T_USER(
T_ID NUMBER(4),
T_NAME VARCHAR2(20),--UNIQUE, CONSTRAINT UN_USER_NAME UNIQUE 行级定义
CONSTRAINT UN_USER_ID UNIQUE(ST_NAME) --表级定义
)
3.非空约束
作用:指定字段必填
建表后创建
ALTER TABLE STUDENT MODIFY ST_NAME NOT NULL;
建表时创建
CREATE TABLE T_USER(
T_ID NUMBER(4),
T_NAME VARCHAR2(20) NOT NULL
)
4.检查约束(自定义约束) CHECK
–作用:
建表后创建
ALTER TABLE STUDENT ADD CONSTRAINT CK_STU_SEX
CHECK(((ST_SEX='男') OR (ST_SEX='女')) AND (ST_SEX IS NOT NULL));
建表时创建
CREATE TABLE T_USER(
T_ID NUMBER(4),
T_NAME VARCHAR2(20) CHECK(T_NAME='小王子')
)
5.外键约束 FOREIGN KEY
作用:用来强制两个表关系,该约束要求定义外键中的每个值必须与引用键相匹配
外键:从表中引用主表中的引用键的列
引用键:被外键引用的主键或者唯一键
CREATE TABLE T_CLASS(
C_ID NUMBER(5),
C_NO NUMBER(5),
C_TEACHER VARCHAR2(20)
)
建唯一键
ALTER TABLE T_CLASS ADD CONSTRAINT UN_CLASS_CNO UNIQUE(C_NO);
INSERT INTO T_CLASS VALUES(1,1809,'梁辰');
INSERT INTO T_CLASS VALUES(2,1810,'惊蛰');
CREATE TABLE T_STU(
S_ID NUMBER(5),
S_NAME VARCHAR2(20),
C_NO NUMBER(5)
)
定义外键
ALTER TABLE T_STU ADD CONSTRAINT FK_STU_CNO
FOREIGN KEY (C_NO) REFERENCES T_CLASS(C_NO);
INSERT INTO T_STU VALUES(1,'谈笑人生',1810);
INSERT INTO T_STU VALUES(2,'哈哈哈',1810);
INSERT INTO T_STU VALUES(3,'番茄',1809);
INSERT INTO T_STU VALUES(4,‘再也没有’,1809);
INSERT INTO T_STU VALUES(5,'孙悟空',1811);
SELECT * FROM T_STU;
SELECT * FROM T_CLASS;
DELETE FROM T_STU WHERE S_ID=1;
DELETE FROM T_CLASS WHERE C_ID=1;
级联关系
--ON DELETE CASCADE (删除主表数据顺带删除对应子表整行数据)
ALTER TABLE T_STU ADD CONSTRAINT FK_STU_CNO
FOREIGN KEY (C_NO) REFERENCES T_CLASS(C_NO) ON DELETE CASCADE;
--ON DELETE SET NULL(删除主表数据把子表对应外键数据设置为NULL)
ALTER TABLE T_STU ADD CONSTRAINT FK_STU_CNO
FOREIGN KEY (C_NO) REFERENCES T_CLASS(C_NO) ON DELETE SET NULL;