gpt4 book ai didi

php - 选择枚举时将字符串分配给另一列

转载 作者:行者123 更新时间:2023-11-29 03:18:23 26 4
gpt4 key购买 nike

我正在为我的网络应用程序制作用户权限功能,

假设我有一个包含 2 列的表(例如,不实用):

ENUM 类型的

rank 值为 'guest','user','admin'

和另一列权限

是否可以使用纯 SQL 以某种方式创建此表。这样,当我更新 rank 列时,它会为 permissions 列分配预定义的值。但是,我也希望有可能在不影响 rank 列的情况下更改权限。

最佳答案

我们可以实现一个BEFORE UPDATE触发器。

当规范说“更新排名列”时,我们的意思是表中的一行(或多行)受到 UPDATE 语句的影响。我们并不是要更改表格来更改排名列的定义。

DELIMITER $$

CREATE TRIGGER `trg_mytable_bu`
BEFORE UPDATE ON `mytable`
FOR EACH ROW
BEGIN

IF NEW.rank <=> OLD.rank THEN
-- no change to rank col value
BEGIN END
ELSE
IF NEW.permission IS NULL THEN
-- defaults apply only if permission value is NULL
IF NEW.rank = 'guest' THEN
SET NEW.permissions = 'fee';
ELSEIF NEW.rank = 'user' THEN
SET NEW.permissions = 'fi';
ELSEIF NEW.rank = 'user' THEN
SET NEW.permissions = 'fo';
ELSE
-- unexpected value of rank
SET NEW.permissions = 'fum';
END IF;
END IF;
END IF;
END$$

DELIMITER ;

如果我们想要对 INSERT 进行类似的“默认”赋值行为,我们需要定义一个单独的 BEFORE INSERT 触发器,它可以是类似的,但不会有对 OLD.rank 的引用。


回答所提出的问题:是的,这是可能的。

回答一个不同的问题(没有被问到)...“我们的数据库设计是否应该实现这样的触发器?”要回答这个问题,我认为我们应该重新思考这个问题,并考虑一些替代设计。从长远来看,我们可能会更好地使用不使用 ENUM 列的设计,以及不需要根据分配给 ENUM 的值将默认值分配给另一列的设计。

关于php - 选择枚举时将字符串分配给另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50281972/

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