Рассмотрим таблицу:
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;
То, что я хотел бы сделать, это знать идентификатор, который использовался с предыдущим оператором вставки.
ВСТАВИТЬ В ЗНАКИ (данные) ЗНАЧЕНИЯ ('[некоторые данные]') *
Учитывая реплицированную среду master-master, в которой [некоторые данные] не гарантированно являются уникальными. Очевидно, что 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, работающего на коллекции веб-серверов.
Есть мысли, как вернуть uuid pk в mysql?