创建表上的外键不会被创建

时间:2014-07-29 19:17:08

标签: mysql

执行我的代码不会导致错误,也没有在此服务器上创建预期的密钥:

create table table1 (
    id int not null auto_increment primary key,
    name varchar(10) not null default ''   
) engine=innodb;

create table table2 (
    id int not null auto_increment primary key,
    idTable1 int null references table1(id) on delete cascade
) engine=innodb;

我看到一些人将这些限制声明为:

columnName int not null, foreign key (columnName) references table1(id) on delete cascade

但我认为我之前已经使用过以前的语法,它可以在不同的服务器上运行。我当时不记得了。

你之前见过这个吗?假设我的语法可以在MSSQL上运行,我错了吗?如果是这样,为什么这不会导致抛出错误?

修改:

启用InnoDB并在运行查询之前将其设置为默认值SET storage_engine=INNODB;

使用第二个语法示例添加的键工作。添加了alter table的键也可用。

1 个答案:

答案 0 :(得分:5)

MySQL不支持列级别对CREATE语法的外键约束添加。 它必须是表级。

  

此外,MySQL不识别或支持“内联参考”   规范“(在SQL标准中定义)引用所在的位置   被定义为列规范的一部分。 MySQL接受   仅当指定为单独的FOREIGN的一部分时,REFERENCES子句   KEY规范。对于不支持外部的存储引擎   密钥(如MyISAM),MySQL Server解析并忽略外键   规格。

进一步阅读:here