我想为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为这个查询提供正确的语法吗?