Mira, son varios los errores de tu procedimiento, y en realidad hay una forma muchísimo más simple de hacer lo que quieres.
Por empezar, MySQL tiene dos tipos de variables que se pueden usar para contener valores en un stored procedure, las variables locales de procedimiento y las variables de usuario. Tu estás usando ambas sin saber que son diferentes; esto es: "id" y "@id" son para MySQL variables distintas.
Las variables locales se crean con DECLARE en un procedimiento, funcion o trigger, pero sólo se identifican por su nombre, sin otro atributo o prefijo. Sólo existen durante el procedimiento y mueren cuando este termina.
id es en tu contexto una variable
local.
Por su parte, las variables de usuario no se declaran, se inicializan porque carecen te tipo de dato y valen NULL al inicio, se identifican porque llevan un prefijo "@" al inicio y dependen de la conexión del usuario que las crea. Su valor permanece constante una vez que se termina de usarla y sólo cambia cuando se le hace una nueva asignación de valor. Como dependen de la conexión, cuando esta se cierra o reinicia, mueren. En tu contexto, "@id"
es una variable de usuario.
Tiene que quedarte claro que
@id e
id son variables
distintas.
Así, pues:
- En el SELECT del INSERT...SELECT, cuando usas @id estás comparando en realidad el usario_id con NULL, porque no le has asignado ningún valor a @id.
- Cuando le asignas el LAST_INSERT_ID() a id, no se lo estás poniendo a @id.
- Finalmente, al hacer el UPDATE, nuevamente comparas el id de la tabla con NULL.
De todos modos, nada de esto es necesario, porque si lo que quieres es poner la fecha del día de hoy en el campo fecha_ingreso de la tabla "jugadores", simplemente tendrías que hacer:
Código MySQL:
Ver originalINSERT jugadores
(nombre
, apellido
, ci
, fecha_nacimiento
, usuario
, contrasena
, mail
, fecha_ingreso
) SELECT nombre
, apellido
, ci
, fecha_nacimiento
, username
, contraseña
, mail
, CURDATE()
En este caso no tiene ningún sentido usar el DATE(NOW()), si ya existe una función que devuelve la fecha sin hora, como CURDATE().