MySQL では、行の挿入と「最終挿入 ID」の更新を同時に行うことができます。私はこのトリックを使用して、アイテムを条件付き (一意性) に挿入し、すべての場合に一意の ID を取得できるようにしています。
以下のコードは機能します。問題は、ON DUPLICATE KEY
ステートメントがAuto_increment
値も更新することです。それを避けることは可能ですか?
CREATE TABLE T(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
X VARCHAR(64) NOT NULL UNIQUE
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
INSERT INTO T(X) VALUES ('x') ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id);
SELECT LAST_INSERT_ID();
INSERT INTO T(X) VALUES ('x') ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id);
SELECT LAST_INSERT_ID();
これで、 で 1 つのエントリができましid=1
た。ただし、 2 番目のエントリが失敗したときに値が更新されたため、次のエントリには値が含まれます。これは次のように確認できます。id=3
Auto_increment
INSERT
SELECT Auto_increment FROM information_schema.tables WHERE table_name = 't'
AND table_schema = DATABASE();
Q:このトリック (または同等のもの) を使用してAuto_increment
値を保持することは可能ですか? 明らかに、この場合、更新する必要はありません。