0

我有 3 张桌子

player, goal,card

我应该如何构建我的数据库,以便它自动删除goalcard包含行player id

我的表声明我想我应该添加删除级联但我不太了解它所以你们能帮我吗?

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;
4

1 回答 1

0

我没有运行 atm 的 MySQL,但下面的代码应该可以实现目标。这个想法是,当您定义外键时,您分配删除和更新规则。这些适用于修改主键(播放器中的 id)时。因此,当播放器中的主键被删除(即播放器被删除)时,具有相应外键的行按照它们的规则运行。Cascade 的意思是“跟随”,所以在这种情况下也将其删除。

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;
于 2012-11-20T11:27:47.873 回答