constraint 约束
PRIMARY 主要的
UNIQUE 独一无二的
CHECK 检查,核对
FOREIGN 外交的
KEY 关键字
REFERENCES 把...引做参考
约束就是为了完成数据库中数据的完整性与一致性的一种检查机制
通过定义在数据库中的表来完成约束条件
–作用:识别一个行
–要求:在给一个列建立主键时不能重复不能为空
注意:推荐使用无意义且有序的数字作为主键,例如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;
作用:确保被指定的字段每行数据不重复,可以为空
建表后创建
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) --表级定义
)
作用:指定字段必填
ALTER TABLE STUDENT MODIFY ST_NAME NOT NULL;
CREATE TABLE T_USER(
T_ID NUMBER(4),
T_NAME VARCHAR2(20) NOT NULL
)
–作用:
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='小王子')
)
作用:用来强制两个表关系,该约束要求定义外键中的每个值必须与引用键相匹配
外键:从表中引用主表中的引用键的列
引用键:被外键引用的主键或者唯一键
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;