Esta tabela MySQL me deixou perplexo por um momento:
mysql> desc quux;
+---------------------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------------+-----------------------+------+-----+---------+----------------+
| foobar | int(11) | NO | | NULL | |
(...)
mysql> show create table quux;
(...)
`foobar` int(11) NOT NULL,
(...)
Como o foobar
campo nunca foi criado com uma cláusula DEFAULT, ele é automaticamente atribuído a DEFAULT NULL. No entanto, à primeira vista, isso parece contradizer o fato de que também foi definido como NOT NULL.
Então percebi que esse esquema visa forçar a inserção de um valor (e não NULL) foobar
ao adicionar um novo registro.
Essa é uma maneira aceitável de fazer isso ou há maneiras melhores?
Isso é perfeitamente aceitável, basicamente afirma:
Se você definir um valor padrão, afirma que esse é um valor sensato para qualquer linha que não forneça um valor - o que não é realmente viável para a maioria dos atributos.
Pense em uma coluna chamada
first_name
- você deseja garantir que um valor seja fornecido, mas não há como encontrar um valor padrão sensato para isso. Ou uma coluna nomeadasalary
em uma tabela de funcionários.