一、只创建基本数据库结构并写入基本测试数据(不含外键的创建)
# 忽略外键检查
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;
执行前:
执行后: