gpt4 book ai didi

mysql - MySQL 中的触发器不起作用

转载 作者:行者123 更新时间:2023-11-29 00:28:56 25 4
gpt4 key购买 nike

我有一个包含大学数据的数据库。我想创建一个涉及大学和学生 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;

我希望触发器在 student 表中有新条目后增加表 universitystudents

CREATE TRIGGER s AFTER
INSERT ON student
FOR EACH ROW
BEGIN
UPDATE university SET students=students+1
WHERE uni_id=NEW.uni_id;
END;

当我尝试执行它时,它给我一个错误。我做错了什么?

最佳答案

如果您没有设置除; 之外的其他分隔符,那么语句将在第一个; 处结束,并且您的触发器定义将不完整。您需要告诉 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)

关于mysql - MySQL 中的触发器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17536391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com