Ver Mensaje Individual
  #9 (permalink)  
Antiguo 10/03/2012, 04:47
sergiolpm
 
Fecha de Ingreso: marzo-2012
Mensajes: 16
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Problema con claves foráneas

Gracias, lo que me dijisteis me funciono, ahora, como no, vuelve otro problemas con claves foráneas al querer modificar los ejemplares. tengo entendido que si modifico un dato de una tabla que este relacionado con una clave foránea, se actualizan ambas tablas al estar con UPDATE CASCADE, pero pare que esto no lo hace. codigo:

$editorial="CREATE TABLE editoriales(
nom_editorial varchar(40),
localizacion varchar(70),
dni_comercial varchar(11),
constraint pkeditorial primary key(nom_editorial),
constraint fkcomercial foreign key(dni_comercial) references comerciales(dni_comercial) on delete cascade on update cascade);";
mysql_query($editorial,$link) or die(mysql_error());


//tabla libros
$libro="CREATE TABLE libros(
isbn varchar(17),
titulo varchar(50),
autor varchar(40),
tema varchar(40),
cdu varchar(20),
nom_editorial varchar(40),
constraint primary key(isbn),
constraint fknombreditorial foreign key(nom_editorial) references editoriales(nom_editorial) on delete cascade on update cascade);";

mysql_query($libro,$link) or die(mysql_error());

$ejemplar="CREATE TABLE ejemplares(
isbn varchar(17),
ejemplar varchar(3),
titulo varchar(50),
autor varchar(40),
tema varchar(40),
cdu varchar(20),
nom_editorial varchar(40),
pasillo varchar(1),
estanteria varchar(2),
constraint primary key(isbn,ejemplar),
constraint foreign key(isbn) references libros(isbn) on delete cascade on update cascade,
constraint foreign key(pasillo,estanteria) references ubicacion(pasillo,estanteria) on delete cascade on update cascade);";
mysql_query($ejemplar,$link) or die(mysql_error());

en otra pagina php tengo este codigo, los $_REQUEST los saco de una pagina con los datos nuevos que quiero introducir que me mandan aqui:


$isbn=$_REQUEST[isbn];
$ejemplar=$_REQUEST[ejemplar];
$titulo=$_REQUEST[titulo];
$tema=$_REQUEST[tema];
$autor=$_REQUEST[autor];
$cdu=$_REQUEST[cdu];
$editorial=$_REQUEST[editorial];
$pasillo=$_REQUEST[pasillo];
$estanteria=$_REQUEST[estanteria];

$resultado1=mysql_query("UPDATE ejemplares set nom_editorial='$editorial' WHERE isbn='$isbn'",$link) or die(mysql_error());

$resultado=mysql_query("UPDATE libros set nom_editorial='$editorial' WHERE isbn='$isbn'",$link) or die(mysql_error());


quiero modificar el nombre de la editorial del ejemplar y el libro y me sale

Cannot add or update a child row: a foreign key constraint fails (`proyecto`.`libros`, CONSTRAINT `fknombreditorial` FOREIGN KEY (`nom_editorial`) REFERENCES `editoriales` (`nom_editorial`) ON DELETE CASCADE ON UPDATE CASCADE)

no se si estarán mal creadas creadas las claves foráneas en las tablas o si no lo entiendo