sql >> Databáze >  >> RDS >> Mysql

Jednoduchá mysql otázka týkající se primárních klíčů a vložky

Váš upřesňující komentář říká, že se zajímáte o to, aby LAST_INSERT_ID() nedávalo špatný výsledek, pokud dojde k dalšímu souběžnému INSERT. Ujišťujeme vás, že je bezpečné používat LAST_INSERT_ID() bez ohledu na jinou souběžnou aktivitu. LAST_INSERT_ID() vrací pouze nejnovější ID vygenerované během aktuální relace.

Můžete to zkusit sami:

  1. Otevřete dvě okna prostředí, v každém spusťte mysqlclient a připojte se k databázi.
  2. Shell 1:INSERT do tabulky s klíčem AUTO_INCREMENT.
  3. Skořápka 1:SELECT LAST_INSERT_ID(), viz výsledek.
  4. Shell 2:INSERT do stejné tabulky.
  5. Shell 2:SELECT LAST_INSERT_ID(), viz výsledek odlišný od shellu 1.
  6. Skořápka 1:SELECT LAST_INSERT_ID()znovu, viz opakování předchozího výsledku.

Pokud se nad tím zamyslíte, je to jediný způsob, který dává smysl. Všechny databáze, které podporují mechanismy automatického zvyšování klíče, se musí chovat tímto způsobem. Pokud výsledek závisí na podmínce sporu s jinými klienty, kteří mohou být INSERTováni souběžně, pak neexistuje žádný spolehlivý způsob, jak získat poslední vloženou hodnotu ID ve vaší aktuální relaci.



  1. MySQL - CONCAT - Existuje nějaký způsob, jak spojit řetězec a použít jej jako proměnnou?

  2. Získávání dat pomocí znakové sady UTF-8 ze serveru MSSQL pomocí rozšíření PHP FreeTDS

  3. while ($row =mysql_fetch_array($result)) - kolik smyček se provádí?

  4. Export tabulky Oracle do listu Excelu