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

Ric*_*uza 0 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;
Run Code Online (Sandbox Code Playgroud)

我已经看到一些声明限制为:

columnName int not null, foreign key (columnName) references table1(id) on delete cascade
Run Code Online (Sandbox Code Playgroud)

但我想我之前已经使用过以前的语法,它可以在不同的服务器上运行.我只是不记得了.

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

编辑.:

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

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

avi*_*eks 5

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

此外,MySQL不识别或支持"内联REFERENCES规范"(在SQL标准中定义),其中引用被定义为列规范的一部分.MySQL仅在指定为单独的FOREIGN KEY规范的一部分时才接受REFERENCES子句.对于不支持外键的存储引擎(如MyISAM),MySQL Server会解析并忽略外键规范.

进一步阅读:这里