Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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 级联删除如何删除子行_Mysql_Innodb_Cascade - Fatal编程技术网

Mysql 级联删除如何删除子行

Mysql 级联删除如何删除子行,mysql,innodb,cascade,Mysql,Innodb,Cascade,我有三张桌子 玩家,目标,卡 我应该如何建立数据库,使其自动删除包含玩家id的目标和卡行 我的表声明我想我应该添加delete cascade,但我不太理解,所以你们能帮我吗 CREATE TABLE IF NOT EXISTS `#__footsal_players` ( `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, `ordering` INT(11) NOT NULL , `state` TINYINT(1) NOT NULL DEFA

我有三张桌子

玩家
目标

我应该如何建立数据库,使其自动删除包含
玩家id的
目标

我的表声明我想我应该添加delete cascade,但我不太理解,所以你们能帮我吗

CREATE TABLE IF NOT EXISTS `#__footsal_players` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,

`ordering` INT(11)  NOT NULL ,
`state` TINYINT(1)  NOT NULL DEFAULT '1',
`checked_out` INT(11)  NOT NULL ,
`checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
`created_by` INT(11)  NOT NULL ,
`id_team` INT(11)  NOT NULL ,
`first_name` varchar(255)  NOT NULL ,
`last_name` varchar(255)  NOT NULL ,
`birth_date` DATE  NOT NULL DEFAULT '0000-00-00',
`email` varchar(255)  NOT NULL ,

 PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT COLLATE=utf8_polish_ci

CREATE TABLE IF NOT EXISTS `#__footsal_goals` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,

`state` TINYINT(1)  NOT NULL DEFAULT '1',
`checked_out` INT(11)  NOT NULL ,
`checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
`created_by` INT(11)  NOT NULL ,
`id_player` INT(11)  NOT NULL ,
`id_resault` INT(11)  NOT NULL ,
`id_game` INT(11) NOT NULL ,
`goals_number` VARCHAR(255)  NOT NULL ,
`id_session` VARCHAR(11)  NOT NULL ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT COLLATE=utf8_polish_ci;


CREATE TABLE IF NOT EXISTS `#__footsal_yellow_cards` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,

`state` TINYINT(1)  NOT NULL DEFAULT '1',
`checked_out` INT(11)  NOT NULL ,
`checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
`created_by` INT(11)  NOT NULL ,
`id_player` INT(11)  NOT NULL ,
`id_game` INT(11) NOT NULL ,
`id_resault` INT(11)  NOT NULL ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT COLLATE=utf8_polish_ci;

我没有运行atm的MySQL,但下面的代码应该可以实现目标。其思想是定义外键时,分配删除和更新规则。当修改主键(播放机中的id)时,这些选项适用。因此,当删除播放机中的主键(即该播放机被删除)时,具有相应外键的行将根据其规则进行操作。Cascade表示“follow”,因此在本例中也将其删除

CREATE TABLE IF NOT EXISTS `#__footsal_goals` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,

`state` TINYINT(1)  NOT NULL DEFAULT '1',
`checked_out` INT(11)  NOT NULL ,
`checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
`created_by` INT(11)  NOT NULL ,
`id_player` INT(11)  NOT NULL ,
`id_resault` INT(11)  NOT NULL ,
`id_game` INT(11) NOT NULL ,
`goals_number` VARCHAR(255)  NOT NULL ,
`id_session` VARCHAR(11)  NOT NULL ,
PRIMARY KEY (`id`),
FOREIGN KEY goals_player_fk (`id_player`) 
REFERENCES `#__footsal_players` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT COLLATE=utf8_polish_ci;

我没有,我更喜欢fk做这个
goals\u player\u fk
name,因为它很严格,或者我可以用任何一个替换它??因为我尝试输入元素
但出现错误150,您可以使用任何您喜欢的名称,但名称在数据库中必须是唯一的。所以对于卡片,我建议您使用card\u player\u fk。我更喜欢给出有意义的名称,每当违反外键完整性规则时,dbms通常会用这个名称抛出一个错误,因此有意义的名称有助于发现哪里出了问题。