gpt4 book ai didi

mySQL 和 LAST_INSERT_ID 问题

转载 作者:行者123 更新时间:2023-11-29 15:09:25 30 4
gpt4 key购买 nike

我有一个数据库应用程序,现在我们必须从复制(主-主-复制)开始。我们构建一个返回 BIGINT 的存储函数。该值在所有涉及的服务器上都是唯一的。

情况:我有一个表定义:

create table test (
id BIGINT not null primary key auto_increment,
col1 TEXT);

该表有一个插入前触发器:

CREATE TRIGGER test_insert BEFORE INSERT ON test
FOR EACH ROW BEGIN
IF NEW.id = 0 THEN
SET @my_uuid = MYUUID();
SET NEW.id = @my_uuid;
END IF;
END;

插入测试(col1)值(“foo”)后,我需要 LAST_INSERT_ID() 的值 - 但我只得到值“0”。

我在触发器中尝试了这个:

SET NEW.id = LAST_INSERT_ID(@my_uuid);

但它不起作用。

我阅读了 mysql 手册页,其中提到,触发器和函数内对 last_insert_id 的所有更改都将在触发器结束时取消。

所以我尽量避免更改应用程序(使用 php.last_insert_id())...

有什么想法可以在不更改 php 代码的情况下解决这个问题吗?

问候。

最佳答案

我假设您试图避免在两个母版上以相同 ID 结尾的插入。

实现此目的的一种方法(假设有 2 个 master)是设置 auto_increment_increment至 2,以及 auto_increment_offset在一个主机上为 0,在另一个主机上为 1。

这将导致每个主机上的 id 不能与其他主机冲突。

旁白:使用 bigint 和随机 UUID,由于生日悖论,您当前的方法可能会在大约 30 亿行中发生冲突。

关于mySQL 和 LAST_INSERT_ID 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1211411/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com