Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Guardar un registro en 2 tablas? como?

Estas en el tema de Guardar un registro en 2 tablas? como? en el foro de Mysql en Foros del Web. en mi sistema hay 2 tablas datosusuario y datosadicionalesusuario. los id de ambas tablas deben ser iguales registro con id1 en primera tabla debe ser ...
  #1 (permalink)  
Antiguo 28/08/2012, 11:07
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Guardar un registro en 2 tablas? como?

en mi sistema hay 2 tablas
datosusuario y datosadicionalesusuario.

los id de ambas tablas deben ser iguales
registro con id1 en primera tabla debe ser igual al id del registro1 en la segunda tabla
osea en vez de usar una tabla para no tener tantos campos la dividi en 2
pues todo bien
hasta que me dijeron que querian unir las bases de datos
aparte de la union de las bases de datos debo preocuparme por que el registro de los datos mediante el sistema no cree conflictos.
es decir
yo agregaba los datos de la siguiente manera


insert into en la tabla datosusuarios(el id de esta es autoincrement, por lo que no le envio valor)

despues para insertar en la prestamo hacia esto:

sqlmax= select max(id) from datosusuario;
dim id=sqlmax(lo que me regrese)

inser into datosadicionalesusuario((aqui inserto los valores y la variable id, ya que este no es autoincrement y quiero que sea el mismo que agregue en la otra pues debe tener relacion)

el problema es cuando mas de 10 maquinas o 20 hagan la misma operación simultáneamente
lo del autoincrement de la primera tabla no creo que haya problem pero la segunda tabla va a ver problema cuando se seleccione el maximo id
por que que tal si la quinta maquina inserto el quinto registro y la sexta maquina esta insertando los valores ya, entonces la quinta maquina seleccionara el maximo id y eligira el 6 que ya no corresponde a ella si no a la maquina 6 e insertara a la segunda tabla con el maximo id 6 en vez de 5.

puede ocurrir eso?
puede jhaber alguna inconsistencia en cuanto al diseño?
me conviene mejor unir las tablas???

Última edición por minombreesmm; 28/08/2012 a las 11:20
  #2 (permalink)  
Antiguo 28/08/2012, 22:39
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Guardar un registro en 2 tablas? como?

mas que unir las tablas no uses max() para buscar el ultimo id insertado sino tendras problemas (muchos si es multiusuario) utiliza la funcion LAST_INSERT_ID() que debuelve el ultimo autoincrement insertado por esa conexion a la bd en particular y puedes seguir usando tu estructura actual cambiando eso, saludos.
http://mysql.conclase.net/curso/?sqlfun=LAST_INSERT_ID
fijate si te sirve saludos.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #3 (permalink)  
Antiguo 28/08/2012, 23:09
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Respuesta: Guardar un registro en 2 tablas? como?

Cita:
Iniciado por NSD Ver Mensaje
mas que unir las tablas no uses max() para buscar el ultimo id insertado sino tendras problemas (muchos si es multiusuario) utiliza la funcion LAST_INSERT_ID() que debuelve el ultimo autoincrement insertado por esa conexion a la bd en particular y puedes seguir usando tu estructura actual cambiando eso, saludos.
[url]http://mysql.conclase.net/curso/?sqlfun=LAST_INSERT_ID[/url]
fijate si te sirve saludos.
jaja lamentablemente ya cree una serie de consultas para cambiar la estructura automaticamente jejes XD pero gracias lo tendre en cuenta para otras cosas XD
como para mi pagina XD ya que uso el max(id) pero no estaba pensando en cuarta dimension.
por eso pero bueno :d
se me hizo mas practico en este caso unir mejor las tablas, para que no haya conflicto

y como voy a fusionar las bases de datos tenia que unir las 2 tablas para que sea mas facil

es que tengo que unir como 20 bases de datos
la informacion todas tienen el key desde 1.
ya solucione ese problema para insertar con una sola consulta sql.
pero necesito hacer que un campo sea unique.
el campo nombre. ya que no quiero que se repita a la hora de insertar.
como seria eso?
intente algo asi
insert into..... where base1.tabla.nombre!=base2.tabla.Nombre

pero nada.
bueno y cuando quiero crear un indice directamente en el mysql browser, no me lo permite
  #4 (permalink)  
Antiguo 29/08/2012, 10:58
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Guardar un registro en 2 tablas? como?

pues el indice si hay campos repedidos no te lo va a tomar es logico.

lo que tendrias que hacer ahi es primero meter todos tus campos, es decir fucionar de forma completa todas las tablas de todas las bases y luego, recorrer con (PHP si usas PHP) toda la tabla campo a campo y ver si se repite alguno hacer lo que corresponda (renombrar, eliminar etc) luego si, creas el indice unique.

si lo que quieres hacer es no insertar en la fucion los campos con el mismo nombre repetido puedes usar la consulta como la planteaste tu o bien si no te anda prueba asi:

Código MySQL:
Ver original
  1. INSERT INTO tu_tabla_nueva (SELECT ..... WHERE base1.tabla.nombre!=base2.tabla.Nombre)

tendras que usar alias en el select para que los campos tengan el mismo nombre que donde los vas a insertar y esten en el mismo orden.

igualmente como es una reforma particular (no es algo que aras todos los dias me imagino) te recomendaria la primer opcion, que te armes un escript php donde hagas todo lo de recorrer las dos tablas y evaluarlas y luego insertarlas en la nueva.

si bien puede ser un poco ineficiente no importa porque solo lo ejecutaras esta vez para solucionar el problema y nada mas.

cualquier cosa me avisas si se te complica saludos
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #5 (permalink)  
Antiguo 29/08/2012, 11:06
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Respuesta: Guardar un registro en 2 tablas? como?

Cita:
Iniciado por NSD Ver Mensaje
pues el indice si hay campos repedidos no te lo va a tomar es logico.

lo que tendrias que hacer ahi es primero meter todos tus campos, es decir fucionar de forma completa todas las tablas de todas las bases y luego, recorrer con (PHP si usas PHP) toda la tabla campo a campo y ver si se repite alguno hacer lo que corresponda (renombrar, eliminar etc) luego si, creas el indice unique.

si lo que quieres hacer es no insertar en la fucion los campos con el mismo nombre repetido puedes usar la consulta como la planteaste tu o bien si no te anda prueba asi:

Código MySQL:
Ver original
  1. INSERT INTO tu_tabla_nueva (SELECT ..... WHERE base1.tabla.nombre!=base2.tabla.Nombre)

tendras que usar alias en el select para que los campos tengan el mismo nombre que donde los vas a insertar y esten en el mismo orden.

igualmente como es una reforma particular (no es algo que aras todos los dias me imagino) te recomendaria la primer opcion, que te armes un escript php donde hagas todo lo de recorrer las dos tablas y evaluarlas y luego insertarlas en la nueva.

si bien puede ser un poco ineficiente no importa porque solo lo ejecutaras esta vez para solucionar el problema y nada mas.

cualquier cosa me avisas si se te complica saludos
muchas gracias jejes,
hice una sentencia donde me listara todos los campos de la otra tabla excepto uno, aunque no era necesario, pues lo hubiera borrado manualmente
despues hice una sentencia sql que me agrego los campos a la tabla.
hice otra sentencia sql que me inserto los datos de la tabla en la otra pero sin el primary key.
y todo funciono bien :D
solo 3 lineas sql. XD
en otro tema que trata de este mismo tema puse el codigo por si a alguien le interesa

Etiquetas: inconsistencia, registros, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:30.