2012-05-08 11 views
5

Estoy intentando limitar el número de números que un campo entero puede contener. Por ejemplo, quiero que el campo contenga un número no mayor de 5, por lo que 99999 sería la entrada válida más alta.Limitar longitudes de campo de tipo de datos enteros

¿Esto es posible en MySQL? He revisado la documentación pero no he encontrado mi respuesta.

Respuesta

3

Desafortunadamente ni la restricción CHECK ni los tipos definidos por el usuario se implementan en MySQL. Tal vez esto cambie en futuras versiones.

Hasta entonces se puede utilizar un disparador para corregir la entrada si que es un camino a seguir para usted:

delimiter // 
CREATE TRIGGER trigger_check BEFORE INSERT ON your_table 
FOR EACH ROW 
BEGIN 
    IF NEW.NUM > 99999 THEN 
     SET NEW.NUM = 0; 
    END IF; 
END 
// 
+1

En aras de la exhaustividad, también se puede utilizar una clave externa a una tabla de enteros que termina en 99999. –

0

Esto no se puede hacer en un nivel DB. Tendrá que usar procedimientos almacenados o poner esa lógica en su aplicación.

http://dev.mysql.com/doc/refman/5.5/en/integer-types.html

Un int medio es el más cercano que puede obtener.

Además, es probable que vea algo como esto en algún momento:

CREATE TABLE blah (col INT (5)); 

Esto no hace lo que le parece sin embargo. Esto en realidad no limita la longitud del campo a 5 lugares. Significa que debe completarse 0 en 5 lugares cuando se configura zerofill en la columna.

1

Puede agregar un desencadenador para aplicar esto siempre que se realice un cambio en la base de datos. El disparador se ejecutará antes de que se aplique el cambio para verificar que se está actualizando con una entrada "válida". Si la entrada no es válida, la actualización puede ser rechazada.

Cuestiones relacionadas