【发布时间】:2011-06-10 00:44:58
【问题描述】:
假设你有一张桌子:
`item`
带字段:
`id` VARCHAR( 36 ) NOT NULL
,`order` BIGINT UNSIGNED NOT NULL
还有:
Unique(`id`)
你打电话给:
INSERT INTO `item` (
`item`.`id`,`item`.`order`
) SELECT uuid(), `item`.`order`+1
MySql 会将相同的 uuid 插入到所有新创建的行中。
所以如果你开始:
aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa, 0
bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb, 1
你最终会得到:
aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa, 0
bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb, 1
cccccccc-cccc-cccc-cccc-cccccccccccc, 1
cccccccc-cccc-cccc-cccc-cccccccccccc, 2
如何命令 MySql 为每一行创建不同的 uuid?
我知道以下在 MSSQL 中按预期工作:
INSERT INTO item (
id,[order]
) SELECT newid(), [order]+1
n.b.我知道我可以选择结果,遍历它们并从我的 PHP 代码中为每一行发出一个单独的 INSERT 命令,但我不想这样做。我希望在应该完成的数据库服务器上完成工作。
【问题讨论】:
-
您确定它为每一行返回完全相同的值吗?当您像这样调用 UUID() 时,我希望每个值中的大多数字符都是相同的,因此在视觉上扫描它们可能看起来相同,但如果仔细观察,每个字符仍然是唯一的。
-
你确定吗?我尝试了一个类似的测试——我得到了不同的 UUID。
标签: mysql uuid insert-select