mysql批量生成32位uuid不重复

今天需要使用navicat批量导入excel中的数据,
1)首先需要设置ID字段可为空
2)正常将excel数据导入到数据库中
3)执行以下sql语句批量生成uuid

UPDATE 表名 SET  ID =  REPLACE(UUID(), '-', '');

mysql生成一个UUID方法(带横杠 -)

SELECT UUID();   

替换UUID中的 ‘-’

SELECT REPLACE(UUID(), '-', '');
### 配置MySQL以自动为每一行生成唯一的UUID值 为了在MySQL中实现UUID的自动生成,可以通过多种方法来完成这一目标。以下是几种常见的解决方案: #### 方法一:通过`DEFAULT`属性设置列默认值 可以在创建表时定义一个具有`DEFAULT UUID()`特性的字段。这样,在每次插入新记录而未指定该字段的值时,MySQL会自动为其分配一个新的UUID。 ```sql CREATE TABLE example_table ( id CHAR(36) NOT NULL DEFAULT (UUID()), name VARCHAR(255), PRIMARY KEY (id) ); ``` 此方法利用了MySQL内置的`UUID()`函数[^1],能够确保每条记录都有一个独特的标识符。 #### 方法二:使用触发器(Trigger) 如果已有表格或者希望直接修改现有结构,则可以借助触发器来实现在插入操作前动态生成UUID的功能。 ```sql DELIMITER $$ CREATE TRIGGER before_insert_example_table BEFORE INSERT ON example_table FOR EACH ROW BEGIN IF NEW.id IS NULL THEN SET NEW.id = UUID(); END IF; END$$ DELIMITER ; ``` 上述脚本建立了一个名为`before_insert_example_table`的触发器,当向`example_table`插入数据且未提供`id`值时,它将调用`UUID()`函数来自动生成并填充这个缺失的值[^2]。 #### 方法三:批量插入过程中生成UUID 对于需要一次性导入大量数据的情况,可以直接在SQL语句内部嵌入`UUID()`调用来处理每一个单独的数据项。 ```sql INSERT INTO table_a(id, name) SELECT UUID(), b.name FROM table_b AS b WHERE 1=1; ``` 这种方法特别适用于从其他表复制数据的情形下保持各条目间的区分度[^3]。 #### 考虑事项与优化建议 尽管`UUID()`提供了极高的唯一性保障,但在某些场景下可能会遇到性能瓶颈或是存储空间浪费等问题。例如,由于其随机性质可能导致索引构建变得低效;另外,标准格式下的UUID占用较多字节数量也可能成为大型项目中的负担。针对这些问题,有研究指出采用更紧凑形式表示的方法如MD5散列化后的结果作为替代方案之一[^4][^5]。 然而需要注意的是,虽然经过哈希转换后得到的新串具备较低视觉重复率特性,但从理论上讲仍存在碰撞可能性,并且丧失掉原始时间戳信息等内容意义。因此除非确实面临特殊需求限制,一般推荐继续沿用未经加工的标准版UUID设计思路即可满足绝大多数实际应用场景的需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值