我有一个包含大学数据的数据库。我想创建一个触发器来解决2个表大学和学生。
CREATE TABLE IF NOT EXISTS `university` (
`name` varchar(80) COLLATE utf8_bin NOT NULL,
`uni_id` int(11) NOT NULL,
`students` int(11) NOT NULL,
PRIMARY KEY (`uni_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE IF NOT EXISTS `student` (
`firstName` varchar(20) COLLATE utf8_bin NOT NULL,
`lastName` varchar(20) COLLATE utf8_bin NOT NULL,
`student_id` int(11) NOT NULL,
`id_number` varchar(100) COLLATE utf8_bin NOT NULL,
`current_address` varchar(100) COLLATE utf8_bin NOT NULL,
`current_phone` varchar(16) COLLATE utf8_bin NOT NULL,
`date_of_birth` date NOT NULL,
`gender` varchar(100) COLLATE utf8_bin NOT NULL,
`year_of_study` int(11) NOT NULL,
`department_id` int(11) NOT NULL,
`uniId` int(11) NOT NULL,
`study_cycle` varchar(50) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`student_id`,`id_number`),
UNIQUE KEY `student_id` (`student_id`),
UNIQUE KEY `id_number` (`id_number`),
KEY `lastName` (`lastName`),
KEY `uni_id` (`uniId`),
KEY `uniId` (`uniId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
我希望在表students
中有新条目后,触发器会增加表university
的{{1}}。
student
当我尝试执行它时,它给了我一个错误。我做错了什么?
答案 0 :(得分:1)
如果您没有设置除;
之外的其他分隔符,则该语句将在第一个;
结束,并且您的触发器定义将不完整。您需要告诉 MySQL 该语句应该以您定义的分隔符结束。之后,您可以使用delimiter ;
delimiter //
CREATE TRIGGER s BEFORE INSERT ON student
FOR EACH ROW
BEGIN
UPDATE university
SET students = students + 1
WHERE uni_id = NEW.uniid;
END//
delimiter ;
(并尝试将触发器更改为BEFORE
)
答案 1 :(得分:0)
您应该将NEW.uni_id
更改为NEW.uniId
:
CREATE TRIGGER s AFTER
INSERT ON student
FOR EACH ROW
UPDATE university
SET students=students+1
WHERE uni_id=NEW.uniId
;
或者您应该在student
表格中重命名该字段。
小提琴是here。