支持事务,行级锁定和外键错误150

时间:2014-06-17 14:33:31

标签: php mysql foreign-keys

我的插入语句是:

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

1 个答案:

答案 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约束很困难。