Valores negativos en SQL

Kaos

Buenas! Tengo una duda de SQL que me llevo planteando un tiempo. Teniendo la siguiente sentencia:

UPDATE tabla_ejemplo SET campo=campo-1 WHERE id_tabla_ejemplo=X LIMIT 1

Hay alguna manera de hacer que "campo" nunca sea menor que cero? Es decir, quiero que actualice ese campo restandole 1 pero que en caso de que sea 0, quede en 0 y no en -1.

Sé que es muy fácil si antes extraes el valor y manipulas el resultado con PHP. Pero quiero hacerlo sin tener que sacar antes el valor para ahorrar una consulta.

Los tipos INT, MEDIUMINT y BIGINT cogen tanto positivos como negativos, existe algun tipo de valor que solo pille positivos? igual eso me valdría. O quizas algún extra en la sentencia que lo haga...

En fin gracias por adelantado!

l31m

Prueba con:

UPDATE tabla_ejemplo
BEGIN
IF campo > 0 THEN
SET campo = campo-1;
END IF;
END
WHERE id_tabla_ejemplo=X LIMIT 1;

creo que era así. Si no busca información acerca de las condicionales en MySQL.

P.D: no entiendo lo del LIMIT 1 en un UPDATE... en principio no hace falta ponerlo a no ser que hayan varios registros con id_tabla_ejemplo=X y solo quieras actualizar el primero...

dagavi

Diciendo SQL pues cediéndonos al estándar puedes, desde simplemente evitar que se pueda modificar el valor con comprobaciones (checks, aserciones), o bien tratar los updates con triggers i si al actualizar esa tabla intentan modificar el valor del campo para que sea negativo pues haces lo que quieras. (no modificar, dejarlo a 0...)

erdanblo

Un disparador también, pero depende del motor que estes usando (porque supongo que estas usando MySQL).

edit. Ya lo habia dicho #2 :P

cabron

Veo más fácil añadir otra condición en el where...

UPDATE tabla_ejemplo SET campo=campo-1 WHERE id_tabla_ejemplo=X and campo > 0

bLaKnI

#5, claramente.

Usuarios habituales

  • bLaKnI
  • cabron
  • erdanblo
  • dagavi
  • l31m
  • Kaos