sql >> Base de Datos >  >> RDS >> Mysql

referencia de clave externa mysql de una clave compuesta

MySQL tiene muchas restricciones en claves foráneas . Entre los que podrían interponerse en su camino. . .

  • Ambas tablas deben usar el motor INNODB.
  • "En la tabla de referencia, debe haber un índice donde las columnas de clave externa se enumeran como las primeras columnas en el mismo orden".

Este código funciona en mi versión (5.1.62).

create table DEP_FACULTY(
  LNAME varchar(50),
  FNAME varchar(50),
  EMAIL varchar(70) primary key
) ENGINE = INNODB;

insert into DEP_FACULTY values ('Gregor', 'Brandich', '[email protected]');

create table STUDENT(
  LNAME varchar(50),
  FNAME varchar(50),
  ID char(9) primary key,
  ASSIGNED_ADVISOR_EMAIL varchar(70),
  foreign key (ASSIGNED_ADVISOR_EMAIL) references DEP_FACULTY(EMAIL) ON DELETE SET NULL,
  IS_ADVISED tinyint(1)
) ENGINE = INNODB;

insert into STUDENT values ('Charmaine', 'DePeletier', 'cmd', '[email protected]', 1);

create table ADVISE_HIST(
  STUDENT_ID char(9),
  foreign key (STUDENT_ID) references STUDENT(ID),
  ACTUAL_ADVISOR_EMAIL char(70) NOT NULL,
  foreign key (ACTUAL_ADVISOR_EMAIL) references DEP_FACULTY(EMAIL),
  DATE_ADVISED date,
  primary key REF_ADVISE_HIST (STUDENT_ID, DATE_ADVISED)
) ENGINE = INNODB;

insert into ADVISE_HIST values ('cmd', '[email protected]', CURRENT_DATE);
insert into ADVISE_HIST values ('ctd', '[email protected]', CURRENT_DATE);

De esos dos últimos insertos, el primero funciona. El segundo debería arrojar un error de restricción de clave externa.