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

时间:2014-06-25 01:53:03

标签: mysql triggers

我创建了一个包含一些数据的表,以及一个这样的触发器:

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 :(得分: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 ;