我有一个mysql表,用于存储从ID到一组值的映射:
CREATE TABLE `mapping` (
`ID` bigint(20) unsigned NOT NULL,
`Value` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
此表是值列表,行的ID选择集合,此值属于。 因此,列ID在每个集合中是唯一的,但不是每行唯一。
我使用以下语句将数据插入表中:
INSERT INTO `mapping`
SELECT 5, `value` FROM `set1`;
在此示例中,我计算并手动将ID设置为5。 如果mysql可以自动设置此ID,那将会很棒。我知道autokey功能,但使用它不起作用,因为插入相同insert语句的所有行都应具有相同的ID。
因此每个insert语句都应生成一个新ID,然后将其用于所有插入的行。 有没有办法实现这个目标?
答案 0 :(得分:1)
我不相信它(我不确定locking table是否是好主意,我认为不是),但这可能会有所帮助:
lock tables `mapping` as m write, m as m1 read;
insert into m
select (select max(id) + 1 from m1), `value` from `set1`;
ulock tables;
答案 1 :(得分:1)
一种选择是在单行上有一个带有自动生成密钥的附加表。在该表中插入(带或不带必要或适当的其他数据),从而生成新ID,然后使用生成的密钥插入映射表。
这会让您进入一个非唯一ID是真正唯一键的外键引用的世界。更符合典型的关系数据库思维。