student (sno, sname, ssex, sage, sdept)
,分别是id,name,sex,age,department。st_cs_info
,其中包含主修“CS”(计算机科学)的学生信息。DROP VIEW IF EXISTS st_cs_info;
CREATE VIEW st_cs_info AS
SELECT *
FROM student
WHERE sdept='CS';
'study.st_cs_info' is not BASE TABLE
似乎在视图上创建触发器是非法的。
这是我的触发代码:
DELIMITER //
CREATE TRIGGER st_cs_info_insert
AFTER INSERT ON st_cs_info
FOR EACH ROW
BEGIN
IF new.sdept != 'CS' THEN
DELETE FROM student
WHERE student.sno=new.sno;
END IF;
END; //
DELIMITER ;
PS:我的MySQL版本是
8.0.32
.
我想实现“只能通过这个视图插入CS学生的价值观”.
此外,我不确定是否应该使用触发器。
我已经知道如何检查新行了
无需创建触发器。
我需要做的就是在创建视图时使用
WITH CHECK OPTION
。
DROP VIEW IF EXISTS st_cs_info;
CREATE VIEW st_cs_info AS
SELECT *
FROM student
WHERE sdept='CS'
WITH CHECK OPTION;
然后当我向视图中插入新行时:
sdept
不是'CS'
,那么就会报错INSERT INTO st_cs_info(sno, sname, ssex, sage, sdept)
VALUES ('202113002', 'John', NULL, 20, 'IS');
错误信息
CHECK OPTION failed 'study.st_cs_info'
sdept
是'CS'
,那么它就成功了。INSERT INTO st_cs_info(sno, sname, ssex, sage, sdept)
VALUES ('202113004', 'Kate', NULL, 20, 'CS');