Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mysql - setelah memasukkan abaikan dapatkan kunci utama

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mendapatkan pesan SQLEXCEPTION dalam prosedur MySQL 5.5.x

  2. jarak hamming mysql antara dua phash

  3. Jalankan MySQLDump tanpa Mengunci Tabel

  4. Ambil alamat ip klien di mysql

  5. Apa cara terbaik untuk menyimpan Nilai Kotak Centang di Database MySQL?