考虑下表:
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;
我想做的是,知道上一个insert语句中使用的id。
INSERT INTO信息(数据)值("[某些数据]")
给定一个复制的主控环境,其中[某些数据]不能保证是唯一的。显然不能使用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.*
这一切都将从运行在一组Web服务器上的PHP前端调用。
关于如何在mysql中返回uuid-pk,有什么想法吗?
由于MySQL似乎没有任何内置功能来帮助您,很遗憾,我想不出比这个"黑客"更好的了;
DELIMITER //
CREATE TRIGGER `information_uuid_retrieve`
AFTER INSERT ON information
FOR EACH ROW
BEGIN
SET @INSERT_ID=NEW.id;
END;//
DELIMITER ;
INSERT INTO information (data) VALUES ('olle');
SELECT @INSERT_ID;
+--------------------------------------+
| @INSERT_ID |
+--------------------------------------+
| f42f4044-58d0-11e1-8f90-93738648d450 |
+--------------------------------------+