por que é necessário passar not null se o id é auto_increment?
deste modo nem precisamos passar o valor para ele.
por que é necessário passar not null se o id é auto_increment?
deste modo nem precisamos passar o valor para ele.
O id funciona como primary key, certo? Nesse caso o mesmo não pode ser nulo, ou você não terá como procurar atributos na linha desse id. O auto_increment apenas automatiza o processo de incrementar o id a cada vez que um novo for criado. Ficou claro?
ok, mas como ele é auto increment tem como em algum momento ele ser null ?
Nesse caso o id não pode ser nulo porque o mesmo é a chave primária da sua tabela. Sobre o auto_increment, assim que uma nova linha for adicionada a tabela será dado um valor para o id, e este não pode ser alterado para NULL pela razão já explicada. Ou seja, creio que um campo auto_increment pode até ser null se for alterado, mas não nesse caso.
Fala Luiz!
O auto increment significa que a chave será gerada automaticamente. Isso você já sabe.
O not null significa que o campo não pode ser null. Isso você também já sabe.
O lance é que você pode setar o id de qualquer linha na mão, através de uma instrução sql. Se você fizer isso, não é interessante o campo que identifica unicamente seu registro não exista. Ou seja, você pode trocar o id de um registro da tabela de 1 para 100. Perceba que se não houvesse o not null, nesse caso, você poderia setar para null o id do registro.
Imagine uma tabela
|-----------------------------------|
| pessoa |
|-----------------------------------|
| id (not null, auto increment) |
| nome (varchar(255)) |
|-----------------------------------|
e os inserts
insert into tabela (nome) values ('Manoel');
insert into tabela (nome) values ('Francisco');
insert into tabela (nome) values ('Jose');
insert into tabela (nome) values ('Marcos');
Você pode dar um select em todos os registros, para poder ver os ids
select * from tabela;
Seu retorno seria algo tipo
1 Manoel
2 Francisco
3 Jose
4 Marcos
Aí, você dá um update, alterando o id do Manoel para 100
update tabela set id = 100 where id = 1;
Seu retorno agora seria algo tipo
2 Francisco
3 Jose
4 Marcos
100 Manoel
Perceba que a restrição not null não tem muito a ver com o auto increment, mas ela evita que um registro seja inserido com o id null. Isso fere a primeira forma normal.
Espero ter ajudado.
Abraço.