我创建了一个包含一些数据的表,以及一个这样的触发器:
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值的另一个条目,则触发器将不起作用。但如果我再插入它,它会。
我该如何解决这个问题?
答案 0 :(得分:0)
您可以将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 ;
或者使用效率更高的if exists
:
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 ;