1

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=3Auto_incrementINSERT

SELECT Auto_increment FROM information_schema.tables WHERE table_name = 't'
     AND table_schema = DATABASE();

Q:このトリック (または同等のもの) を使用してAuto_increment値を保持することは可能ですか? 明らかに、この場合、更新する必要はありません。

4

0 に答える 0