Eu havia criado uma tabela há algum tempo e comecei a adicionar dados a ela. Recentemente, adicionei uma nova coluna ( address
) a ela NOT NULL
como parte da nova coluna. As linhas antigas (pré-adição) ainda são nulas, o que criou um aviso como parte da definição. No entanto, novas linhas com a nova coluna ainda estão sendo permitidas para inserir nulos.
A pré-adição da nova coluna é nula a fonte deles sendo permitida? Se sim, existe uma maneira de dizer ao MySQL para não permitir, mesmo que fosse 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>
Respostas:
Que versão do mysql é essa?
Em que modo você está executando?
(Isso deve ser executado no contexto do seu aplicativo, caso ele esteja sendo alterado).
O MySQL está documentado assim: http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html
Meu próprio teste falha ao duplicar seu problema
O fato de os dados antigos terem nulos não deveria importar. A tabela Alter deve ter 'truncado' os nulos em cadeias vazias
fonte