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

Relacionar dos tablas en mysql

Estas en el tema de Relacionar dos tablas en mysql en el foro de Mysql en Foros del Web. Hola, ¿qué sintaxis en sql he de poner a la hora de crear una tabla y relacionarla con otra? Típico ejemplo Clientes - Proveedores. Gracias. ...
  #1 (permalink)  
Antiguo 17/12/2007, 07:24
Avatar de JrPHP  
Fecha de Ingreso: diciembre-2007
Mensajes: 24
Antigüedad: 16 años, 4 meses
Puntos: 0
Relacionar dos tablas en mysql

Hola,
¿qué sintaxis en sql he de poner a la hora de crear una tabla y relacionarla con otra? Típico ejemplo Clientes - Proveedores.

Gracias.
Un saludo.
  #2 (permalink)  
Antiguo 17/12/2007, 07:37
Avatar de JrPHP  
Fecha de Ingreso: diciembre-2007
Mensajes: 24
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Relacionar dos tablas en mysql

He encontrado en el manual de MySQL, http://dev.mysql.com/doc/refman/5.0/es/alter-table.html el relacionar las tablas posteriormente a la creación de las mismas, utilizando ALTER TABLE, por ejemplo:
Cita:
ALTER TABLE yourtablename DROP FOREIGN KEY fk_symbol;
Relacionarlas en el mismo momento de la creación aún no lo he averiguado... por ello mi consulta.

Gracias.
Un saludo.
  #3 (permalink)  
Antiguo 17/12/2007, 07:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Re: Relacionar dos tablas en mysql

Bueno, el ejemplo usando DROP FOREIGN KEY es para eliminar la relación establecida entre dos tablas relacioadas, no para crearla.

Para crearla desde el inicio, suponiendo dos tablas:
Cita:
CREATE TABLE `sesiones` (
`IDSESION` int(11) NOT NULL auto_increment,
`INICIO` datetime NOT NULL,
`FINAL` datetime default NULL,
`USERNOMBRE` char(50) NOT NULL,
`IPORIGEN` char(15) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `usuariosbase` (
`USERNOMBRE` char(50) NOT NULL,
`NOMBRE` char(50) NOT NULL,
`PWDUSER` varchar(32) NOT NULL,
`IPORIGEN` char(20) NOT NULL,
`IDGRUPO` int(10) unsigned NOT NULL,
`INICIADO` tinyint(1) unsigned NOT NULL,
`ESTADO` char(1) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Estas dos tablas tienen que relacionarse a través de USERNOMBRE, de modo que de una de ellas se deberá referirse a la otra: SESIONES.USERNOMBRE -> USUARIOSBASE.USERNOMBRE

Cita:
CREATE TABLE `sesiones` (
`IDSESION` int(11) NOT NULL auto_increment,
`INICIO` datetime NOT NULL,
`FINAL` datetime default NULL,
`USERNOMBRE` char(50) NOT NULL,
`IPORIGEN` char(15) NOT NULL,
PRIMARY KEY (`IDSESION`),
KEY `FK_sesiones_USERS` (`USERNOMBRE`),
CONSTRAINT `FK_sesiones_USERS` FOREIGN KEY (`USERNOMBRE`) REFERENCES `usuariosbase` (`USERNOMBRE`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
y la segunda DEBE tener por clave el campo referido:

Cita:
CREATE TABLE .`usuariosbase` (
`USERNOMBRE` char(50) NOT NULL,
`NOMBRE` char(50) NOT NULL,
`PWDUSER` varchar(32) NOT NULL,
`IPORIGEN` char(20) NOT NULL,
`IDGRUPO` int(10) unsigned NOT NULL,
`INICIADO` tinyint(1) unsigned NOT NULL,
`ESTADO` char(1) NOT NULL default 'A',
`BARCOLOR` smallint(5) unsigned NOT NULL default '3',
`BARFONT` smallint(5) unsigned NOT NULL default '1',
`FONBARCOLOR` smallint(5) unsigned NOT NULL default '0',
`PANTCOLOR` smallint(5) unsigned NOT NULL default '3',
PRIMARY KEY (`USERNOMBRE`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Hay que notar que en el primer caso también hay una clave primaria.
  #4 (permalink)  
Antiguo 17/12/2007, 09:36
Avatar de JrPHP  
Fecha de Ingreso: diciembre-2007
Mensajes: 24
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Relacionar dos tablas en mysql

He creado las tablas en una bbdd de prueba para ver como actúan y me ha salido este error:

#1289 - The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have it working

¿Qué debo hacer para habilitar el 'InnoDB'?

¡Ah! utilizo AppServ 2.5.9

Apache 2.2.4
PHP 5.2.3
MySQL 5.0.45
phpMyAdmin-2.10.2

Última edición por JrPHP; 17/12/2007 a las 09:53
  #5 (permalink)  
Antiguo 17/12/2007, 10:17
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
De acuerdo Re: Relacionar dos tablas en mysql

Miraste los FAQ's de Mysql??
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #6 (permalink)  
Antiguo 17/12/2007, 10:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Re: Relacionar dos tablas en mysql

El server de MySQL no tiene instalado InnoDB. Para instalarlo tienes que reiniicar la instalcia de MySQL.
Cuando instalaste AppServ en una de las fases se abrió la ventana de configuración de instancia de MySQL. (http://www.appservnetwork.com/module...howpage&pid=22) que te muestra, por ejemplo eso:

En esa ventana tienes que marcar lo que dice Enable InnoDB.
  #7 (permalink)  
Antiguo 17/12/2007, 10:33
Avatar de JrPHP  
Fecha de Ingreso: diciembre-2007
Mensajes: 24
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Relacionar dos tablas en mysql

He encontrado esta página http://www.antesde.org/index.php/Antes_de_habilitar_tablas_INNODB_en_MySql donde dice:

Cita:
La primera es modificando el archivo: my.ini
Este archivo se suele encontrar en AppServ/MySQL
localiza el archivo y busca en el: skip_innodb, le debes agregar al principio el signo "#".

La otra posibilidad es habilitar las innoDB desde el phpMyAdmin
Primero accedes a tu panel de control
Si el servidor es tu propio pc, accede a: http://localhost/phpMyAdmin/
si el servidor es remoto debes sustituir localhost por la IP o dominio asociado al servidor.
Una vez hayas accedido con tu usario y clave, debes ir a la opción Motores, o Motores de almacenamiento. Aquí hay una opción que indica:
InnoDB Supports transactions, row-level locking, and foreign keys.
He puesto la almohadilla, he reiniciado y ya me la ha habilitado.
  #8 (permalink)  
Antiguo 17/12/2007, 10:35
Avatar de JrPHP  
Fecha de Ingreso: diciembre-2007
Mensajes: 24
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Relacionar dos tablas en mysql

No había mirado FAQ's de MySQL...

Ahora me da otro error:
Código:
CREATE TABLE `sesiones` (

`IDSESION` int( 11 ) NOT NULL AUTO_INCREMENT ,
`INICIO` datetime NOT NULL ,
`FINAL` datetime default NULL ,
`USERNOMBRE` char( 50 ) NOT NULL ,
`IPORIGEN` char( 15 ) NOT NULL ,
PRIMARY KEY ( `IDSESION` ) ,
KEY `FK_sesiones_USERS` ( `USERNOMBRE` ) ,
CONSTRAINT `FK_sesiones_USERS` FOREIGN KEY ( `USERNOMBRE` ) REFERENCES `usuariosbase` ( `USERNOMBRE` ) 
) ENGINE = InnoDB DEFAULT CHARSET = latin1;


MySQL ha dicho:  

#1005 - Can't create table '.\ejemplo\sesiones.frm' (errno: 150)
  #9 (permalink)  
Antiguo 17/12/2007, 10:48
Avatar de JrPHP  
Fecha de Ingreso: diciembre-2007
Mensajes: 24
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Relacionar dos tablas en mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
El server de MySQL no tiene instalado InnoDB. Para instalarlo tienes que reiniicar la instalcia de MySQL.
Cuando instalaste AppServ en una de las fases se abrió la ventana de configuración de instancia de MySQL. (http://www.appservnetwork.com/modules.php?name=Content&pa=showpage&pid=22) que te muestra, por ejemplo eso:
...
En esa ventana tienes que marcar lo que dice Enable InnoDB.
A la próxima lo activaré desde el principio y así me ahorro esto jeje
  #10 (permalink)  
Antiguo 17/12/2007, 10:55
Avatar de JrPHP  
Fecha de Ingreso: diciembre-2007
Mensajes: 24
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Relacionar dos tablas en mysql

Vaya, que torpe que soy , simplemente hay que crear antes la tabla usuariosbase y después sesiones...
  #11 (permalink)  
Antiguo 17/12/2007, 11:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Re: Relacionar dos tablas en mysql

Me olvidé decirte eso. Las tablas que denominamos primarias, es decir las referidas, SIEMPRE se tienen que crear primero. De lo contrario las tienes que hacer sin las claves y luego usar ALTER TABLE TABLA1 ADD CAMPOCLAVE PRIMARY KEY y ALTER TABLE TABLA1 ADD FOREIGN KEY(CAMPO) REFERENCES TABLA(CAMPO).
Par acualquier duda, consultar manual de referencia.
  #12 (permalink)  
Antiguo 17/12/2007, 12:19
Avatar de JrPHP  
Fecha de Ingreso: diciembre-2007
Mensajes: 24
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Relacionar dos tablas en mysql

Muchas gracias por todo gnzsoloyo
  #13 (permalink)  
Antiguo 12/04/2008, 12:36
 
Fecha de Ingreso: mayo-2003
Ubicación: Tauranga, NZ.
Mensajes: 89
Antigüedad: 20 años, 11 meses
Puntos: 0
Re: Relacionar dos tablas en mysql

ya tengo todas las tablas creadas y con algunos datos de prueba....puedo relacionarlas ahora o tengo q volver a crearlas?
saludos.
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 23:19.