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.
| ||||
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: 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.USERNOMBRECREATE 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; Cita: y la segunda DEBE tener por clave el campo referido: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; Cita: Hay que notar que en el primer caso también hay una clave primaria. 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; |
| ||||
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 |
| ||||
![]() Miraste los FAQ's de Mysql??
__________________ Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo) www.programandoweb.com |
| ||||
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. |
| ||||
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: He puesto la almohadilla, he reiniciado y ya me la ha habilitado. 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. |
| ||||
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) |
| ||||
Re: Relacionar dos tablas en mysql Cita: A la próxima lo activaré desde el principio y así me ahorro esto jeje
Iniciado por gnzsoloyo ![]() 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. ![]() |
| ||||
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. |
| |||
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. |