2010-08-05 7 views
3

Question de débutant rapide de MySQL. Quel serait le moyen le plus simple de s'assurer que la valeur minimale d'un champ donné est 0? Fondamentalement, nous avons un script qui s'exécute automatiquement et soustrait une valeur entière de la valeur d'un champ toutes les 15 minutes - mais nous voulons que toute entrée qui passe à 0 reste à 0 et ne devienne pas négative.Définir la valeur minimale du champ MySQL - possible?

Cela pourrait être fait simplement avec une boucle en PHP, mais je suis en train de limiter les appels à la base de données ...

Y at-il un moyen simple de faire soit la valeur minimale pour un champ 0 ou faire donc toute valeur négative mise dans ce champ devient automatiquement 0?

Merci!

+0

il suffit de changer votre requête de mise à jour pour rechercher des valeurs dans le champ spécifié qui sont supérieur à 0 ou, mieux encore, supérieur au montant que vous êtes sur le point de soustraire. – kmfk

+0

Wow. Si simple. J'oublie toujours que vous pouvez utiliser des conditions dans la clause WHERE. Merci beaucoup! – user405056

Répondre

2

Vous pouvez définir l'attribut UNSIGNED pour votre champ. mysql va générer une erreur si vous essayez de mettre ce champ à quelque chose < 0.

+0

Non. Pas d'erreur, juste un avertissement. MySQL continuera heureusement la soustraction. sur un champ int de base non signé, '0 - 1 = 4294967295' –

+0

oui, juste un avertissement, mais la ligne est insérée avec 0 au lieu de la valeur négative. juste testé sur mysql 5.1.41-3ubuntu12.6, int (10) non signé non colonne NULL –

4

Avez-vous essayé un "O WH" conditionnel simple ou le problème est-il plus complexe que cela?

UPDATE mytable SET mycolumn=mycolumn-1 WHERE mycolumn>0 
+0

lol, ce vraiment simple et intelligent: D – Hatim

1

Vous pouvez ajouter la logique à votre script pour ne pas soustraire de la valeur si la valeur est déjà zéro ...

Un déclencheur de mise à jour qui corrige les valeurs négatives, les mettre à zéro est une autre idée.

0

La manière courante de faire ceci serait la contrainte CHECK mais MySQL ne supporte pas cela.

Donc, soit faire la colonne non signé et/ou assurez-vous que dans votre logique de l'application que vous soustrayez la valeur que lorsqu'elle est> 0.

Questions connexes