我的插入语句是:
create table department (
name varchar (30) primary key
);
create table PIO (id varchar (5), name varchar (30), dept_name varchar (30), email_id varchar (30),
primary key ( id, name),
foreign key(dept_name) references department (name) on delete cascade);
create table applicant (
name varchar(30), email_id varchar (30), phone varchar (15), address text
);
create table application (app_name varchar (30), app_id int, pio_id varchar (5), pio_name varchar (30), dat DATE,content text,
primary key (app_name,app_id,pio_id,pio_name),
foreign key (app_name) references applicant (name),
foreign key (pio_id) references PIO (id),
foreign key (pio_name) references PIO (name)
);
最后一个(应用程序)表没有被创建....它给出了以下错误:
支持事务,行级锁定和外键errorno 150
答案 0 :(得分:1)
PIO(id)和(name)不是键,因此您无法在应用程序中向它们声明外键。 你可能意味着而不是那两个FK有一个:
--in application
foreign key (pio_id,pio_name) references PIO (id,name)
这会强制PIO中的每个特定(pio_id,pio_name)对在应用程序中显示为(id,name)对。
可能你只希望(pio_id)s显示为(id)s和(io_name)s显示为(name)s。这是两个“包含依赖”(IND)约束。 FK约束是引用PK或UNIQUE子行的IND约束。在SQL中编写非FK IND约束很困难。