Creé una tabla hace un tiempo y comencé a agregarle datos. Recientemente le agregué una nueva columna ( address
) NOT NULL
como parte de la nueva columna. Las filas antiguas (preadición) siguen siendo nulas, lo que creó una advertencia como parte de la definición. Sin embargo, a las nuevas filas con la nueva columna todavía se les permite insertar valores nulos.
¿La nulidad previa de la nueva columna es la fuente de las permitidas? Si es así, ¿hay alguna manera de decirle a MySQL que no lo permita, aunque era antes?
mysql> show create table my_table\G
*************************** 1. row ***************************
Table: my_table
Create Table: CREATE TABLE `my_table` (
`entry_id` int(11) NOT NULL auto_increment,
`address` varchar(512) NOT NULL,
`follow_up_to` int(11) default NULL,
PRIMARY KEY (`entry_id`),
KEY `follow_up_to` (`follow_up_to`),
CONSTRAINT `my_table_ibfk_1`
FOREIGN KEY (`follow_up_to`)
REFERENCES `my_table` (`entry_id`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=535 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql>
Respuestas:
¿Qué versión de mysql es esta?
¿En qué modo estás corriendo?
(Esto debe ejecutarse en el contexto de su aplicación, en caso de que la esté cambiando).
MySQL se documenta así: http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html
Mis propias pruebas no pueden duplicar su problema
El hecho de que los datos antiguos tuvieran nulos no debería importar. La tabla Alter debería haber 'truncado' los nulos en cadenas vacías
fuente