Problema con query que inserta en dos tablas

Foro sobre el popular gestor de base de datos MySQL.

Problema con query que inserta en dos tablas

Notapor krisandres » Vie Ene 19, 2007 7:36 am

Hola!! bueno igual es la pregunta un poco tonteria pero no consigo averiguar la respuesta...
En mi base de datos (de mysql ) tengo para la autenticacion dos tablas : La tabla usuario con el login, contraseña, nombre... etc y la tabla roles que tiene los campos Login ( referencia al de la tabla usuario ) y el atributo rol ( por defecto en la base de datos lo he puesto como usuario )
Me gustaría conocer el query que me permite insertar una fila en ambas tablas, es decir :
INSERT INTO registrado (Login, Password, Nombre...) VALUES (?,?,?...).....¿?¿?
jajja bueno no se... he buscado y encontre este pero sigue sin funcionarme :
INSERT INTO roles (Login,Rol) VALUES SELECT registrado.Login
y luego el usuario que está por defecto no se si no hay que poner nada.... o que, bueno muchisimas gracias de antemano.
krisandres
Novato
Novato
 
Mensajes: 4
Registrado: Vie Ene 19, 2007 7:34 am


Re: Problema con query que inserta en dos tablas

Notapor latindev » Vie Ene 19, 2007 10:06 am

Hola,

Me parece que no es posible realizar una insercion en dos tablas con un solo comando INSERT.

Tienes dos opciones:

1. Ejecutar dos consultas INSERT
Código: Seleccionar todo
  1.  

  2. create table tmp_usuarios

  3. (

  4.    nick varchar(10) not null primary key ,

  5.    pass varchar(32),

  6.    name varchar(40)

  7. );

  8.  

  9. create table tmp_roles

  10. (

  11.    nick varchar(10) not null,

  12.    rol varchar(32)

  13. );

  14.  

  15. -- Dos consultas insert para insertar el mismo usuario

  16. insert into tmp_usuarios (nick,pass,name) values ('usr1','xxx','usuario1');

  17. insert into tmp_roles (nick,rol) values ('usr1','rol_usr1');

  18.  




2. Utilizar triggers (MySQL 5.0 o superior)

Código: Seleccionar todo
  1. alter table tmp_usuarios engine =innodb;

  2. alter table tmp_roles engine =innodb;

  3.  

  4. DELIMITER ;;

  5.  

  6. CREATE TRIGGER usuarios_ai

  7.   AFTER INSERT ON tmp_usuarios FOR EACH ROW BEGIN

  8.         insert into tmp_roles (nick,rol) values (NEW.nick, 'pero de donde obtendras el rol?');

  9. END ;;

  10.  

  11. DELIMITER ;



Cualquier duda, solo tienes que postear.

Saludos.
Imagen
Avatar de Usuario
latindev
Administrador
Administrador
 
Mensajes: 1062
Registrado: Lun Jun 02, 2003 8:30 pm
Ubicación: Peru


Notapor krisandres » Lun Ene 22, 2007 4:29 am

Hola! muchas gracias por tus respuestas!! al final conseguí solucionar mi problema organizando un poco el código y haciendo dos sentencias por separado!!. (pensé que por las características de mi código no iba a funcionar, pero si!!!!)
Y bueno, ahora tengo otra duda que quiero que cuando un registrado se dé de baja en la base de datos en vez de borrar los datos que almacenó cambie el Login para que no pueda volver a usarlo.
El query que había pensado es
"UPDATE from registrado SET Login=nuevoLogin where Login = ?";
donde nuevoLogin es ***valorDelLoginAntiguo***
Es decir, si mi Login fuera Kris, al darme de baja que quedara codificado como ***Kris***
Alguien puede ayudarme??? muchisimas gracias!!!!!!!!!
krisandres
Novato
Novato
 
Mensajes: 4
Registrado: Vie Ene 19, 2007 7:34 am

Notapor latindev » Lun Ene 22, 2007 12:35 pm

Creo que en esos casos es mejor utilizar un campo adicional que podría tener el nombre de "habilitado" (1 para habilitado y 0 para deshabilitado), de tal manera que puedas hacer una consulta siguiente:

UPDATE registrado SET habilitado = 0;

Y cuando algun usuario quiera loguearse solo tienes que aumentar la clausula AND habilitado = 1.

Saludos
Imagen
Avatar de Usuario
latindev
Administrador
Administrador
 
Mensajes: 1062
Registrado: Lun Jun 02, 2003 8:30 pm
Ubicación: Peru

Notapor krisandres » Lun Ene 22, 2007 1:44 pm

Hola!! gracias por contestar otra vez!!!
Había pensado ya en esa idea que me has propuesto pero es que para la autenticacion no realizo ninguna cláusula sql ya que lo ago con el jdbcRealm ( bueno todavia no lo hace del todo pero estoy en ello, jeje) y solo basta con configurar unas cosas en el server.xml del apache tomcat y en el web.xml de la aplicación para mostrar los roles que puede haber y las restricciones que tendrá cada usuario según el rol que tenga...
No habría otra manera?? muchisimas gracias igualmente!!!
krisandres
Novato
Novato
 
Mensajes: 4
Registrado: Vie Ene 19, 2007 7:34 am

Sencencia SQL

Notapor latindev » Lun Ene 22, 2007 5:17 pm

La sentencia para cambiar de nombre sería asi:

UPDATE registrado SET Login= concat('***',Login,'***') where Login = 'Kris';
Imagen
Avatar de Usuario
latindev
Administrador
Administrador
 
Mensajes: 1062
Registrado: Lun Jun 02, 2003 8:30 pm
Ubicación: Peru

Notapor krisandres » Mar Ene 23, 2007 5:40 am

Hola!!! muchisimas gracias!! lo he probado directamente con el mysql y funciona perfectamente asi que con el código me imagino que también. Mil gracias porque la verdad me has ahorrado mucho trabajo sin el atributo que tenía por último recurso!! jaja
Muchas gracias de verdad!!!
krisandres
Novato
Novato
 
Mensajes: 4
Registrado: Vie Ene 19, 2007 7:34 am


    

Volver a MySQL

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados