gpt4 book ai didi

MySQL第二个基于外键的自增字段

转载 作者:可可西里 更新时间:2023-11-01 07:56:30 24 4
gpt4 key购买 nike

我已经多次遇到这个问题,但还没有找到解决问题的“MySQL 方式”——我有一个包含用户报告 .每个报告都有一个id,我将其作为报告编号显示给我的用户。

主要的提示是用户对系统中报告丢失的原因感到困惑。实际情况并非如此。实际上,他们正在识别他们的 ID 之间的差距,并假设这些是缺失的报告,而实际上,这仅仅是因为另一个用户填补了这个自动递增的差距。

我需要知道在 MySQL 中是否有办法做到这一点:

我是否可以有一个名为 report_numbersecond 自动递增字段,它基于 user_id 字段,它具有不同的每个用户的一组自动增量?

例如

|------|---------|---------------|
| id | user_id | report_number |
|------|---------|---------------|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 1 |
| 5 | 1 | 4 |
| 6 | 1 | 5 |
| 7 | 2 | 2 |
| 8 | 3 | 1 |
| 9 | 3 | 2 |
|------|---------|---------------|

我为此使用 InnoDB,因为它非常重视外键。当我添加第二个自动递增字段时它似乎在提示,但我不确定是否有其他方法可以做到这一点?

最佳答案

MyISAM 支持第二列自动递增,但 InnoDB 不支持

对于 InnoDB,您可以创建一个触发器 BEFORE INSERT 以获取 reportid 的最大值并将该值加一。

DELIMITER $$
CREATE TRIGGER report_trigger
BEFORE INSERT ON reports
FOR EACH ROW BEGIN
SET NEW.`report_id` = (SELECT MAX(report_id) + 1 FROM reports WHERE user_id = NEW.user_id);
END $$
DELIMITER ;

如果你可以改用MyISAM,在MySQL页面的文档中有一个例子:

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

CREATE TABLE animals (
grp ENUM('fish','mammal','bird') NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (grp,id)
) ENGINE=MyISAM;

INSERT INTO animals (grp,name) VALUES
('mammal','dog'),('mammal','cat'),
('bird','penguin'),('fish','lax'),('mammal','whale'),
('bird','ostrich');

SELECT * FROM animals ORDER BY grp,id;

哪个返回:

+--------+----+---------+
| grp | id | name |
+--------+----+---------+
| fish | 1 | lax |
| mammal | 1 | dog |
| mammal | 2 | cat |
| mammal | 3 | whale |
| bird | 1 | penguin |
| bird | 2 | ostrich |
+--------+----+---------+

关于MySQL第二个基于外键的自增字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19786665/

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