Mysql 如何防止通过触发器插入到表中?
当颜色为红色的行数超过100行时,我必须防止插入到表中。这是我写的代码,只是不知道在空白处写什么。Mysql 如何防止通过触发器插入到表中?,mysql,sql,database,triggers,Mysql,Sql,Database,Triggers,当颜色为红色的行数超过100行时,我必须防止插入到表中。这是我写的代码,只是不知道在空白处写什么。 CREATE TRIGGER onRegisterInsert BEFORE INSERT ON table_name FOR EACH ROW BEGIN DECLARE n INT DEFAULT 0; IF New.Colour='Red' THEN SELECT COUNT(*) INTO n FROM table_name WHERE Colour='Re
CREATE TRIGGER onRegisterInsert BEFORE INSERT ON table_name FOR EACH ROW
BEGIN
DECLARE n INT DEFAULT 0;
IF New.Colour='Red' THEN
SELECT COUNT(*) INTO n FROM table_name WHERE Colour='Red';
if n > 100 THEN
---
END IF
END IF
END
我想写SIGNAL SQLSTATE'45000'
来防止插入,但我不想抛出错误,因为我正在插入一个数据列表,如果抛出错误,在此之后插入的数据也将停止
我还考虑过编写一个后插入触发器,而不是前插入触发器
DELIMITER //
CREATE TRIGGER onRegisterInsert After INSERT ON table_name FOR EACH ROW
BEGIN
IF New.Colour='Red' THEN
SELECT COUNT(*) INTO @count FROM table_name WHERE Colour='Red';
IF (@count >= 100) THEN
delete from table_name new;
END IF;
END IF;
END //
但这段代码也给出了一个错误 您可以在调用应用程序中使用
INSERT IGNORE
而不是INSERT
我不认为MySQL提供了“而非”触发器。也许,在插入后的中,您可以使用delete from table\u name,其中id=new.id
(将id
替换为表的实际pk)无法阻止仅从整个数据数组插入一条记录。插入全部或弹出整个插入。是的,这可能会解决。。。此外,插入前触发器必须将错误记录的PK(或任何唯一列/表达式)值更改为任何现有记录的值。但这必须经过测试…方法是正确的!跟踪信息。