С учетом этой схемы таблицы в веб-приложении:
CREATE TABLE `invoice` (
`invoice_nr` int(10) unsigned NOT NULL AUTO_INCREMENT,
`revision` int(10) unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (`invoice_nr`,`revision`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci
Какой самый удобный и надежный способ вставить новую редакцию счета-фактуры и вернуть назначенный номер редакции?
Первыйочевидный подход кажется мне ненадежным в общей среде:
SELECT MAX(revision)+1 AS next_revision -- E.g. 2
FROM invoice
WHERE invoice_nr = 31416;
INSERT INTO invoice (invoice_nr, revision)
VALUES (31416, 2);
Эта альтернатива выглядит немного лучше (я не знаю, действительно ли она лучше):
INSERT INTO invoice (invoice_nr, revision)
SELECT 31416, MAX(revision)+1
FROM invoice
WHERE invoice_nr = 31416;
... но я не могу знать номер ревизии, пока не выполню новый запрос:
SELECT MAX(revision) AS last_revision
FROM invoice
WHERE invoice_nr = 31416;
Есть ли рекомендуемый метод?
Приложение работает на PHP со старым добрым mysqlрасширение - mysql_query()
и др.