MySQL - 自增主键转换成GUID

8
我有一张表,其中包含一个自增的ID字段,如下所示:
+------------+-------------------------------------+
| company_id | name                                |
+------------+-------------------------------------+
|          1 | International Client                |
|          2 | Oracle                              |
|          3 | test                                |
|          4 | testabc                             |
|          5 | testdef                             |
|          6 | abcd                                |
+------------+-------------------------------------+

我想使用
uuid()
函数将ID列更新为GUID。
另外,如何将外键引用更新为正确的GUID?
3个回答

9

使用触发器。

CREATE TABLE `tbl_test` (
  `GUID` char(40) NOT NULL,
  `Name` varchar(50) NOT NULL,
  PRIMARY KEY (`GUID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
和主键,现在触发器..
DELIMITER //
CREATE TRIGGER `t_GUID` BEFORE INSERT ON `tbl_test`
 FOR EACH ROW begin
 SET new.GUID = uuid();
end//
DELIMITER ;

现在尝试一下,
insert into tbl_test(Name) value('trigger happy...');

问候, /t

没问题。但是有些表格的外键是 GUID。当主表更新时,我该如何更新这些表格呢? - Gaurav Sharma
(主表 = 主键?)一旦设置,为什么要更改主键? - Teson
如果您想为“数据的创建”添加自动时间/日期戳,可以在GUID行之后添加以下代码行:Created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP。 - Jeff Clayton
@Teson - 对我不起作用。所有记录都使用相同的GUID创建。 - Duck
@DuckDucking,听起来很奇怪。快速谷歌搜索显示你可能遭遇了一个bug:https://dev59.com/questions/8VMH5IYBdhLWcg3wtRnA - Teson
@Teson,这就是我怀疑的。谢谢。 - Duck

4

您不能将autoincrement与其一起使用

guid是char而不是intger

您需要自己插入它

同时,您需要将id更改为char(40)

insert into table_name (id,name) values (uuid(),'jon');

3
在 MySQL 8.0 中,您可以使用以下类似的内容:
对于没有破折号的 UUID:
create table temp (`company_id` VARCHAR(64) NOT NULL DEFAULT (REPLACE(UUID(),'-','')), 'name' varchar(100) NOT NULL);

对于带有破折号的 UUID:

create table temp (`company_id` VARCHAR(64) NOT NULL DEFAULT (UUID()), 'name' varchar(100) NOT NULL);

希望这回答了你的问题,如果没有或者你需要更多,请告诉我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接