一、只创建基本数据库结构并写入基本测试数据(不含外键的创建)

# 忽略外键检查
SET FOREIGN_KEY_CHECKS=0;

# 创建班级表
DROP TABLE IF EXISTS `lu_class`;
CREATE TABLE `lu_class` (
  `class_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '班级ID',
  `class_name` varchar(50) NOT NULL COMMENT '班级名称',
  PRIMARY KEY (`class_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='班级表';

# 插入基础测试数据
INSERT INTO `lu_class` VALUES ('101', '奥数班');
INSERT INTO `lu_class` VALUES ('102', '体育班');
INSERT INTO `lu_class` VALUES ('103', '物理班');

# 创建学生表
DROP TABLE IF EXISTS `lu_student`;
CREATE TABLE `lu_student` (
  `student_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '学生ID',
  `student_name` varchar(50) NOT NULL COMMENT '姓名',
  `class_id` int(11) unsigned NOT NULL COMMENT '班级ID',
  PRIMARY KEY (`student_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='学生表';

# 插入基础测试数据
INSERT INTO `lu_student` VALUES ('1', '张三', '101');
INSERT INTO `lu_student` VALUES ('2', '李四', '102');
INSERT INTO `lu_student` VALUES ('3', '王五', '103');

二、插入外键

说明如下:

1、外键的创建包含4种,RESTRICT、NO ACTION、CASCADE、SET NULL。
CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。

SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持。
NO ACTION: InnoDB拒绝删除或者更新父表。

RESTRICT: 拒绝删除或者更新父表。指定RESTRICT(或者NO ACTION)和忽略ON DELETE或者ON UPDATE选项的效果是一样的。

2、主表是包含关联主键的表,子表是外键所在的表,所以主表是lu_class,子表是lu_student。

ALTER TABLE lu_student ADD CONSTRAINT FK_STUDENT_UNION_CLASS FOREIGN KEY (class_id) REFERENCES lu_class(class_id) on delete cascade on update restrict;

二、测试删除

delete from lu_class where class_id = 101;

执行前:

执行删除前

执行后:

执行删除后

最后修改:2024 年 10 月 29 日
如果觉得我的文章对你有用,请随意赞赏