gpt4 book ai didi

mysql - 在mysql中插入触发器行为之前

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

我创建了一个表,其中包含一些数据,以及一个如下所示的触发器:

DROP TRIGGER IF EXISTS verifica_cpf;
DELIMITER //
CREATE TRIGGER verifica_cpf
BEFORE INSERT ON `usuario` FOR EACH ROW
BEGIN
IF (SELECT COUNT(*) FROM usuario WHERE cpf = new.cpf) > 1 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'CPF EXISTENTE!';
END IF;
END//
DELIMITER ;

基本上,它在插入之前检查重复的“cpf”值。

假设在我的表中,有一个条目具有以下 cpf 值:873.255.218-12

如果我尝试插入具有相同 cpf 值的另一个条目,触发器将不起作用。但如果我再次插入它,它就会。

我该如何解决这个问题?

最佳答案

您可以通过将 1 更改为 0 来更改此设置:

DROP TRIGGER IF EXISTS verifica_cpf;
DELIMITER //
CREATE TRIGGER verifica_cpf
BEFORE INSERT ON `usuario` FOR EACH ROW
BEGIN
IF (SELECT COUNT(*) FROM usuario WHERE cpf = new.cpf) > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'CPF EXISTENTE!';
END IF;
END//
DELIMITER ;

或者使用更高效的ifexists:

DROP TRIGGER IF EXISTS verifica_cpf;
DELIMITER //
CREATE TRIGGER verifica_cpf
BEFORE INSERT ON `usuario` FOR EACH ROW
BEGIN
IF exists (SELECT 1 FROM usuario WHERE cpf = new.cpf) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'CPF EXISTENTE!';
END IF;
END//
DELIMITER ;

关于mysql - 在mysql中插入触发器行为之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24399006/

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