我的逻辑需要在 INSERT 之前知道表的 ID(插入时手动设置 id)。因为使用这个 ID 的逻辑在不止一个服务器上,让 mysql 创建一个 id 可能是个好主意,但我写的函数不是原子的,所以在高负载下调用它会返回一些相同的,而不是唯一的数字:
CREATE FUNCTION `generate_document_log_id`() RETURNS BIGINT(16)
BEGIN
DECLARE R_ID BIGINT(16);
UPDATE document_log_sequence SET id = id + 1;
SELECT id INTO R_ID FROM document_log_sequence;
RETURN R_ID;
END
我正在使用带有一列“id”的表“document_log_sequence”来存储最后一个 ID 并为每个新 ID 递增它。也许解决方案远非如此,但我没有更多的想法。
我忘了解释:只有一个数据库服务器和 n 个客户端。上面的函数不是(某种)线程安全的。