MySQL语句添加 UNIQUE 和 CHECK 约束:学生选课系统
使用 MySQL 语句添加 UNIQUE 和 CHECK 约束:学生选课系统
本教程演示如何在 MySQL 数据库中使用 ALTER TABLE 语句添加 UNIQUE 和 CHECK 约束,以确保数据完整性和一致性。示例基于“学生选课系统”数据库,并展示如何为系部表 (xibu) 添加 UNIQUE 约束到联系电话字段和 CHECK 约束到系所在地址字段。
示例代码:
drop database if exists '学生选课系统';
create database '学生选课系统';
use '学生选课系统';
-- 第一张系部表
drop table if exists xibu;
create table xibu(
系部编号 char(2) NOT NULL,
系名 varchar(18) NOT NULL unique,
系主任 varchar(10) NOT NULL,
联系电话 varchar(12) NULL,
系所在地址 ENUM('南关', '院部', '朝阳') NULL,
primary key(系部编号)
);
INSERT INTO xibu (系部编号,系名,系主任,联系电话,系所在地址) values ('01','信息工程系','刘','12345678901','1');
INSERT INTO xibu VALUES ('02', '机电工程系', '李', '13578345791', '2');
-- 第二张表专业表
drop table if exists zhuangye;
create table zhuangye(
专业编号 char(4) NOT NULL,
专业名称 varchar(30) NOT NULL unique,
系部编号 char(2) NULL, #外键
primary key(专业编号),
CONSTRAINT zhuangye_xibubianhao
FOREIGN KEY(系部编号)
REFERENCES xibu(系部编号)
ON DELETE CASCADE
ON UPDATE CASCADE
)engine=INNODB;
INSERT INTO zhuangye VALUES ('0101', '信息管理', '01');
INSERT INTO zhuangye VALUES ('0102', '机械设计', '02');
-- 第三张表班级表
drop table if exists banji;
create table banji(
班级编号 char(12) NOT NULL UNIQUE,
班级名称 varchar(30) NULL,
专业编号 char(4) NULL, #外键
系部编号 char(2) NULL, #外键
primary key(班级编号),
CONSTRAINT banji_zhuangyebianhao
foreign key (专业编号)
references zhuangye(专业编号)
on delete cascade
on update cascade,
CONSTRAINT banji_xibubianhao
foreign key(系部编号)
references xibu (系部编号)
on delete cascade
on update cascade
)engine=InnoDB;
INSERT INTO banji VALUES ('010120200101', '20信息管理1班', '0101', '01');
INSERT INTO banji VALUES ('010120200102', '21软件技术1班', '0102', '02');
-- 第四张表
drop table if exists jiaoshi;
create table jiaoshi(
教师编号 CHAR(6) NOT NULL,
姓名 VARCHAR(12) NULL,
性别 BIT(1) NULL,
出生日期 DATE NULL,
职务 ENUM('教师', '教研室主任', '副院长', '院长') NULL,
职称 ENUM('讲师','副教授', '教授') NULL,
照片 BLOB NULL,
专业编号 CHAR(4) NULL, #外
系部编号 CHAR(2) NULL,#外
PRIMARY KEY (教师编号),
CONSTRAINT jiaoshi_zhuangyebianhao
FOREIGN KEY (专业编号)
references zhuangye (专业编号)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT jiaoshi_xibubianhao
FOREIGN KEY (系部编号)
REFERENCES xibu(系部编号)
ON DELETE CASCADE
ON UPDATE CASCADE)engine=INNODB;
INSERT INTO jiaoshi VALUES ('100001', '张三', 1, '1990-01-01', '教师', '讲师', NULL, '0101', '01');
INSERT INTO jiaoshi VALUES ('100002', '李四', 0, '1988-02-02', '副院长', '副教授', NULL, '0102', '02');
-- 添加 UNIQUE 约束到联系电话字段
ALTER TABLE xibu ADD CONSTRAINT xibu_unique_contact UNIQUE (联系电话);
-- 添加 CHECK 约束到系所在地址字段
ALTER TABLE xibu ADD CONSTRAINT xibu_check_address CHECK (系所在地址 IN ('南关', '院部', '朝阳'));
解释:
ALTER TABLE语句 用于修改已存在的表结构。ADD CONSTRAINT子句 用于添加约束。UNIQUE约束 确保列中所有值都是唯一的。本例中,xibu_unique_contact约束确保联系电话字段中没有重复值。CHECK约束 确保列中的值满足特定条件。本例中,xibu_check_address约束确保系所在地址字段的值只能是'南关','院部'或者'朝阳'。
注意:
- 添加约束后,如果违反约束规则,将无法插入或更新数据。
- 如果需要删除约束,可以使用
ALTER TABLE语句和DROP CONSTRAINT子句。
总结:
通过添加 UNIQUE 和 CHECK 约束,可以增强数据库的完整性和一致性,确保数据的准确性和可靠性。
希望本教程对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/bQ0C 著作权归作者所有。请勿转载和采集!