J'ai une table avec une colonne (Type Int) appelée Âge. Cette colonne doit contenir la valeur MaxImun 50. S'il dépasse alors, il ne devrait pas mettre à jour cette ligne. P>
signifie que cette colonne Shold prend des valeurs de 0 à 50. P>
Si j'essaie de mettre à jour cela à 51, cela ne devrait pas permettre. p>
Quelqu'un pourrait-il aider ....! P>
3 Réponses :
Essayez ceci:
CREATE TRIGGER check_trigger
BEFORE INSERT
ON table
FOR EACH ROW
BEGIN
IF NEW.age<0 OR NEW.age>50 THEN
CALL `Error: Wrong values for age`; -- this trick will throw an error
END IF;
END
Pour @gnanendra: @nick frulez définit l'âge à NULL si l'utilisateur insère quelque chose de mal; Mon exemple soulève une erreur. Utilisez ce que vous pensez est le meilleur pour votre situation !!
@Gnanendra: Jetez un coup d'œil à cet article intéressant forge.mysql.com/wiki/triggers#emulation_check_constroutes
@Gnanendra: Qu'en est-il d'accepter une réponse parmi celles qui vous sont données? ;)
create table test ( age tinyint not null ) engine = myisam; delimiter // drop trigger if exists max_num// create trigger max_num before insert on test for each row begin if new.age < 0 or new.age > 50 then set new.age = null; end if; end// delimiter ; insert into test (age) values (100); Make the same thing for update.
Vous pouvez utiliser vérifier code> contrainte:
Pire encore, MySQL vous permet de créer une table à l'aide de cette définition, mais la contrainte est ignorée par l'analyseur et non ajouté dans la table!
Est-ce que quelqu'un sait s'il existe des plans de la contrainte code> code> à ajouter dans les versions futures de tout moteur MySQL DB?
Pourquoi utilisez-vous un type de données incorrect alors? Enum est ce dont vous avez besoin, pas int.
Je pense qu'un déclencheur est la bonne façon pour vous ...