Hola gonzacrus:
Te recuerdo que este es un foro de MySQL, no de PHP, son cosas completamente distintas, aunque muchas personas suelen relacionarlos, aun no sé muy bien por qué... Para preguntas sobre PHP, tienes que publicarlas en el foro correspondiente:
http://www.forosdelweb.com/f18/
Ahora bien, en cuanto a la primer pregunta y hablando estrictamente de Base de datos, un campo puede quedar vacío
SI Y SOLO SI EN LA TABLA NO ESTÁ DECLARADO COMO NOT NULL... checa este ejemplo
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.07 sec)
Observa que el campo SEGUNDO_APELLIDO no está marcado como not null, por lo tanto puede asignarse como vacio:
Código MySQL:
Ver original -> (NULL, 'LUIS', 'PEREZ', 'GARCIA'); Query OK, 2 rows affected (0.02 sec)
+----+----------+-----------------+------------------+
| id | nombre | primer_apellido | segundo_apellido |
+----+----------+-----------------+------------------+
| 1 | LEONARDO
| CORCEGA
| NULL | | 2 | LUIS | PEREZ | GARCIA |
+----+----------+-----------------+------------------+
El campo ID es un campo especial, ya que está marcado como auto-incremental, pero ese sería tema de otro post... volviendo al campo segundo apellido, en realidad podrías omitirlo del insert sin ningún problema:
Código MySQL:
Ver original -> ('FERNANDO', 'HERNANDEZ');
Query OK, 1 row affected (0.06 sec)
+----+----------+-----------------+------------------+
| id | nombre | primer_apellido | segundo_apellido |
+----+----------+-----------------+------------------+
| 1 | LEONARDO
| CORCEGA
| NULL | | 2 | LUIS | PEREZ | GARCIA |
| 3 | FERNANDO
| HERNANDEZ
| NULL | +----+----------+-----------------+------------------+
Sin embargo, el campo PRIMER_APELLIDO no puede quedar como vacio:
Espero que esto te sirva para aclarar un poco el panorama.
Saludos
Leo