执行我的代码不会导致错误,也没有在此服务器上创建预期的密钥:
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的键也可用。
答案 0 :(得分:5)
MySQL不支持列级别对CREATE语法的外键约束添加。 它必须是表级。
此外,MySQL不识别或支持“内联参考” 规范“(在SQL标准中定义)引用所在的位置 被定义为列规范的一部分。 MySQL接受 仅当指定为单独的FOREIGN的一部分时,REFERENCES子句 KEY规范。对于不支持外部的存储引擎 密钥(如MyISAM),MySQL Server解析并忽略外键 规格。
进一步阅读:here