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通常会用这个名称抛出一个错误,因此有意义的名称有助于发现哪里出了问题。