【问题标题】:Mysql Auto-Increment Composite [duplicate]Mysql自动增量复合[重复]
【发布时间】:2013-04-01 22:16:32
【问题描述】:

我正在尝试使用自动增量让我的 InnoDB 发生以下情况

ID | AI
1    1
1    2
1    3
2    1
2    2
2    3

如何设置?我尝试将两者都设置为 PK,但这并不像在其他数据库引擎中那样工作。

Google 没有任何帮助,或者我找不到正确的搜索字词。

【问题讨论】:

  • 这个问题没有显示任何研究工作。 做好功课很重要。告诉我们您发现了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案。 FAQ.
  • 我发现人们使用不同的数据库引擎,并且有人试图做与我想做的相反的事情。没有太大帮助:stackoverflow.com/questions/3804845/…
  • 我 4 天前在这里看到了同样类型的问题。
  • 4 天,这有助于搜索。找到这个:stackoverflow.com/questions/5416548/…

标签: mysql database innodb auto-increment


【解决方案1】:

一种方法是使用触发器。

您的表格 DDL 可能如下所示

CREATE TABLE `composite` (
  `id` INT(11) UNSIGNED NOT NULL,
  `ai` INT(11) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`,`ai`)
);

还有一个触发器

DELIMITER $$

CREATE TRIGGER tg_comp_insert
BEFORE INSERT ON composite
FOR EACH ROW 
BEGIN
    SET NEW.ai = (SELECT IFNULL(MAX(ai), 0) + 1 FROM composite WHERE id = NEW.id);
END $$

DELIMITER ;

那就这样用吧

INSERT INTO composite (id, ai) VALUES(1,0);
INSERT INTO composite (id, ai) VALUES(1,0);

结果是

+----+----+
| id | ai |
+----+----+
|  1 |  1 |
|  1 |  2 |
+----+----+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-01
    • 2016-02-05
    • 2018-11-30
    • 1970-01-01
    • 2011-09-01
    • 2012-08-11
    • 2014-03-18
    相关资源
    最近更新 更多