【发布时间】:2012-02-17 04:21:57
【问题描述】:
考虑表格:
CREATE TABLE `information` (
`id` char(36) NOT NULL,
`data` text NOT NULL,
PRIMARY KEY (`id`)
)
使用触发器:
CREATE TRIGGER `information_uuid_ins_trg`
BEFORE INSERT ON information
FOR EACH ROW
BEGIN
SET NEW.id = UUID();
END;
我想做的,是知道之前插入语句使用的 id。
INSERT INTO information (data) VALUES ('[some data]')
给定一个复制的主-主环境,其中 [某些数据] 不能保证是唯一的。显然,last_insert_id() 不能使用,因为该字段不是 auto_increment 字段。使用 LAST_INSERT_ID(UUID( )) 添加临时表的更新将不起作用,因为 LAST_INSERT_ID(expr) 需要一个整数值作为 expr。在 OracleRDBMS 中,我会使用:
INSERT INTO information
(data) values ('[some data]')
RETURNING id INTO var_id
或者我会使用 Microsoft SQL Server / Postgres:
INSERT INTO information
(data) values ('[some data]')
OUTPUT INSERTED.*
这将全部从运行在一组网络服务器上的 PHP 前端调用。
关于如何在 mysql 中返回 uuid pk 有什么想法吗?
【问题讨论】:
标签: mysql primary-key replication uuid