当前位置: 首页 > 面试题库 >

自动增量复合密钥InnoDB

申炳
2023-03-14
问题内容

我想为InnoDB MySQL表创建类似于MyISAM的行为。我想要一个复合主键:

主键(id1,id2)

其中id1根据id2的值自动递增。用InnoDB做到这一点的最佳方法是什么?

+----------+-------------+--------------+
|      id1 |         id2 | other_column |
+----------+-------------+--------------+
|        1 |           1 | Foo          |
|        1 |           2 | Bar          |
|        1 |           3 | Bam          |
|        2 |           1 | Baz          |
|        2 |           2 | Zam          |
|        3 |           1 | Zoo          |
+----------+-------------+--------------+

问题答案:

您可以使用此BEFORE INSERT触发器来替换零个id值-

CREATE TRIGGER trigger1
  BEFORE INSERT
  ON table1
  FOR EACH ROW
BEGIN

  SET @id1 = NULL;

  IF NEW.id1 = 0 THEN
    SELECT COALESCE(MAX(id1) + 1, 1) INTO @id1 FROM table1;
    SET NEW.id1 = @id1;
  END IF;

  IF NEW.id2 = 0 THEN

    IF @id1 IS NOT NULL THEN
      SET NEW.id2 = 1;
    ELSE
      SELECT COALESCE(MAX(id2) + 1, 1) INTO @id2 FROM table1 WHERE id1 = NEW.id1;
      SET NEW.id2 = @id2;
    END IF;

  END IF;

END

然后插入零值(id1或id2)以生成新值-

INSERT INTO table7 VALUES(0, 0, '1');
INSERT INTO table7 VALUES(0, 0, '2');
INSERT INTO table7 VALUES(1, 0, '3');
INSERT INTO table7 VALUES(1, 0, '4');
INSERT INTO table7 VALUES(1, 0, '5');
...


 类似资料:
  • 问题内容: 我刚刚开始使用MongoDb,我注意到我有很多重复的记录,这些记录本来就是唯一的。我想知道如何对数据使用组合键,并且正在寻找有关如何创建它们的信息。最后,我使用Java来访问mongo和morphia作为我的ORM层,因此将您的答案中的内容包括在内是非常棒的。 Morphia:http : //code.google.com/p/morphia/ 问题答案: 您也可以将对象用于_id字

  • 问题内容: 我有这样的代码 即使我非常确定我是第一次写记录,此代码也会给我一个 sqlite3.IntegrityError 异常。 所以,我尝试 这会将行细插入 基 表BUT中,ID列根本不会自动递增。 我能做什么?任何想法? 问题答案: 在sqlite中,仅当一个整数列是主键时,您才获得自动增量行为。复合键阻止自动增量生效。 通过定义为唯一的主键,然后在上添加一个附加的唯一约束,您可以获得类似

  • 如何在多会话/事务环境中安全地将一行插入到包含带有(手动)增量键的主复合键的表中。 如何获取<code>column_c</code>的最新增量值,<code>LAST_INSERT_ID()</code>不返回所需值。 我已经研究了< code >选择更新...INSERT和< code>INSERT INTO SELECT,但无法决定使用哪一个。 从事务安全(锁)、隔离级别和性能角度来看,实现

  • 刚开始使用域驱动设计,我了解到您应该将模型保持在有效状态,并且在创建类的新实例时,建议将所有必需的属性作为构造函数参数。 但是,当使用自动递增的键时,当我从持久层调用Add方法时,我只有这个新ID。如果我在没有密钥的情况下实例化对象,我认为它们将处于无效状态,因为它们需要某种唯一标识符。 我应该如何实现我的架构,以便在创建我的实体的新实例之前拥有我的id?

  • 用户详细信息 有人能看出我做错了什么吗?

  • 假设我有一个mongo集合,如下所示: 我想使用Spring的mongoTemplate编写一个查询,只检索那些id.index=index1的文档。 使用mongo shell,我可以编写以下查询: 然而,我认为使用mongoTemplate会起作用的东西却不起作用。我尝试过: 有人可以帮助我使用mongoTemplate为这个查询提供正确的语法吗?