Cita: #1048 - Column 'id' cannot be null
Eso se puede dar en el contexto de ese SP si y sólo si la tabla está vacía. Cuando ya existe al menos un registro eso no se puede dar, si se usa:
Código SQL:
Ver originalSELECT MAX(id) FROM Usuarios INTO numusuario;
Para resolverlo no hay que haer lo que hiciste, porque se genera una duplicidad de datos. Lo que corresponde es verificar si la variable se volvió nula...
Código MySQL:
Ver original -- Controlando que sea nulo, y por tanto la tabla este vacia.
INSERT INTO Usuarios
(id
, nombre
, apellido
, edad
, genero
, ciudad
, estado
, pais
) VALUES(numUsuario
, nombrex
, apellidox
, edadx
, generox
, ciudadx
, estadox
, paisx
); apellido = apellidox,
edad = edadx,
genero = generox,
ciudad = ciudadx,
estado = estadox,
pais = paisx
Para que se entienda: NULL no es un valor, es un estado. Pero toda operación de suma, multiplicación, división, resta, o concatenación de cualquier valor con NULL, da... NULL.
Entre esas situaciones está que MAX(), MIN(), AVG(), aplicado sobre una tabla sin registros, o una consulta que no devuelve registros, da pro resultado NULL.
Además, el hecho de que inicialices una variable con un valor por default, no implica que el valor se conserve si (como en este caso), le terminas asignando un resutlado NULL. En ese caso prevalece el NULL, y por eso se rompe todo.
La solución es sencilla: Debes controlar toda posibilidad de que se presente el NULL y no hacer operaciones con valores así.
Nota final: Como NULL no es un dato, tampoco se pueden usar operadores lógicos con el, sólo se puede verificar si es o no nulo. Por eso en ciertas ocasiones puede ser conveniente usar IF EXISTS, IS NULL o IS NOT NULL, para validar el resultado de consultas y subconsultas.