Php Can';MySQL中的t-drop复合唯一索引
我有一个Lumen 5.5(MySQL 5.7)应用程序,我在数据库迁移中创建了一个唯一的索引:Php Can';MySQL中的t-drop复合唯一索引,php,mysql,laravel,lumen,Php,Mysql,Laravel,Lumen,我有一个Lumen 5.5(MySQL 5.7)应用程序,我在数据库迁移中创建了一个唯一的索引: Schema::table('form_data', function (Blueprint $table){ $table->unique(['organisation_id', 'template_id', 'entity_type_id', 'entity_id'], 'form_data_identifier'); // name of the index is 'fo
Schema::table('form_data', function (Blueprint $table){
$table->unique(['organisation_id', 'template_id', 'entity_type_id', 'entity_id'], 'form_data_identifier');
// name of the index is 'form_data_identifier'
});
在向下
迁移中,我尝试删除索引:
Schema::table('form_data', function (Blueprint $table){
$table->dropUnique('form_data_identifier');
});
但我得到了错误信息:
在Connection.php第664行:
SQLSTATE[HY000]:一般错误:1553无法删除索引“form\u data\u identifier”:外键约束中需要索引(SQL:alter tableform\u data
drop indexform\u data\u identifier
)
我自己也尝试过使用
DROP INDEX x on y
和ALTER TABLE y DROP INDEX x
语法直接在数据库上运行查询,但得到了相同的错误。我已经检查过了,这个索引表单数据\u标识符
没有被任何其他表或键引用。(注意:组成唯一键的一些键是外键,但我认为这不应该是问题。)
我可能缺少什么?“注意:组成唯一键的一些键是外键,但我认为这不应该是一个问题”-正如错误消息所说,这是一个问题。如何解决?如果我不清楚,我的意思是
organization\u id
和template\u id
分别参考organizations
和templates
表格上的id
。这能阻止我删除另一个索引吗?如果我想先删除那些列的话,那不是反过来吗?外键(约束)和索引是两件不同的事情。外键总是需要一个支持约束检查的索引(在两个表上)。是否有一个表将其中一个字段标记为外键?这将停止删除该字段。请参阅以了解如何使用外键查找表。