(二).约束关键字,约束课堂SQL

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;

猜你喜欢

转载自blog.csdn.net/weixin_37174418/article/details/85300566
今日推荐