gpt4 book ai didi

mysql - 如何在mysql中引用多个列?

转载 作者:行者123 更新时间:2023-11-29 00:21:38 24 4
gpt4 key购买 nike

我有两个表,Teams 和 Players。在任何给定时间,许多玩家所属的整个团队要么处于事件状态,要么处于非事件状态。我希望能够更新 Teams 表中的 isActive 列,并将更改反射(reflect)在具有相同 Team_id 的玩家表中的所有玩家中。我似乎无法找到做到这一点的方法。到目前为止,我有:

create Teams (
team_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
team_name varchar(128) NOT NULL,
isActive int NOT NULL DEFAULT 0
);

create Players (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
player_name varchar(128) NOT NULL,
team_id int NOT NULL,
isActive int NOT NULL,
FOREIGN KEY (team_id) REFERENCES Teams(team_id) ON UPDATE CASCADE,
???
);

???我想做类似的事情:FOREIGN KEY (isActive) REFERENCES Teams(isActive) ON UPDATE CASCADE,但显然这是行不通的。

我如何创建我的表,以便我可以在非主键列 (Players.isActive) 上“更新级联”,同时保留我的常规主键——更新级联,使所有玩家都具有该 team_id“看到“自动更改为 Teams 表中的 isActive 更新?

感谢任何帮助。谢谢!

最佳答案

如果你可以从 players 创建一个外键至 teams其中包括 isActive列,然后您可以按照以下主题中的描述进行操作,

How to update on cascade in MySQL?

否则可以使用触发器来实现

http://dev.mysql.com/doc/refman/5.5/en/create-trigger.html

http://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html

如果使用触发器是一个可接受的解决方案,那么您可以执行类似以下的操作来修改所有玩家的 isActive属于已更改值 isActive 的团队的值,

CREATE TRIGGER `upate_inactive_players` AFTER UPDATE ON `Teams`
FOR EACH ROW
BEGIN
IF (OLD.isActive <> NEW.isActive) THEN
UPDATE `Players` set isActive = NEW.isActive where team_id = OLD.team_id
END IF;
END

请注意,这会在激活他们的团队时激活已独立停用的玩家。

关于mysql - 如何在mysql中引用多个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20818395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com