Código sql:
Ver originalINSERT INTO categorias VALUES('',0,'cat1');
En primer lugar, por una cuestión práctica, y a pesar de que te lleve un poco más de codificación, siempre es bueno especificar los campos que se van a ingresar cuando no vas a poner datos en uno de ellos, como es enl caso de los ID auto_increment.
Código sql:
Ver originalINSERT INTO categorias(padre, categoria) VALUES(0,'cat1');
Ganas en eficiencia de código, ayudas al parser y evitas errores de interpretación en la lectura cuando tienes que revisar las sentencias...
Yendo a tu problema, tu sentencia de creación tiene un problema: le estás dejando al motor de MySQL que determine si el campo ´padre´puede ser NULL o NOT NULL, con lo cual si el NOT NULL es el default (
y ese es el valor por default de una instalación de MySQL), te encuentras en un problema: Se vuelve circular.
Para poder cargar un registro deben existir IDS en la tabla sobre qué comparar el contenido de `padre`, pero no puedes poner un registro con un ID nuevo sin poner un valor que ya exista entre los ID en `padre`.
¿Se entiende la circularidad?
El tema aquí es que la relación debe establecerse preferentemente en otra tabla, porque si bien la relación es 1:N, la restricción de FK te impedirá poner registros, a menos que declares el campo como NULL. En ese caso podrás ingresar categorías sin padre, que serán los primeros niveles.
¿Se va entendiendo?