gpt4 book ai didi

mysql - MySQL TRIGGER 可以单独检查所有 INSERT 值吗?

转载 作者:行者123 更新时间:2023-11-29 21:51:32 24 4
gpt4 key购买 nike

我有一个简单的数据库,其中包含表格:Sklep(SklepNazwa,Adres), Towar(TowarNazwa,Producent), Sprzedaz(SklepNazwa,SklepAdres,TowarNazwa,TowarProducent,Cena,数据)

我必须创建TRIGGER,如下所示。

问题是,当我尝试一次插入多行时,它不起作用。当至少一行触发SIGNAL时,所有值都会被转储。即使可以插入,也不会插入任何内容。

我可以打电话

插入 Sprzedaz
值 (...),(...),(...),(...);

其中某些值可以插入,而某些值应该插入失败并显示 SIGNAL 消息?

   DELIMITER $$

CREATE TRIGGER SprzedazInsert
BEFORE INSERT ON `Sprzedaz`
FOR EACH ROW
BEGIN

IF (SELECT COUNT(1) FROM Sprzedaz
WHERE NEW.SklepNazwa = Sprzedaz.SklepNazwa
AND NEW.SklepAdres = Sprzedaz.SklepAdres
AND NEW.TowarNazwa = Sprzedaz.TowarNazwa
AND NEW.TowarProducent = Sprzedaz.TowarProducent
AND NEW.Cena = Sprzedaz.Cena
AND NEW.`Data` = Sprzedaz.`Data`) > 0
THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'INSERT FAILED: Row already exists.';
ELSE

IF (SELECT COUNT(1) FROM Sklep WHERE NEW.SklepNazwa = Sklep.SklepNazwa) > 0
THEN
IF (NEW.SklepAdres != (SELECT Adres FROM Sklep WHERE NEW.SklepNazwa = Sklep.SklepNazwa))
THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'INSERT FAILED: Wrong "Sklep" data.';
END IF;
ELSE
INSERT INTO `Sklep` (`SklepNazwa`,`Adres`)
VALUES (NEW.SklepNazwa,NEW.SklepAdres);
END IF;

IF (SELECT COUNT(1) FROM Towar WHERE NEW.TowarNazwa = Towar.TowarNazwa) > 0
THEN
IF (NEW.TowarProducent != (SELECT Producent FROM Towar WHERE NEW.TowarNazwa = Towar.TowarNazwa))
THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'INSERT FAILED: Wrong "Towar" data.';
END IF;
ELSE
INSERT INTO `Towar` (`TowarNazwa`,`Producent`)
VALUES (NEW.TowarNazwa,NEW.TowarProducent);
END IF;
END IF;

END$$

最佳答案

如果您尝试在同一事务中插入多行,则 dbms 会假设您希望所有插入作为一个组成功或失败。如果您希望各行单独成功或失败,则需要在每次插入后提交。

关于mysql - MySQL TRIGGER 可以单独检查所有 INSERT 值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33586655/

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