Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mysql中使用delete cascade?_Mysql_Sql_Foreign Keys_Cascade - Fatal编程技术网

如何在mysql中使用delete cascade?

如何在mysql中使用delete cascade?,mysql,sql,foreign-keys,cascade,Mysql,Sql,Foreign Keys,Cascade,我有一个组件数据库。每个组件都是特定类型的。这意味着组件和类型之间存在多对一关系。删除类型时,我希望删除具有该类型外键的所有组件。但是如果我没有弄错的话,cascade delete将在删除组件时删除该类型。有什么方法可以实现我所描述的吗?以下是您将包含在组件表中的内容 CREATE TABLE `components` ( `id` int(10) unsigned NOT NULL auto_increment, `typeId` int(10) unsigned NOT N

我有一个组件数据库。每个组件都是特定类型的。这意味着组件和类型之间存在多对一关系。删除类型时,我希望删除具有该类型外键的所有组件。但是如果我没有弄错的话,cascade delete将在删除组件时删除该类型。有什么方法可以实现我所描述的吗?

以下是您将包含在组件表中的内容

CREATE TABLE `components` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `typeId` int(10) unsigned NOT NULL,
    `moreInfo` VARCHAR(32), 
    -- etc
    PRIMARY KEY (`id`),
    KEY `type` (`typeId`)
    CONSTRAINT `myForeignKey` FOREIGN KEY (`typeId`)
      REFERENCES `types` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
)

请记住,您需要使用InnoDB存储引擎:默认的MyISAM存储引擎不支持外键。

您必须将外键约束定义为DELETE CASCADE

注意:您需要使用InnoDB存储引擎,默认的MyISAM存储引擎不支持外键关系

CREATE TABLE `table2` (
`id` int(11) NOT NULL auto_increment,
`name` int(11) NOT NULL,

PRIMARY KEY (`id`),
KEY `ids` (`ids`)
CONSTRAINT `foreign` FOREIGN KEY (`ids`)
  REFERENCES `table2` (`ids`) ON DELETE CASCADE ON UPDATE CASCADE
)
使用此sql

删除T1、T2 从T1开始 T1.key=T2.key上的内部连接T2
如果使用条件来链接主键,则更新级联上的条件可能是一个坏主意,因为它应该是不可变的,并且依赖于此建议数据库可能需要重新设计,但是我想如果你用一个唯一但不是主键的外键链接它就可以了。这没有使用op要求的
CASCADE
功能。但是它在不更新现有数据库结构的情况下解决了这个问题。你能扩展这个答案吗?这会同时删除T1和T2中的行吗?“T1内部连接T2”中的顺序重要吗?
Step 1. Create the buildings table:

CREATE TABLE buildings (
  building_no INT PRIMARY KEY AUTO_INCREMENT,
  building_name VARCHAR(255) NOT NULL,
  address VARCHAR(255) NOT NULL
);

Step 2. Create the rooms table:

CREATE TABLE rooms (
  room_no INT PRIMARY KEY AUTO_INCREMENT,
  room_name VARCHAR(255) NOT NULL,
  building_no INT NOT NULL,
  FOREIGN KEY (building_no)
    REFERENCES buildings (building_no)
    ON DELETE CASCADE
);

Notice that the ON DELETE CASCADE  clause at the end of the foreign key constraint 
definition.