Yeni satırın üzerinde değer artışı

0 Cevap php

Bir web uygulamasında bu tablo tasarım göz önüne alındığında:

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

Yeni bir fatura revizyon eklemek ve atanmış revizyon numarasını geri almak için en kullanışlı ve güvenilir yolu nedir?

İlk açık yaklaşım, paylaşılan bir ortamda beni güvenilmez vurur:

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);

Bu alternatif görünüyor slightly daha iyi (aslında iyi olmadığını bilmiyorum):

INSERT INTO invoice (invoice_nr, revision)
SELECT 31416, MAX(revision)+1
FROM invoice
WHERE invoice_nr = 31416;

Ben yeni bir sorgu çalıştırdığınızda sürece ... ama revizyon numarasını bilemeyiz:

SELECT MAX(revision) AS last_revision
FROM invoice
WHERE invoice_nr = 31416;

Önerilen bir yöntem var mı?

mysql_query() ark - App iyi eski mysql uzantısı PHP ile çalışır.

0 Cevap