Dokumentasi
untuk LAST_INSERT_ID()
mengatakan:
Mengetahui hal ini, Anda dapat menjadikan ini sebagai proses multi-langkah:
- MASUKKAN ABAIKAN
- jika LAST_INSERT_ID(), maka selesai (baris baru dimasukkan)
- else SELECT your_primary key FROM yourtable WHERE (batasan UNIK data yang dimasukkan)
Contoh dengan negara bagian AS:
id | abbrev | other_data
1 | AL | ...
2 | AK |
UNIQUE KEY abbr (abbrev)
Sekarang, menyisipkan baris baru:
INSERT IGNORE INTO `states` (`abbrev`,`other_data`) VALUES ('AZ','foo bar');
> OK
SELECT LAST_INSERT_ID();
> "3"
// we have the ID, we're done
Menyisipkan baris yang akan diabaikan:
INSERT IGNORE INTO `states` (`abbrev`,`other_data`) VALUES ('AK','duplicate!');
> OK
SELECT LAST_INSERT_ID();
> "0"
// oops, it already exists!
SELECT id FROM `states` WHERE `abbrev` = 'AK'; // our UNIQUE constraint here
> "2"
// there we go!
Sebagai alternatif, ada kemungkinan solusi untuk melakukan ini dalam satu langkah - gunakan REPLACE INTO
alih-alih INSERT IGNORE INTO
- sintaksnya sangat mirip
. Namun perhatikan bahwa ada efek samping dengan pendekatan ini - ini mungkin atau mungkin tidak penting bagi Anda:
- GANTI menghapus+membuat ulang baris
- jadi pemicu HAPUS, um, dipicu
- juga, ID utama akan bertambah meskipun baris ada
INSERT IGNORE
menyimpan data baris lama,REPLACE
menggantinya dengan data baris baru