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

como mandar un foraneo?

Estas en el tema de como mandar un foraneo? en el foro de Bases de Datos General en Foros del Web. Hola amigos Tengo una duda...no se donde este el error mi base esta asi create table registro( matricula varchar(10) not null, nombre varchar(40) not null, ...
  #1 (permalink)  
Antiguo 27/09/2004, 21:41
 
Fecha de Ingreso: agosto-2004
Mensajes: 12
Antigüedad: 20 años, 3 meses
Puntos: 0
como mandar un foraneo?

Hola amigos

Tengo una duda...no se donde este el error

mi base esta asi

create table registro(
matricula varchar(10) not null,
nombre varchar(40) not null,
ap varchar(30) not null,
am varchar(30) not null,
edad int(2) not null,
calleynum varchar(40) not null,
colonia varchar(40) not null,
mundel varchar(50) not null,
cp int(6) not null,
email varchar(50) not null,
telefono varchar(20) not null,
teltrab varchar(20) not null,
telcel varchar(20) not null,
opinion varchar(20) not null,
primary key(matricula) );

create table empresa(
claveempre mediumint auto_increment,
matricula varchar(10) not null,
nomempresa varchar(40) not null,
primary key(claveempre),
foreign key(matricula) references registro);

La base de datos si me corre

Ahora la inserccion del servlets esta asi, claro quitando la llave foranea de la tabla me lo hace perfectamente bien.


Query="INSERT INTO registro VALUES ('"+matricula+"','"+nombre+"','"+ap+"','"+am+"','" +edad+"','"+calleynum+"','"+colonia+"','"+mundel+" ','"+cp+"','"+email+"','"+telefono+"','"+teltrab+" ','"+telcel+"','"+opinion+"')";

Query1="INSERT INTO empresa VALUES ('"+"','"+nomempresa+"')";



Pero ya con la llave foranea lo quise hacer de estas dos formas

Query1="INSERT INTO empresa VALUES ('"+"','"+"','"+nomempresa+"')";

Query1="INSERT INTO empresa VALUES ('"+"','"+matricula+'",'"+nomempresa+"')";


Con las dos formas mencionadas me manda error.


Alguien podria decirme donde esta el error o que le falta? estoy usando mysql

Saludos
  #2 (permalink)  
Antiguo 28/09/2004, 11:17
 
Fecha de Ingreso: septiembre-2004
Ubicación: Puebla, México
Mensajes: 81
Antigüedad: 20 años, 2 meses
Puntos: 0
Para usar foreign keys en mysql, se requiere que:
1. Ambas tablas sean del tipo innodb
2. Usar la sintaxis FOREIGN KEY(campo) REFERENCES table_name (campo)
3. El campo que se declara como foreign key debe ser declarado como indice

En tu caso especifico para solucionar (posiblemente) las cosas necesitas que las tablas queden asi:

create table registro(
matricula varchar(10) not null,
nombre varchar(40) not null,
ap varchar(30) not null,
am varchar(30) not null,
edad int(2) not null,
calleynum varchar(40) not null,
colonia varchar(40) not null,
mundel varchar(50) not null,
cp int(6) not null,
email varchar(50) not null,
telefono varchar(20) not null,
teltrab varchar(20) not null,
telcel varchar(20) not null,
opinion varchar(20) not null,
primary key(matricula) ) TYPE = INNODB;

create table empresa(
claveempre mediumint auto_increment,
matricula varchar(10) not null,
nomempresa varchar(40) not null,
primary key(claveempre),
INDEX (matricula),
foreign key(matricula) references registro(matricula)) TYPE = INNODB;

Debes usar mysql 4 o superior

Tambien checa que cuando crees un registro en empresa, matricula antes exista en registro.

Si esto no sirve seria bueno que publicaras el error que te manda mysql

Espero que esto sirva
__________________
Revista DdS
Revista on-line sobre desarrollo de software
  #3 (permalink)  
Antiguo 28/09/2004, 18:54
 
Fecha de Ingreso: agosto-2004
Mensajes: 12
Antigüedad: 20 años, 3 meses
Puntos: 0
Hola satchb pues fijate que lo que dices si funciona porque corre perfectamente en mysql, es decir si lo hago manualmente si me inserta datos.

insert into registro values('12345678-2','alvaro','hernandez','martinez','23','calle 8','granjas','nicolas romero','12323','[email protected]','58274116','1234 5678','12345676','hola');

insert into empresa values(1,'12345678-2','agmuebles');

si hago eso en Mysql todo esta bien...ahora lo que lei que si la llave foranea no existe en la raiz nos manda un error de este tipo:

Cannot add or update a child row: a foreign key constraint fails

Pero al hacer el insert si la clave foranea es identico al la matricula (raiz) todo esta bien.


El error que me manda el servlets es este:

[MySQL][ODBC 3.51 Driver][mysqld-4.0.18-nt]Cannot add or update a child row: a foreign key constraint fails

mi insert desde el servlets esta asi:

Query="INSERT INTO registro VALUES ('"+matricula+"','"+nombre+"','"+ap+"','"+am+"','" +edad+"','"+calleynum+"','"+colonia+"','"+mundel+" ','"+cp+"','"+email+"','"+telefono+"','"+teltrab+" ','"+telcel+"','"+opinion+"')";

Query1="INSERT INTO empresa VALUES ('"+"','"+matricula+"','"+nomempresa+"')";


Segun yo el error que manda el servlets es porque al momento de hacer el insert lo hace instantaneamente .

Alguien sabe como especificar al servlets que insert quiero hacer primero?

Al saber como espesificarle primero que inserte todos los que no tengan foraneos y despues los que tengan llaves foraneas.

Gracias y reciban un cordial saludo.
  #4 (permalink)  
Antiguo 29/09/2004, 20:54
 
Fecha de Ingreso: agosto-2004
Mensajes: 12
Antigüedad: 20 años, 3 meses
Puntos: 0
Hola

Solo para decirles que el error era porque hacia dos inserts al mismo tiempo.

Se insertaba el primero y al momento de hacer el otro pues me mandaba error de duplicidad.

Pero ya lo arregle.

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:10.