You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

mysql生成唯一id函数

MySQL中,一般使用自增长列(Auto Increment)来生成唯一ID,在大部分情况下都是非常方便和高效的。但是,对于一些特殊情况,可能需要使用自定义的生成唯一ID的函数

下面我们将介绍两种方式去创建MySQL生成唯一ID的函数

一、使用UUID

UUID,即通用唯一识别码(Universally Unique Identifier),是一种用于标识信息的标准格式。它是一个128位数,通过算法生成,并且不重复,因此非常适合做为唯一ID。

MySQL自带了UUID函数,可以很方便地生成UUID类型的唯一ID:

SELECT UUID();

运行结果类似这样:

'9f205fd6-5b02-11e9-8f11-9cb6d09c62fc'

对于有大量表和使用频繁的服务而言,直接写SQL语句获取UUID是不实际的,需要在MySQL中定义函数来获取UUID。

DELIMITER $$
  
CREATE FUNCTION `uuid`() RETURNS CHAR(36)
begin
    return REPLACE(UUID(), '-', '');
end$$
  
DELIMITER ;

这样,每次在各个表中需要获取UUID的时候,我们只需要调用定义好的函数就行。

二、使用序列(Sequence)

另一个生成唯一ID的方法是使用序列。序列是一种对象,用于生成单调递增的数字序列。在MySQL中,我们可以使用自增长列实现序列的功能,并且其速度也非常快。

我们可以通过以下方式定义一个序列:

CREATE TABLE sequence (
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id)
);

在每次需要新的唯一ID的时候,我们可以通过INSERT INTO语句向序列中插入数据,然后使用3427186函数获取最新自增ID即可:

INSERT INTO sequence DEFAULT VALUES;
SELECT 3427186;

每次使用ID之后,如果不适用该ID了,可以使用DELETE FROM sequence WHERE id<3427186来清除已经用过的ID,从而避免数据的垃圾产生。

总结

通过上面两种方法,我们可以在不使用自动增长列的情况下,生成MySQL中的唯一

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
基于云平台的即开即用、稳定可靠、灵活弹性、易于使用的关系型数据库服务

社区干货

MySQL5.7的SQL Modes常见问题分析

MySQL [dbtest]> select min(update_time),name,id from tb_author group by name;ERROR 1055 (42000): Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'dbtest.tb_... 通过grant创建新用户(NO_AUTO_CREATE_USER)```mysql> grant all on *.* to 'dbmantest'@'%';ERROR 1133 (42000): Can't find any matching row in the user table```### 解决方法加上identified by 赋值账户...

MySQL5.7的SQL Modes常见问题分析

MySQL [dbtest]> select min(update_time),name,id from tb_author group by name;ERROR 1055 (42000): Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'dbtest.tb_... 通过grant创建新用户(NO_AUTO_CREATE_USER)````undefinedmysql> grant all on *.* to 'dbmantest'@'%';ERROR 1133 (42000): Can't find any matching row in the user table````### 解决方法加上identifie...

精选文章|MySQL深分页优化

**MySQL深分页优化**![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/1499ce77b4ea4b91b806bfab2774e01f~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=17147... insert into t1(m_id, name, identity_no, address, create_time, modify_time) select @i:=@i+1 as m_id, #随机生成1~10的整数 concat('这里是随机中英文的名字—'...

如何排查RDS for MySQL 查询语句被阻塞问题

mysql> select * from information_schema.innodb_trx\G````2.您可以运行如下查询来查看哪些事务正在等待,以及看到哪个事务被阻塞````undefinedmysql> SELECTr.trx_id waiting_trx_id,r.trx_mysql_thread_id waiting_thread,r.trx_query waiting_query,b.trx_id blocking_trx_id,b.trx_mysql_thread_id blocking_thread,b.trx_query blocking_queryFROM information_schema.innodb_lock_waits wINNER JOIN informat...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

2核4G共享型云服务器

Intel CPU 性能可靠,不限流量,学习测试、小型网站、小程序开发推荐,性价比首选
86.00/1908.00/年
立即购买

mysql生成唯一id函数-优选内容

MySQL5.7的SQL Modes常见问题分析
MySQL [dbtest]> select min(update_time),name,id from tb_author group by name;ERROR 1055 (42000): Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'dbtest.tb_... 通过grant创建新用户(NO_AUTO_CREATE_USER)````undefinedmysql> grant all on *.* to 'dbmantest'@'%';ERROR 1133 (42000): Can't find any matching row in the user table````### 解决方法加上identifie...
精选文章|MySQL深分页优化
**MySQL深分页优化**![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/1499ce77b4ea4b91b806bfab2774e01f~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=17147... insert into t1(m_id, name, identity_no, address, create_time, modify_time) select @i:=@i+1 as m_id, #随机生成1~10的整数 concat('这里是随机中英文的名字—'...
使用限制(源库为 MySQL)
本文介绍当迁移的目标库类型为 MySQL(如火山引擎版 MySQL 或自建 MySQL)时,支持的数据库以及使用限制详情。 支持的数据库 源库 目标库 支持版本 迁移类型 同步类型 火山引擎版 MySQL 火山引擎版 ve... 需设置参数 gtid_mode 为 ON。 源库的操作限制: 在链路创建、库表结构迁移或初始化,以及全量迁移或初始化阶段,请勿执行库或表结构变更的 DDL 操作,否则数据迁移或初始化任务会失败。 增量迁移或同步阶段仅支持如下...
常用概念
创建成功后不支持更改。 可用区(Availability Zones) 指在同一地域下,电力、网络互相隔离的物理区域。可用区之间内网互通,可用区内网络延时更小,不同可用区之间可实现故障隔离。 实例(Instance) 云数据库 veDB MySQL 版进行云资源管理的基本单位。 实例名称(Instance Name) 用户可以自定义云数据库 veDB MySQL 版实例的名称。 实例 ID(Instance ID) 用户创建云数据库 veDB MySQL 版实例后,系统会自动生成 ID,实例 ID 全局唯一。 ...

mysql生成唯一id函数-相关内容

mysql函数

user — MySQL用户. password — 用户密码. replace_query — 将INSERT INTO查询转换为REPLACE INTO的标志。0 - 查询被执行为 INSERT INTO。 1 - 查询被执行为 REPLACE INTO。 on_duplicate_clause — 添加 ON DUPLICATE KEY on_duplicate_clause 表达式到 INSERT 查询。使用此项时,需要设置 replace_query = 0 。如果你同时设置replace_query = 1和on_duplicate_clause,ClickHouse / ByteHouse将产生异常。 简单的 WHERE 子句...

基础使用

以下对基本的库表操作做一个示例 本文以MySQL Client方式为例, 进行样例SQL执行 1 创建用户通过下面的命令创建一个普通用户: plaintext CREATE USER 'test_user' IDENTIFIED BY 'test_user_passwd';后续登录时即可... label 为用户指定的 label 或自动生成的 label。Label 是该 Insert Into 导入作业的标识。每个导入作业,都有一个在单 database 内部唯一的 Label。示例: sql INSERT INTO tbl2 WITH LABEL label1 SELECT * FROM tb...

MySQL CDC

PRIMARY KEY (order_id) NOT ENFORCED -- 如果要同步的数据库表定义了主键, 则这里也需要定义主键。 ) WITH ( 'connector' = 'mysql-cdc', 'hostname' = 'localhost', 'port' = '3306', ... server-id 否 (none) Integer 读取数据使用的 server id,server id 可以是个整数或者一个整数范围,比如 5400 或 5400~5408。默认情况下,连接器会在 5400 和 6400 之间生成一个随机数,但是建议用户明确指定 S...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

2核4G共享型云服务器

Intel CPU 性能可靠,不限流量,学习测试、小型网站、小程序开发推荐,性价比首选
86.00/1908.00/年
立即购买

使用 MySQL Console 客户端访问企业级 SQL 分析节点

准备工作在本地 MySQL 客户端连接 SQL 分析节点时,需要提前完成以下准备工作: 在本地已安装 MySQL,并配置环境变量。 如果需要使用公网连接 SQL 分析节点,需要提前开启公网访问,请参见配置 SQL 分析节点公网访问。 连接 SQL 分析节点前,需要提前在实例的企业级 SQL 分析节点页面查看并获取连接信息,包含 SQL 分析节点的访问地址、端口号、登录用户和密码。 步骤一:在实例中创建索引并写入数据登录 Kibana/Dashboards。 在 Dev ...

如何合理配置MySQL Slow Query Log

利用benchmark函数来验证````undefinedmysql> select benchmark(100000000,1000000*1000000);+--------------------------------------+| benchmark(100000000,1000000*1000000) |+-------------------------... Id: 2# Query_time: 1.439743 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0SET timestamp=1635473458;select benchmark(100000000,1000000*1000000);````## 2.log_queries_not_using_indexes...

如何查看RDS for MySQL 数据库实例当前运行的事务

# 问题描述我该如何查看RDS for MySQL 当前运行的事务?# 解决方案MySQL 提供了丰富的命令与日志帮助您查看MySQL当前运行的事务,这有助于帮助您分析服务器负载,进行问题排查。## MySQL日志1. 打开MySQL 慢日志... mysql> show full processlist\G;*************************** 1. row *************************** Id: 6213 # connection id User: repl # 连接用户 Host: 172.22.175.136:44020 db: NULL #所...

硬核干货!一文掌握 binlog 、redo log、undo log|社区征文

MySQL 5.7.7 之后,默认值是 ROW。日志格式通过 binlog-format 指定。- **ROW**:基于行的复制(row-based replication, RBR),不记录每条 SQL 语句的上下文信息,仅需记录哪条数据被修改了。如果一个 update 语句修改一百行数据,那么这种模式下就会记录 100 行对应的记录日志。 优点:不会出现某些特定情况下的存储过程、或 function、或 trigger 的调用和触发无法被正确复制的问题; 缺点:会产生大量的日志,尤其是 alt...

MySQL 2038 问题分析

mysql> insert into student_score select * from student_score limit 1;Query OK, 1 row affected (0.00 sec)Records: 1 Duplicates: 0 Warnings: 0```查看当前连接的processlist id 和 对应的 OS_ID```... 在语句执行性会调用 gettimeofday() 系统函数,用于检查时间是否大于 2038,并进行重试 5 次,然后接着就会 shutdown MySQL [2]。````undefinedif (is_time_t_valid_for_timestamp(thd->query_start_in_secs()) == ...

如何合理配置MySQL Slow Query Log

利用benchmark函数来验证```mysql> select benchmark(100000000,1000000*1000000);+--------------------------------------+| benchmark(100000000,1000000*1000000) |+----------------------------------... Id: 2# Query_time: 1.439743 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0SET timestamp=1635473458;select benchmark(100000000,1000000*1000000);```## 2.log_queries_not_using_indexes...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

2核4G共享型云服务器

Intel CPU 性能可靠,不限流量,学习测试、小型网站、小程序开发推荐,性价比首选
86.00/1908.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

数据智能知识图谱
火山引擎数智化平台基于字节跳动数据平台,历时9年,基于多元、丰富场景下的数智实战经验打造而成
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询