gpt4 book ai didi

php - 使用带自动递增字段的触发器

转载 作者:行者123 更新时间:2023-11-30 23:17:51 27 4
gpt4 key购买 nike

所以我目前正在为 MMO(大型多人在线游戏)创建一个数据库。该数据库将列出游戏中的所有元素(盔甲、武器、任务、NPC 等)。我目前将其设置为每个不同类别在数据库中都有自己的表格。即武器、盔甲等的表格。数据将显示在表格中,无论它是什么名称都将是一个链接,该链接会将用户带到有关他们点击的任何内容的详细页面。

对于每个表,我都有一个 ID 字段,该字段会自动递增,因此每一行都有自己的 ID。但是因为我有多个不同的表,所以 ID 会重叠。由于链接的工作方式,这是 Not Acceptable 。我创建了一个名为“标识符”的第二个字段,默认值基于每个表。所以盔甲表中这一列的默认值为“盔甲”。

然后我创建了第三个字段,称为“组合”,现在是困难的部分!我创建了一个触发器,在将数据插入表之前,触发器使用 CONCAT 将“id”字段和“标识符”字段组合在一起,并将其放在组合的字段中。因此,无论我有多少张表,都会创建一个唯一的 ID。但是,由于 ID 字段自动递增,触发器只是将 0 放在应该是不同数字的地方。这是触发代码:

set new.combined = concat(new.id, new.identifier)   

这是在插入之前。

我尝试执行插入后操作,但一直出现错误。我在这里搜索了问题,但找不到我的问题的答案。有帮助吗?

最佳答案

对此的解决方案是为序列创建一个单独的表。你的模式可能看起来像这样

CREATE TABLE item_seq
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
CREATE TABLE weapon
(
id INT NOT NULL PRIMARY KEY DEFAULT 0,
name VARCHAR(32)
);
CREATE TABLE armor
(
id INT NOT NULL PRIMARY KEY DEFAULT 0,
name VARCHAR(32)
);

武器表的触发器

DELIMITER $$
CREATE TRIGGER tg_weapon_beforeinsert
BEFORE INSERT ON weapon
FOR EACH ROW
BEGIN
INSERT INTO item_seq VALUES(NULL);
SET NEW.id = LAST_INSERT_ID();
END$$
DELIMITER ;

装甲表的触发器将相同

DELIMITER $$
CREATE TRIGGER tg_armor_beforeinsert
BEFORE INSERT ON armor
FOR EACH ROW
BEGIN
INSERT INTO item_seq VALUES(NULL);
SET NEW.id = LAST_INSERT_ID();
END$$
DELIMITER ;

现在如果你向两个表中插入一些数据

INSERT INTO weapon(name) VALUES('weapon1');
INSERT INTO armor(name) VALUES('armor1');
INSERT INTO weapon(name) VALUES('weapon2');
INSERT INTO armor(name) VALUES('armor2');

武器表内容

| ID |    NAME |
----------------
| 1 | weapon1 |
| 3 | weapon2 |

防具表内容

| ID |   NAME |
---------------
| 2 | armor1 |
| 4 | armor2 |

这是 SQLFiddle 演示

关于php - 使用带自动递增字段的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16764966/

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