2019-10-12 10:17:44
1、數據,建表時有可能會報錯,只需要把前三行注釋刪掉就行
-- ---------------------------- -- Table structure for tb_grade -- ---------------------------- DROP TABLE IF EXISTS `tb_grade`; CREATE TABLE `tb_grade` ( `grade_id` int(11) NOT NULL AUTO_INCREMENT, `grade_name` varchar(50) DEFAULT NULL, PRIMARY KEY (`grade_id`), UNIQUE KEY `grade_check` (`grade_name`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of tb_grade -- ---------------------------- INSERT INTO `tb_grade` VALUES ('1', '一年級'); INSERT INTO `tb_grade` VALUES ('2', '二年級'); INSERT INTO `tb_grade` VALUES ('3', '三年級'); INSERT INTO `tb_grade` VALUES ('4', '四年級'); INSERT INTO `tb_grade` VALUES ('5', '五年級'); -- ---------------------------- -- Table structure for tb_subject -- ---------------------------- DROP TABLE IF EXISTS `tb_subject`; CREATE TABLE `tb_subject` ( `subject_id` int(11) NOT NULL AUTO_INCREMENT, `subject_name` varchar(20) DEFAULT NULL, `class_hour` int(3) DEFAULT NULL, `grade_id` int(11) DEFAULT NULL, PRIMARY KEY (`subject_id`), KEY `grade_id` (`grade_id`), CONSTRAINT `tb_subject_ibfk_1` FOREIGN KEY (`grade_id`) REFERENCES `tb_grade` (`grade_id`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of tb_subject -- ---------------------------- INSERT INTO `tb_subject` VALUES ('1', 'java', '60', '1'); INSERT INTO `tb_subject` VALUES ('2', 'html', '40', '1'); INSERT INTO `tb_subject` VALUES ('3', 'javascript', '30', '1'); INSERT INTO `tb_subject` VALUES ('4', 'database', '60', '2'); INSERT INTO `tb_subject` VALUES ('5', 'java oop', '60', '2'); INSERT INTO `tb_subject` VALUES ('6', 'servlet', '40', '2'); INSERT INTO `tb_subject` VALUES ('7', 'jsp', '40', '2'); INSERT INTO `tb_subject` VALUES ('8', 'struts2', '60', '3'); INSERT INTO `tb_subject` VALUES ('9', 'hibernate', '60', '3'); INSERT INTO `tb_subject` VALUES ('10', 'spring', '60', '3'); -- ---------------------------- -- Table structure for tb_student -- ---------------------------- DROP TABLE IF EXISTS `tb_student`; CREATE TABLE `tb_student` ( `student_no` varchar(20) NOT NULL COMMENT '學號', `login_pwd` varchar(20) NOT NULL DEFAULT '123456' COMMENT '密碼', `student_name` varchar(20) NOT NULL COMMENT '姓名', `sex` enum('女','男') DEFAULT '男' COMMENT '性別', `grade_id` int(11) DEFAULT NULL COMMENT '年級 - 外鍵', `phone` varchar(20) DEFAULT NULL COMMENT '聯系電話', `address` varchar(100) DEFAULT '學生宿舍' COMMENT '現住址', `birthday` date DEFAULT NULL COMMENT '出生日期', `email` varchar(50) DEFAULT NULL COMMENT '電子郵件', PRIMARY KEY (`student_no`), KEY `grade_id` (`grade_id`), CONSTRAINT `tb_student_ibfk_1` FOREIGN KEY (`grade_id`) REFERENCES `tb_grade` (`grade_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of tb_student -- ---------------------------- INSERT INTO `tb_student` VALUES ('s01', '123456', '宋江', '男', '1', '13888811111', '學生宿舍', '1985-10-10', '13888811111@qq.com'); INSERT INTO `tb_student` VALUES ('s02', '123456', '盧俊義', '男', '1', '13888822222', '教場西路8號', '1987-08-08', '13888822222@qq.com'); INSERT INTO `tb_student` VALUES ('s03', '123456', '吳用', '男', '2', '13888833333', '教場西路8號', '1991-06-06', '13888833333@qq.com'); INSERT INTO `tb_student` VALUES ('s04', '123456', '孫二娘', '女', '2', '13888844444', '教場西路16號', '1983-05-05', '13888844444@qq.com'); INSERT INTO `tb_student` VALUES ('s05', '123456', '李逵', '男', '1', '13888855555', '學生宿舍', '1992-01-01', '13888855555@qq.com'); INSERT INTO `tb_student` VALUES ('s06', '123456', '顧大嫂', '女', '1', '13888866666', '教場西路16號', '1990-02-02', '13888866666@qq.com'); INSERT INTO `tb_student` VALUES ('s07', '123456', '柴進', '男', '3', '13888877777', '學生宿舍', '1991-03-03', null); INSERT INTO `tb_student` VALUES ('s08', '123456', '林沖', '男', '3', '13888888888', '教場西路8號', '1986-04-04', null); INSERT INTO `tb_student` VALUES ('s09', '123456', '魯智深', '男', '3', '13888899999', '教場西路8號', '1991-05-05', ''); INSERT INTO `tb_student` VALUES ('s10', '123456', '扈三娘', '女', '2', '13888800000', '學生宿舍', '1983-06-06', ''); -- ---------------------------- -- Table structure for tb_score -- ---------------------------- DROP TABLE IF EXISTS `tb_score`; CREATE TABLE `tb_score` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '成績編號', `student_no` varchar(255) NOT NULL COMMENT '學號 - 外鍵', `subject_id` int(11) DEFAULT NULL COMMENT '所考科目', `student_score` float(5,2) DEFAULT '0.00' COMMENT '分數', `exam_date` date DEFAULT NULL COMMENT '考試日期', PRIMARY KEY (`id`), KEY `student_no` (`student_no`), KEY `subject_id` (`subject_id`), CONSTRAINT `tb_score_ibfk_1` FOREIGN KEY (`student_no`) REFERENCES `tb_student` (`student_no`), CONSTRAINT `tb_score_ibfk_2` FOREIGN KEY (`subject_id`) REFERENCES `tb_subject` (`subject_id`) ) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of tb_score -- ---------------------------- INSERT INTO `tb_score` VALUES ('1', 's01', '1', '90.50', '2016-11-05'); INSERT INTO `tb_score` VALUES ('2', 's02', '1', '85.00', '2016-11-05'); INSERT INTO `tb_score` VALUES ('3', 's03', '1', '69.50', '2016-11-05'); INSERT INTO `tb_score` VALUES ('4', 's04', '1', '85.50', '2016-11-05'); INSERT INTO `tb_score` VALUES ('5', 's05', '1', '45.50', '2016-11-05'); INSERT INTO `tb_score` VALUES ('6', 's06', '1', '95.50', '2016-11-05'); INSERT INTO `tb_score` VALUES ('7', 's07', '1', '76.50', '2016-11-05'); INSERT INTO `tb_score` VALUES ('8', 's08', '1', '88.00', '2016-11-05'); INSERT INTO `tb_score` VALUES ('9', 's09', '1', '70.00', '2016-11-05'); INSERT INTO `tb_score` VALUES ('10', 's10', '1', '55.00', '2016-11-05'); INSERT INTO `tb_score` VALUES ('11', 's01', '2', '80.50', '2016-11-07'); INSERT INTO `tb_score` VALUES ('12', 's02', '2', '70.00', '2016-11-07'); INSERT INTO `tb_score` VALUES ('13', 's03', '2', '68.50', '2016-11-07'); INSERT INTO `tb_score` VALUES ('14', 's04', '2', '82.50', '2016-11-07'); INSERT INTO `tb_score` VALUES ('15', 's05', '2', '43.50', '2016-11-07'); INSERT INTO `tb_score` VALUES ('16', 's06', '2', '90.50', '2016-11-07'); INSERT INTO `tb_score` VALUES ('17', 's07', '2', '70.50', '2016-11-07'); INSERT INTO `tb_score` VALUES ('18', 's08', '2', '80.00', '2016-11-07'); INSERT INTO `tb_score` VALUES ('19', 's09', '2', '80.00', '2016-11-07'); INSERT INTO `tb_score` VALUES ('20', 's10', '2', '56.00', '2016-11-07'); INSERT INTO `tb_score` VALUES ('21', 's01', '3', '84.50', '2016-11-09'); INSERT INTO `tb_score` VALUES ('22', 's02', '3', '73.00', '2016-11-09'); INSERT INTO `tb_score` VALUES ('23', 's03', '3', '69.50', '2016-11-09'); INSERT INTO `tb_score` VALUES ('24', 's04', '3', '86.50', '2016-11-09'); INSERT INTO `tb_score` VALUES ('25', 's05', '3', '44.50', '2016-11-09'); INSERT INTO `tb_score` VALUES ('26', 's06', '3', '80.50', '2016-11-09'); INSERT INTO `tb_score` VALUES ('27', 's07', '3', '75.50', '2016-11-09'); INSERT INTO `tb_score` VALUES ('28', 's08', '3', '87.00', '2016-11-09'); INSERT INTO `tb_score` VALUES ('29', 's09', '3', '85.00', '2016-11-09'); INSERT INTO `tb_score` VALUES ('30', 's10', '3', '66.00', '2016-11-09');
2、表結構

3、需求:針對數據庫中的4張數據表(tb_grade、tb_subject、tb_student、tb_score)
在需要的數據表上創建觸發器,達到每刪除一個數據表的記錄時都能順順利執行(級聯刪除)。
4、具體實現:
-- 為tb_grade創建觸發器 DROP TRIGGER IF EXISTS trig_grade; delimiter // CREATE TRIGGER trig_grade BEFORE delete on tb_grade for each row BEGIN DELETE FROM tb_student WHERE grade_id = old.grade_id; DELETE FROM tb_subject WHERE grade_id = old.grade_id; END // delimiter ; -- 為tb_student創建觸發器 DROP TRIGGER IF EXISTS trig_student; delimiter // CREATE TRIGGER trig_student BEFORE delete on tb_student for each row BEGIN DELETE FROM tb_score WHERE student_no = old.student_no; END // delimiter ; -- 為tb_subject創建觸發器 DROP TRIGGER IF EXISTS trig_subject; delimiter // CREATE TRIGGER trig_subject BEFORE delete on tb_subject for each row BEGIN DELETE FROM tb_score WHERE subject_id = old.subject_id; END // delimiter ; -- 查看此數據庫中的觸發器 SHOW TRIGGERS; -- 測試刪除數據是否能成功 DELETE FROM tb_student WHERE student_no = "S01"; DELETE FROM tb_grade WHERE grade_id = 1; DELETE FROM tb_subject WHERE subject_id = 3; DELETE FROM tb_score WHERE id = 9;
-- 最后可以查詢表看看有沒有被順利刪除
5、tb_score表是沒有其他表將外鍵指向它的主鍵
想要刪除從表的數據,需要先刪除主表的數據
