Para poder suportar um fácil tratamento de tabelas não transacionais todos os campos no MySQL têm valores padrão.
Se você inserir um valor 'errado' em uma coluna como um
NULL
em uma coluna NOT
NULL
ou um valor numérico muito grande em um campo
numérico, o MySQL irá atribuir a coluna o 'melhor valor
possível' em vez de dar uma mensagem de erro. Para strings
este valor é uma string vazia ou a maior string possível que
possa estar na coluna.
Isto significa que se você tentar armazenar
NULL
em uma coluna que não aceita valores
NULL
, o MySQL Server armazenará 0 ou
''
(strig vazia) nela. Este último
comportamento pode, para uma simples inserção de registro,
ser alterado com a opção de compilação
-DDONT_USE_DEFAULT_FIELDS
.) See
Secção 2.3.3, “Opções típicas do configure
”. Isto faz com que as
instruções INSERT
gerem um erro a menos
que você explicite valores específicos para todas as colunas
que exigem um valor diferente de NULL
.
A razão para as regras acima é que não podemos verificar estas condições antes da consulta começar a executar. Se encontrarmos um problema depois de atualizar algumas linahs, não podemos fazer um rollback já que o tipo de tabela não suporta isto. A opção de parar não é tão boa como no caso em que a atualização esteja feita pela metade que é provavelmente o pior cenário possível. Neste caso é melhor 'fazer o possível' e então continuar como se nada tivesse acontecido. No MySQL 5.0 plenejamos melhorar into forncendo avisos para conversões automáticas de campo, mais uma opção para deixar você fazer um rollback das instruções que usam apenas tabelas transacionais no caso de tal instrução fizer uma definição de campo não permitida.
O mostrado acima significa que não se deve usar o MySQL para verificar o conteúdo dos campos, mas deve se fazê-lo por meio da aplicação.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.