Obțineți id după inserare

Sarcina. obțineți ID-ul de intrare adăugat la tabel.
O condiție necesară. tabelul trebuie să aibă un câmp AUTO_INCREMENT.

  1. Resetați (modificați) valoarea următorului index autoîn MySQL: ALTER TABLE `table_name 'AUTO_INCREMENT = 238;
  2. Când solicitarea INSERT pentru a adăuga mai multe intrări (inserați în `table_name` (field1, ..., fieldm) valori ( 'value11', ..., 'value1m'), ..., ( 'valuen1', ..., 'valuenm');) MySQL LAST_INSERT_ID returnează ID-ul primei înregistrări introduse. dar nu ultimul, după cum se poate presupune.
  3. În unele versiuni ale MySQL, a existat o eroare. în cazul în pretenții INSERT comanda IGNORE (dacă există deja o cheie unică, și se adaugă nimic) LAST_INSERT_ID returnează următoarea valoare disponibilă pentru auto-increment.
  4. Nu utilizați LAST_INSERT_ID, atunci când ar trebui să fie utilizat, este imposibil. Opțiunea "scrie rapid în baza de date și face imediat SELECT valoarea maximă a incrementării automate" este teribil și instabil.

dracului, cât de utilă.

Oameni, și dacă 10-15 conexiuni. Ei bine, asta este 10-15 persoane lucrează în același timp cu baza. Există o mare probabilitate. că pot face o inserție unul câte unul și că datele vor fi confundate.

De aceea, ar trebui să utilizați LAST_INSERT_ID și nu a opta opțiune.

Pentru MS SQL, în loc de @@ IDENTITY, este mai bine să utilizați SCOPE_IDENTITY (). În caz contrar, prima introducere în interiorul declanșatorului va avea ca rezultat erori incomprehensibile și greu de detectat.

Cea mai bună opțiune este
selectați max (id) din tabel;

varle. Opțiunea dvs. este cea mai bună modalitate de a obține ID-ul proaspăt primit de altcineva. Nimeni nu poate garanta că nu va mai fi o inserție între inserție și selectați. Ghiciți ale căror coduri de acces primiți înapoi la max (id)

dacă faceți o inserție și selectați printr-o singură tranzacție, atunci puteți)

Pentru MS SQL.
Ca o opțiune, aveți posibilitatea să creați suplimentar (în plus față de cheia automată incrementală "standard"). câmp (varchar).
Și pentru a identifica (prin GUID) o linie în acest domeniu:

creați procedura [dbo]. [Str_GUID]
(
@sGUID varchar (50) OUTPUT
)
AS
BEGIN
/ *
Calculați GUID-ul și returnați reprezentarea lui (fără delimitatori)
exemplu:
DECLARE @Sx varchar (50)
Executați dbo.Str_GUID @Sx OUTPUT
selectați @Sx, len (@Sx)
* /
DECLARE @idid identificator unic
SET @myid = NEWID ()
set @ sGUID = turnat (@myid ca varchar (50))
set @ sGUID = UPPER (rtrim (ltrim (REPLACE (@sGUID. '-', ''))))
RETURN
END

Lasă un comentariu

Articole similare