PDA

Ver la Versión Completa : No logro que funcionen un FOREIGN KEY


orfeo
12-07-2003, 03:17:06
Hola, estoy usando mySQL v4.0.13 para windows, nesecito que las claves foraneas anden, estube lleyedo la DOC y solo es soportado por tablas InnoDB (es asi?)
Me refiero a que no andan en el sentido que no realiza las restricciones que deberia hacer, como ejemplo: libros y editorial

CREATE TABLE libro (
nombre char(10) PRIMARY KEY,
editorial char(10)
REFERENCES editorial (nombre)
ON DELETE cascade
ON UPDATE cascade
#RESTRICT
)TYPE=InnoDB;

CREATE TABLE editorial (
nombre char(10) PRIMARY KEY
)TYPE=InnoDB;


La creacion anda, pero cuando inserto la tupla ('The war','Kapeluz') en LIBRO la inserta sin problemas, sindo que 'kapeluz' no existe en editorial. si coloco ('kapeluz') en EDITORIAL y luego la modifico no actualiza los cambios en libros, ni hablar de los borrados en cascada (no los hace).
Probe tambien la opcion RESTRICT que supongo que es el equivalente a REJECT del SQL-92, porque REJECT falla.

a mysql lo he probado cargar como 'mysqld' y 'mysqld-max' pero no hay cambios.

La conexion la estoy haciendo desde ODBC (SQL Explorer) o desde Mysql Control Center.

Estoy Haciendo Algo mal?

kayetano
16-07-2003, 18:24:36
Hola

¿ Has creado una base de datos para almacenar tablas innodb ?
Busca en el manual de MySQL la creacion de "InnoDB Tablespace" seguramente es por esto. Yo tambien cometí el mismo fallo ;-)

orfeo
16-07-2003, 19:52:58
Gracias por contestar,

El problema es que Mysql no crea indices automaticamente para las FOREIGN KEY, hay que definirle los indices a mano como:



CREATE TABLE trabajo (
idTrabajo int(11) NOT NULL,
Otm char(50) NOT NULL, INDEX idxOtm (OTm(50)),
FOREIGN KEY (Otm) REFERENCES oti(Otm)
ON UPDATE CASCADE
ON DELETE CASCADE,
descripcion char(255),
HoraFinal double,
PrecioHoraFinal double,
PRIMARY KEY (idTrabajo,Otm)
)TYPE=InnoDB;

de esto me di cuenta luego que leer la DOC por 3ra vez y vi el ejemplo que trae. :)