Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


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 el 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 latindeveloper el Vie Ene 19, 2007 10:05 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
create table tmp_usuarios
(
   nick varchar(10) not null primary key ,
   pass varchar(32),
   name varchar(40)
);

create table tmp_roles
(
   nick varchar(10) not null,
   rol varchar(32)
);

-- Dos consultas insert para insertar el mismo usuario
insert into tmp_usuarios (nick,pass,name) values ('usr1','xxx','usuario1');
insert into tmp_roles (nick,rol) values ('usr1','rol_usr1');



2. Utilizar triggers (MySQL 5.0 o superior)

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

DELIMITER ;;

CREATE TRIGGER usuarios_ai
  AFTER INSERT ON tmp_usuarios FOR EACH ROW BEGIN
   insert into tmp_roles (nick,rol) values (NEW.nick, 'pero de donde obtendras el rol?');
END ;;

DELIMITER ;


Cualquier duda, solo tienes que postear.

Saludos.
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

Notapor krisandres el 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 latindeveloper el Lun Ene 22, 2007 12:34 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
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

Notapor krisandres el 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 latindeveloper el 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
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

Notapor krisandres el 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