mysql - 更改 SQL 表上的 ondelete 行为

标签 mysql sql constraints

我以前做过:

ALTER TABLE `cms__model__file_taggable_tag` ADD CONSTRAINT 
cms__model__file_taggable_tag_id_cms__model__file_id FOREIGN KEY (id) REFERENCES 
cms__model__file (id), ADD CONSTRAINT 
cms__model__file_taggable_tag_tag_id_taggable_tag_id FOREIGN KEY (tag_id) 
REFERENCES taggable_tag (id) ON DELETE CASCADE ON UPDATE CASCADE; 

但我打算执行(忘记添加更新级联约束):

ALTER TABLE `cms__model__file_taggable_tag` ADD CONSTRAINT 
cms__model__file_taggable_tag_id_cms__model__file_id FOREIGN KEY (id) REFERENCES 
cms__model__file (id) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT 
cms__model__file_taggable_tag_tag_id_taggable_tag_id FOREIGN KEY (tag_id) 
REFERENCES taggable_tag (id) ON DELETE CASCADE ON UPDATE CASCADE; 

我怎样才能删除以前的约束并应用正确的约束?


尝试过:

ALTER TABLE `cms__model__file_taggable_tag` DROP CONSTRAINT 
cms__model__file_taggable_tag_id_cms__model__file_id

得到:

#1064 - You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near 'CONSTRAINT 
cms__model__file_taggable_tag_id_cms__model__file_id' at line 1

最佳答案

使用 SHOW CREATE TABLE tableName 检查 MySQL 是否实际创建了约束以及它是否更改(截断)了它的名称。

然后使用DROP FOREIGN KEY,而不是DROP CONSTRAINT:

ALTER TABLE cms__model__file_taggable_tag
  DROP FOREIGN KEY cms__model__file_taggable_tag_id_cms__model__file_id

查看 MySQL 文档: ALTER TABLE FOREIGN KEY Constraints

关于mysql - 更改 SQL 表上的 ondelete 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7264011/

相关文章:

php - fetchAll 语句只返回一些列

loops - 循环 JuMP 约束中的变量子集

sql - 如何在 Oracle 中创建约束以避免重复值?

mysql - mysql 查询中包含更多表的日期的 if 条件

mysql - 如何从 MySQL 查询返回字段类型?

php - 使用 SQL 检查预约时间是否适合用户工作时间 - 夜间建议错误

mysql - 如何在 drupal View 中添加 DISTINCT、GROUP BY 子句

ios - 为什么我的约束设置对 X/Height 不满意?

php - 从问题中选择 *

sql - Oracle SQL Select 中的行数?