当前位置: 首页 > 面试题库 >

如何更改外键引用动作?(行为)

贺俊杰
2023-03-14
问题内容

我已经建立了一个表,该表包含带有外键的列,并将其设置为ON DELETE CASCADE(删除父级时删除子级)

SQL命令将其更改ON DELETE RESTRICT为什么?(如果有孩子,则不能删除其父母)


问题答案:

旧问题,但添加了答案,以便获得帮助

它分为两个步骤:

假设,a table1具有 列名称为, 约束条件 名称为的 外键 ,并通过键被引用到表中( 如下图所示 )。 fk_table2_id
fk_name``table2``t2

   table1 [ fk_table2_id ] --> table2 [t2]

第一步 ,删除旧的约束:(参考)

ALTER TABLE `table1` 
DROP FOREIGN KEY `fk_name`;

通知约束已删除,列未删除

第二步 ,添加新约束:

ALTER TABLE `table1`  
ADD CONSTRAINT `fk_name` 
    FOREIGN KEY (`fk_table2_id`) REFERENCES `table2` (`t2`) ON DELETE CASCADE;

添加约束,列已经在那里

例:

我有一个UserDetails表是指Users表:

mysql> SHOW CREATE TABLE UserDetails;
:
:
 `User_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`Detail_id`),
  KEY `FK_User_id` (`User_id`),
  CONSTRAINT `FK_User_id` FOREIGN KEY (`User_id`) REFERENCES `Users` (`User_id`)
:
:

第一步:

mysql> ALTER TABLE `UserDetails` DROP FOREIGN KEY `FK_User_id`;
Query OK, 1 row affected (0.07 sec)

第二步:

mysql> ALTER TABLE `UserDetails` ADD CONSTRAINT `FK_User_id` 
    -> FOREIGN KEY (`User_id`) REFERENCES `Users` (`User_id`) ON DELETE CASCADE;
Query OK, 1 row affected (0.02 sec)

结果:

mysql> SHOW CREATE TABLE UserDetails;
:
:
`User_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`Detail_id`),
  KEY `FK_User_id` (`User_id`),
  CONSTRAINT `FK_User_id` FOREIGN KEY (`User_id`) REFERENCES 
                                       `Users` (`User_id`) ON DELETE CASCADE
:


 类似资料:
  • 问题内容: 我在表中有一条带有错误主键的记录。我想将其更改为正确的值,但该值在许多其他表中使用。 有没有简单的方法可以在同一时间更新主键和外键? 问题答案: 如果将外键设置为级联更改,则值应自动更改。

  • 我的两张空桌子: 需要修改: 结果: 错误1833(HY000):无法更改列'person_id':在表'tom.favorite_food'的外键约束'fk_fav_food_person_id'中使用 为什么会这样?有没有一种方法可以在不删除表并重新定义它们的情况下解决这个问题?

  • 问题内容: 我有一个可编辑单元格。当我单击一个单元格时,它将进入编辑模式;当我使用方向箭头在单元格中移动时,也会发生同样的情况。现在,我想选择单元格而不是开始编辑,并且仅在按下键时才编辑单元格。 如果需要任何其他信息,请索取。 编辑:键的动作 现在这是用于左箭头动作,不难从这一个推论出其余三个: 这是您绑定此操作的方式: 哦,我差点忘了,要选择单元格而不是在“鼠标单击”上进行编辑: 将必须添加到表

  • 我在model和model之间有一个关系。这意味着每个用户都有0或1个总统设置。因此,表的主索引与外键相同。 这就是我想要添加外键的方式: 但是我得到以下错误: 我怎么才能修好它?我使用InnoDB引擎,所以我知道我可以设置索引键为外键。

  • 我有两个表两个表名

  • 问题内容: 这与这个问题有些相关: 我有一个带有主键的表,并且我有几个表引用该主键(使用外键)。我需要从该表中删除行,在该表中其他任何表(以及其他一些约束)中都未引用主键。 例如: 等等。组中的某些行在任何表中均未引用,因此我需要删除这些行。除此之外,我需要知道如何查找所有在Group中引用给定行的表/行。 我知道我可以查询每个表并检查groupid,但是由于它们是外键,所以我想有一种更好的方法。