我设置了一个表,其中包含一个外键为ON DELETE CASCADE的列(删除父项时删除子项)

SQL命令是什么来将其更改为ON DELETE RESTRICT?(如果父项有子项,则无法删除它)

推荐答案

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

Its two step process:

假设一个table1有一个foreign key,列名为fk_table2_id,列名为constraint,列名为fk_nametable2是用键t2(something like below in my diagram)引用的表.

   table1 [ fk_table2_id ] --> table2 [t2]

First step,删除旧约束:(reference)

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

notice constraint is deleted, column is not deleted

Second step,添加新约束:

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

adding constraint, column is already there

Example:

我有一张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`)
:
:

First step:

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

Second step:

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
:

Mysql相关问答推荐

我如何才能从MySQL过程中获取LARAVEL端的数据?

MySQL RDS ALTER TABLE ENUM短暂中断了我的数据库连接

不分组寻呼

docker-compose:无法将应用程序服务连接到 mysql 数据库,收到错误:用户‘root’@‘localhost’访问被拒绝(使用密码:YES)

布尔值之间的 SQL less/greater 比较会产生意外结果

特定时间段内每个客户的运行总计

创建 mySQL BEFORE/AFTER UPDATE 触发器

在 MySQL 中使用非空条件 LAG() 函数

我在 mysql 查询中需要帮助,我想在年龄之间按年龄过滤器分组,并显示 0 计数之间找不到的数据

当用它的别名替换 (MAX(s.salary) - MIN(s.salary) 它将不起作用.. 为什么?

访问 nodejs、mysql 和 json 中的嵌套对象数组

MySQL 中的 LATERAL 语法 - 是否只是说左表首先执行以便下一个可以引用它?

用数字和字母对 VARCHAR 列进行排序

如何从 MySQL Workbench 中的图表生成 SQL 脚本?

在连接条件上使用 IS NULL 或 IS NOT NULL - 理论问题

MySQL ORDER BY rand(),名称为 ASC

MySQL 导出到 outfile:CSV 转义字符

使用 MySql,我可以对列进行排序但最后有 0 吗?

在 MySQL Workbench 中导出超过 1000 条记录的查询结果

MySQL 错误 2014 的原因在其他无缓冲查询处于活动状态时无法执行查询