mysql 新增一条记录时怎么让id的值为uuid的值?

发布于 2022-09-06 02:30:08 字数 446 浏览 24 评论 0

为了以后分布式分表的方便,现在我想将id值换成UUID()的值,不用自增id来作为主键。

如下这种方式时需要人设置,:

INSERT INTO  test(uuid) VALUES(UUID());

clipboard.png

mysql 新增一条记录时怎么让id的值为mysql默认的uuid()的值?就像自增id那样,当我插入一天数据时,不用指定自增id的值,数据库自动增长。

请问怎么将id的值设置为当新增一天记录时,id自动为UUID()的值。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

囍笑 2022-09-13 02:30:08

可以这样试试:

CREATE TABLE ... (
    id VARCHAR(45) NOT NULL PRIMARY KEY DEFAULT UUID(),
    ...
)

更正

刚才草率地回答了,看来MySQL的DEFAULT是不支持函数的,只有CURRENT_TIMESTAMP是个例外。

通常在数据库分库后,主键仍旧得是集中式生成的,生成方式有很多种,比如用一个“主数据库”的自增列、用Redis、程序自己生成(正如题主所说用UUID)。

但还有一个办法,尽管不常用,但处理起来比较简单,就是给每个库设置一定的自增规律,让他们不重复,有两种办法,以2个库为例:

  1. 第一个库主键自增规则是2 n + 1(从1开始,每次自增2),第二个库是2 n + 2(从2开始,每次自增2),自增步长可以通过修改my.cnf文件实现;

  2. 先预计整个表的主键上限,比如1,000,000,000(10亿),第一个库主键从1开始自增,第二个库的从1,000,000,001开始自增。

吖咩 2022-09-13 02:30:08

貌似不行吧。除非写个存储过程?

转身泪倾城 2022-09-13 02:30:08

创建个触发器,如下

create trigger tri_auto_uuid
before insert
on test
for each ROW
BEGIN
set test.id = (select uuid());
END
一身软味 2022-09-13 02:30:08

别干这傻事,每个表都应该有一个整型的主键。用整型主键一样可以分库分表啊。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文