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

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

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

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

clipboard.png

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

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

阅读 14k
4 个回答

可以这样试试:

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开始自增。

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

创建个触发器,如下

create trigger tri_auto_uuid
before insert
on test
for each ROW
BEGIN
set test.id = (select uuid());
END

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题