【如何成为SQL高手】第四关:完整性约束

简介: 【如何成为SQL高手】第四关:完整性约束

1.约束创建


1.1 表级完整性约束


按照如下表结构创建tb_student数据表,

要求以表级完整性约束方式定义主键,并指定主键约束名为pk_student

5e62270416cd443ebddba2768995f95b.png


CREATE TABLE tb_student (
 studentNo CHAR(10) NOT NULL,
 studentName VARCHAR(10) NOT NULL,
 sex CHAR(2),
 birthday DATE, 
 native VARCHAR(20),
 nation VARCHAR(20) default '汉',
 classNo CHAR(6),
 constraint pk_student primary key(studentNo)
) engine=InnoDB default charset=gb2312;

1.2 列级完整性约束


按照如下的表结构创建tb_class。

要求:使用InnoDB存储引擎,gb2312字符集,主键约束为列级完整性约束,

唯一约束为表级完整性约束其约束名为uq_class

34bc814f4b854a9da4736c40bed67d7e.png


CREATE TABLE tb_class (
 classNo CHAR(6) PRIMARY KEY NOT NULL,
 className VARCHAR(20) NOT NULL,
 department VARCHAR(20),
 grade ENUM('1','2','3','4'), 
 classNum TINYINT,
 constraint uq_class unique(className)
) engine=InnoDB default charset=gb2312;


1.3 级联更新删除


删除数据表tb_student,按照表tb_student结构重新创建tb_student,
在创建的同时建立tb_student到tb_class的外键约束
(两个表相同含义的属性是classNo,
因此classNo是tb_student的外键),
约束名为fk_student,
并定义相应的参照动作,更新操作为级联(cascade),
删除操作为限制(restrict),数据表引擎为InnoDB,字符集为gb2312
drop table tb_student;
CREATE TABLE tb_student (
 studentNo CHAR(10) NOT NULL,
 studentName VARCHAR(10) NOT NULL,
 sex CHAR(2),
 birthday DATE, 
 native VARCHAR(20),
 nation VARCHAR(20) default '汉',
 classNo CHAR(6),
 constraint fk_student FOREIGN KEY (classNo)
 references tb_class(classNo) on delete restrict on update cascade
) engine=InnoDB default charset=gb2312;



ebaddb9944fd42d483c9b61960b316fd.png

1.4 外键


按照如下表结构创建tb_course表,

要求:外键名字为fk_course,引擎为InnoDB,默认字符集为gb2312


f9077780a1ba43fb944764f049631780.png

CREATE TABLE tb_course (
 courseNo CHAR(6) NOT NULL primary key comment '课程号',
 courseName VARCHAR(20) unique not NULL comment '课程名',
 credit DECIMAL(3,1) not NULL comment '学分',
 courseHour TINYINT(2) not NULL comment '课时数', 
 term TINYINT(2) comment '开课学期',
 priorCourse CHAR(6) comment '先修课程',
 constraint fk_course FOREIGN KEY(priorCourse) REFERENCES tb_course(courseNo)
) engine=InnoDB default charset=gb2312;

a937923a3b924077b4f1deafbf9c151e.png


定义数据表tb_score,表结构如下表所示, 创建对应的外键

引擎为InnoDB,默认字符集为gb2312

a76125a9867b46aab81f9d421573fd3b.png

Alter table tb_student add primary key(studentNo);   --添加主键
CREATE TABLE tb_score(
 studentNo CHAR(10) NOT NULL comment '学号',
 courseNo CHAR(6) NOT NULL comment '课程号',
 credit DECIMAL(4,1) not NULL comment '成绩',
 constraint fk_score_stuNo FOREIGN KEY(studentNo) REFERENCES tb_student(studentNo),  
 constraint fk_score_courNo FOREIGN KEY(courseNo) REFERENCES tb_course(courseNo),
 constraint pk_score PRIMARY KEY(studentNo,courseNo)
) engine=InnoDB default charset=gb2312;
注意:外键约束对应的主键(在表里是主键才可以)

1126014370a441c0a08af28b1e735ae7.png


2.完整性约束更新


删除在表tb_score中定义的外键约束fk_score_stuNo

alter table tb_score drop foreign key fk_score_stuNo;


删除在表tb_student中定义的主键约束。

Alter table tb_student drop primary key;


添加主键约束,用alter table语句在tb_student对studentNo重新添加主键。

Alter table tb_student add primary key(studentNo);


添加外键约束,用alter table语句在tb_score表对studentNo重新添加外键,

的主键为tb_student表的studentNo,外键名称为fk_score_stuNo。

ALTER TABLE tb_score ADD CONSTRAINT fk_score_stuNo FOREIGN KEY(studentNo) REFERENCES tb_student(studentNo);


3.技能拓展


3.1 约束类型


约束主要完成对数据的检验,保证数据库数据的完整性;如果有相互依赖数据,保证该数据不被删除。
常用五类约束:
1. not null:非空约束,指定某列不为空
2. unique: 唯一约束,指定某列或几列组合的数据不能重复
3. primary key:主键约束,指定某列或几列组合的数据非空且唯一
4. foreign key:外键,指定该列记录属于主表中的一条记录,参照另一条数据
5. check:检查,指定一个表达式,用于检验指定数据
目录
相关文章
|
15天前
|
SQL 数据库
如何应用SQL约束条件?
【10月更文挑战第28天】如何应用SQL约束条件?
32 11
|
15天前
|
SQL 存储 Oracle
sql约束条件
【10月更文挑战第28天】sql约束条件
31 8
|
1月前
|
SQL 存储 数据库
SQL学习一:ACID四个特性,CURD基本操作,常用关键字,常用聚合函数,五个约束,综合题
这篇文章是关于SQL基础知识的全面介绍,包括ACID特性、CURD操作、常用关键字、聚合函数、约束以及索引的创建和使用,并通过综合题目来巩固学习。
32 1
|
1月前
|
数据库
SQL_语句常见的操作创建,使用,删除表和表级约束
SQL_语句常见的操作创建,使用,删除表和表级约束
30 0
|
3月前
|
SQL 数据采集 关系型数据库
7、SQL约束
7、SQL约束
48 0
|
4月前
|
SQL Oracle 关系型数据库
CREATE TABLE 时的 SQL FOREIGN KEY 约束
【7月更文挑战第24天】CREATE TABLE 时的 SQL FOREIGN KEY 约束。
52 5
|
4月前
|
SQL Oracle 关系型数据库
ALTER TABLE 时的 SQL PRIMARY KEY 约束
【7月更文挑战第24天】ALTER TABLE 时的 SQL PRIMARY KEY 约束。
40 3
|
4月前
|
SQL Oracle 关系型数据库
CREATE TABLE 时的 SQL PRIMARY KEY 约束
【7月更文挑战第24天】CREATE TABLE 时的 SQL PRIMARY KEY 约束。
43 2
|
4月前
|
SQL 关系型数据库 MySQL
ALTER TABLE 时的 SQL DEFAULT 约束
【7月更文挑战第20天】ALTER TABLE 时的 SQL DEFAULT 约束。
40 1
|
4月前
|
SQL Oracle 关系型数据库
SQL DEFAULT 约束
【7月更文挑战第20天】SQL DEFAULT 约束。
44 1

热门文章

最新文章