Tom*_*Tom 85 mysql random guid
我刚刚将一堆数据导入到MySQL表中,并且我有一个"GUID"列,我希望基本上用新的和唯一的随机GUID填充所有现有行.
我如何在MySQL中执行此操作?
我试过了
UPDATE db.tablename
SET columnID = UUID()
where columnID is not null
Run Code Online (Sandbox Code Playgroud)
只是让每个领域都一样
小智 98
我需要在现有表中添加一个guid主键列,并使用唯一的GUID填充它,并且此内部选择的更新查询对我有用:
UPDATE sri_issued_quiz SET quiz_id=(SELECT uuid());
Run Code Online (Sandbox Code Playgroud)
很简单 :-)
a1e*_*x07 81
我不确定这是否是最简单的方法,但它确实有效.我们的想法是创建一个触发器来完成所有工作,然后执行更新表的查询,最后删除此触发器:
delimiter //
create trigger beforeYourTableUpdate BEFORE UPDATE on YourTable
FOR EACH ROW
BEGIN
SET new.guid_column := (SELECT UUID());
END
//
Run Code Online (Sandbox Code Playgroud)
然后执行
UPDATE YourTable set guid_column = (SELECT UUID());
Run Code Online (Sandbox Code Playgroud)
而且DROP TRIGGER beforeYourTableUpdate;
更新 另一个不使用触发器但需要主键或唯一索引的解决方案:
UPDATE YourTable,
INNER JOIN (SELECT unique_col, UUID() as new_id FROM YourTable) new_data
ON (new_data.unique_col = YourTable.unique_col)
SET guid_column = new_data.new_id
Run Code Online (Sandbox Code Playgroud)
再次更新:似乎您的原始查询也应该工作(也许您不需要WHERE columnID is not null,因此不需要我所有的花哨代码.
小智 19
批准的解决方案确实创建了唯一的ID,但乍一看它们看起来相同,只有前几个字符不同.
如果你想要明显不同的键,试试这个:
update CityPopCountry set id = (select md5(UUID()));
MySQL [imran@lenovo] {world}> select city, id from CityPopCountry limit 10;
+------------------------+----------------------------------+
| city | id |
+------------------------+----------------------------------+
| A Coruña (La Coruña) | c9f294a986a1a14f0fe68467769feec7 |
| Aachen | d6172223a472bdc5f25871427ba64e46 |
| Aalborg | 8d11bc300f203eb9cb7da7cb9204aa8f |
| Aba | 98aeeec8aa81a4064113764864114a99 |
| Abadan | 7aafe6bfe44b338f99021cbd24096302 |
| Abaetetuba | 9dd331c21b983c3a68d00ef6e5852bb5 |
| Abakan | e2206290ce91574bc26d0443ef50fc05 |
| Abbotsford | 50ca17be25d1d5c2ac6760e179b7fd15 |
| Abeokuta | ab026fa6238e2ab7ee0d76a1351f116f |
| Aberdeen | d85eef763393862e5fe318ca652eb16d |
+------------------------+----------------------------------+
Run Code Online (Sandbox Code Playgroud)
我使用的是MySQL Server版本:5.5.40-0 + wheezy1(Debian)
小智 11
select @i:=uuid();
update some_table set guid = (@i:=uuid());
Run Code Online (Sandbox Code Playgroud)
数据库管理系统
UPDATE tablename SET columnName = UUID()
Run Code Online (Sandbox Code Playgroud)
甲骨文
UPDATE tablename SET columnName = SYS_GUID();
Run Code Online (Sandbox Code Playgroud)
SQL服务器
UPDATE tablename SET columnName = NEWID();;
Run Code Online (Sandbox Code Playgroud)
只是一个小小的补充,因为我在尝试修改生成的UUID时得到了一个奇怪的结果.我找到了答案通过拉克什是最简单的运作良好,除了要剥去破折号案件.
以供参考:
UPDATE some_table SET some_field=(SELECT uuid());
Run Code Online (Sandbox Code Playgroud)
这本身就完美无缺.但是当我尝试这个时:
UPDATE some_table SET some_field=(REPLACE((SELECT uuid()), '-', ''));
Run Code Online (Sandbox Code Playgroud)
然后所有得到的值都是相同的(不是微妙的不同 - 我用GROUP BY some_field查询检查了四倍).无论我如何定位括号,都会发生同样的事情.
UPDATE some_table SET some_field=(REPLACE(SELECT uuid(), '-', ''));
Run Code Online (Sandbox Code Playgroud)
在围绕子查询生成带有REPLACE的UUID时,它似乎只运行一次UUID查询,这对于比我更聪明的开发人员的优化可能是完全合理的,但它对我没有.
要解决此问题,我只需将其拆分为两个查询:
UPDATE some_table SET some_field=(SELECT uuid());
UPDATE some_table SET some_field=REPLACE(some_field, '-', '');
Run Code Online (Sandbox Code Playgroud)
显然,简单的解决方案,但希望这将节省一些我失去的时间.
| 归档时间: |
|
| 查看次数: |
148446 次 |
| 最近记录: |