8
votes

Définir la valeur maximale dans une colonne

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.

signifie que cette colonne Shold prend des valeurs de 0 à 50.

Si j'essaie de mettre à jour cela à 51, cela ne devrait pas permettre.

Quelqu'un pourrait-il aider ....!


2 commentaires

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 ...


3 Réponses :


5
votes

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


3 commentaires

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? ;)



3
votes
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.

0 commentaires

2
votes

Vous pouvez utiliser vérifier contrainte: xxx


2 commentaires

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 à ajouter dans les versions futures de tout moteur MySQL DB?