AWS RDS 的外键约束不起作用
Posted
技术标签:
【中文标题】AWS RDS 的外键约束不起作用【英文标题】:Foreign Key contraints with AWS RDS not working 【发布时间】:2016-07-23 16:00:24 【问题描述】:我正在尝试将本地 laravel 数据库迁移到 RDS,我在使用 Elastic beanstalk 时遇到了很多问题,所以我决定采用不同的方式。迁移时,我拥有的每个外键都会出现以下错误:
[Illuminate\Database\QueryException] SQLSTATE[HY000]:一般错误: 1215 无法添加外键约束(SQL:alter table
videos
add 约束videos_object_id_foreign
外键(object_id
) 在删除级联时引用objects
(id
)
PDO异常
[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
我研究了 RDS 的外键约束,他们说它们没有被强制执行,但它说它们可以用于信息目的。 每个外键都是无符号的。
Schema::create('videos', function (Blueprint $table)
$table->increments('id');
$table->integer('object_id')->unsigned()->nullable();
$table->foreign('object_id')->references('id')->on('objects')->onDelete('cascade');
$table->integer('user_id')->unsigned()->nullable();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->rememberToken();
$table->timestamps();
);
注意:我也尝试在创建表后将外键分离到单独的迁移中,但没有成功。
【问题讨论】:
先迁移哪个?videos
还是 objects
?这可能是因为您仍然没有 objects
表,而您正在尝试使用该表创建引用。
【参考方案1】:
要查找特定错误,请运行以下命令:
SHOW ENGINE INNODB STATUS
并查看LATEST FOREIGN KEY ERROR
部分。
子列的数据类型必须与父列完全匹配。
此外,您应该在运行 DDL 之前运行查询 set foreign_key_checks=0
,这样您就可以按任意顺序创建表,而无需在相关子表之前创建所有父表。
【讨论】:
以上是关于AWS RDS 的外键约束不起作用的主要内容,如果未能解决你的问题,请参考以下文章