使用 MySQL 语句添加 UNIQUE 和 CHECK 约束:学生选课系统

本教程演示如何在 MySQL 数据库中使用 ALTER TABLE 语句添加 UNIQUECHECK 约束,以确保数据完整性和一致性。示例基于“学生选课系统”数据库,并展示如何为系部表 (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 ('南关', '院部', '朝阳'));

解释:

  1. ALTER TABLE 语句 用于修改已存在的表结构。
  2. ADD CONSTRAINT 子句 用于添加约束。
  3. UNIQUE 约束 确保列中所有值都是唯一的。本例中,xibu_unique_contact 约束确保 联系电话 字段中没有重复值。
  4. CHECK 约束 确保列中的值满足特定条件。本例中,xibu_check_address 约束确保 系所在地址 字段的值只能是 '南关', '院部' 或者 '朝阳'

注意:

  • 添加约束后,如果违反约束规则,将无法插入或更新数据。
  • 如果需要删除约束,可以使用 ALTER TABLE 语句和 DROP CONSTRAINT 子句。

总结:

通过添加 UNIQUECHECK 约束,可以增强数据库的完整性和一致性,确保数据的准确性和可靠性。

希望本教程对您有所帮助!

MySQL语句添加 UNIQUE 和 CHECK 约束:学生选课系统

原文地址: https://www.cveoy.top/t/topic/bQ0C 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录