1.约束创建
1.1 表级完整性约束
按照如下表结构创建tb_student数据表,
要求以表级完整性约束方式定义主键,并指定主键约束名为pk_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 pk_student primary key(studentNo) ) engine=InnoDB default charset=gb2312;
1.2 列级完整性约束
按照如下的表结构创建tb_class。
要求:使用InnoDB存储引擎,gb2312字符集,主键约束为列级完整性约束,
唯一约束为表级完整性约束其约束名为uq_class
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;
1.4 外键
按照如下表结构创建tb_course表,
要求:外键名字为fk_course,引擎为InnoDB,默认字符集为gb2312
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;
定义数据表tb_score,表结构如下表所示, 创建对应的外键
引擎为InnoDB,默认字符集为gb2312
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; 注意:外键约束对应的主键(在表里是主键才可以)
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:检查,指定一个表达式,用于检验指定数据