为了以后分布式分表的方便,现在我想将id值换成UUID()的值,不用自增id来作为主键。
如下这种方式时需要人设置,:
INSERT INTO test(uuid) VALUES(UUID());
mysql 新增一条记录时怎么让id的值为mysql默认的uuid()的值?就像自增id那样,当我插入一天数据时,不用指定自增id的值,数据库自动增长。
请问怎么将id的值设置为当新增一天记录时,id自动为UUID()的值。
为了以后分布式分表的方便,现在我想将id值换成UUID()的值,不用自增id来作为主键。
如下这种方式时需要人设置,:
INSERT INTO test(uuid) VALUES(UUID());
mysql 新增一条记录时怎么让id的值为mysql默认的uuid()的值?就像自增id那样,当我插入一天数据时,不用指定自增id的值,数据库自动增长。
请问怎么将id的值设置为当新增一天记录时,id自动为UUID()的值。
创建个触发器,如下
create trigger tri_auto_uuid
before insert
on test
for each ROW
BEGIN
set test.id = (select uuid());
END
5 回答3.3k 阅读✓ 已解决
3 回答3.7k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
2 回答2.1k 阅读
3 回答2k 阅读
1 回答3.6k 阅读
可以这样试试:
更正
刚才草率地回答了,看来MySQL的DEFAULT是不支持函数的,只有
CURRENT_TIMESTAMP
是个例外。通常在数据库分库后,主键仍旧得是集中式生成的,生成方式有很多种,比如用一个“主数据库”的自增列、用Redis、程序自己生成(正如题主所说用UUID)。
但还有一个办法,尽管不常用,但处理起来比较简单,就是给每个库设置一定的自增规律,让他们不重复,有两种办法,以2个库为例:
第一个库主键自增规则是
2 n + 1
(从1开始,每次自增2),第二个库是2 n + 2
(从2开始,每次自增2),自增步长可以通过修改my.cnf
文件实现;先预计整个表的主键上限,比如1,000,000,000(10亿),第一个库主键从1开始自增,第二个库的从1,000,000,001开始自增。