Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mysql - po wstawieniu zignoruj ​​pobierz klucz podstawowy

Dokumentacja dla LAST_INSERT_ID() mówi:

Wiedząc o tym, możesz uczynić ten proces wieloetapowym procesem:

  • WSTAW IGNORUJ
  • jeśli LAST_INSERT_ID(), to zrobione (wstawiono nowy wiersz)
  • w przeciwnym razie SELECT your_primary key FROM yourtable WHERE (unikalne ograniczenia wprowadzonych danych)

Przykład ze stanami USA:

id  | abbrev | other_data
 1  | AL     | ...
 2  | AK     |

UNIQUE KEY abbr (abbrev)

Teraz wstawiam nowy wiersz:

INSERT IGNORE INTO `states` (`abbrev`,`other_data`) VALUES ('AZ','foo bar');
> OK
SELECT LAST_INSERT_ID();
> "3"
// we have the ID, we're done

Wstawianie wiersza, który zostanie zignorowany:

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!

Alternatywnie, istnieje możliwość obejścia tego w jednym kroku — użyj REPLACE INTO zamiast INSERT IGNORE INTO - składnia jest bardzo podobna . Pamiętaj jednak, że istnieją skutki uboczne przy takim podejściu — mogą one być dla Ciebie ważne lub nie:

  • ZAMIEŃ usuwa + odtwarza wiersz
    • więc wyzwalacze DELETE są, hm, wyzwalane
    • także podstawowy identyfikator zostanie zwiększony, nawet jeśli wiersz istnieje
    • INSERT IGNORE zachowuje stare dane wiersza, REPLACE zastępuje go nowymi danymi wiersza


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL otrzymuje wiersze, ale preferuje jedną wartość kolumny nad inną

  2. Wywołaj procedurę składowaną dla każdego wiersza zwróconego przez zapytanie w MySQL

  3. UnicodeEncodeError:kodek „latin-1” nie może zakodować znaku

  4. Najlepszy sposób na zaimplementowanie architektury Klient<->Serwer<-> Bazy danych w aplikacji na Androida?

  5. Najlepsza praktyka:Importuj plik mySQL w PHP; podzielone zapytania