2011-09-13 4 views
0

Ma compréhension est que MySql ignore CHECK dans la syntaxe CREATE TABLE. Je pensais donc - pourquoi ne pas utiliser des déclencheurs? Par exemple, j'ai un tableau de personnes et un champ est un numéro de téléphone. Est-il possible de construire un déclencheur pour valider que le numéro de téléphone est valide (par exemple l'indicatif régional) et sur l'événement d'un numéro de téléphone invalide pour faire échouer l'insertion avec un message d'erreur approprié?Tables MySql et triggers

Répondre

1

Oui, vous pouvez créer un déclencheur pour valider les valeurs insérées et appeler une procédure inconnue. Par exemple -

CREATE TABLE table1 
    id INT(11) NOT NULL, 
    phone VARCHAR(10) DEFAULT NULL, 
    PRIMARY KEY (id) 
); 

DELIMITER $$ 

CREATE trigger1 
BEFORE INSERT 
ON table1 
FOR EACH ROW 
BEGIN 
    IF NOT NEW.phone REGEXP '^[0-9]{3}-[0-9]{2}-[0-9]{2}$' THEN 
    CALL error; -- Call nonexistent procedure 
    END IF; 
END 
$$ 

DELIMITER ; 
1

Oui c'est possible et solution souvent utilisée. Depuis MySQL 5.5, vous pouvez utiliser SIGNAL pour afficher un message d'erreur. Avant cela, vous devez invoquer une erreur d'une autre manière. J'ai l'habitude d'insérer le message d'erreur dans la table avec l'index UNIQUE, de sorte que cette insertion échoue, et mon message d'erreur est contenu dans le message d'erreur de MySQL.