sql >> Database teknologi >  >> RDS >> Mysql

Hvordan fungerer det at få mysqls sidste indsættelses-id med transaktioner? + transaktionsspørgsmål

For at besvare dit første spørgsmål...

Når du bruger transaktioner, udføres dine forespørgsler normalt, hvad angår din forbindelse. Du kan vælge at forpligte, gemme disse ændringer eller rulle tilbage, og gendanne alle ændringerne. Overvej følgende pseudo-kode:

insert into number(Random_number) values (rand()); 
select Random_number from number where Number_id=Last_insert_id();

//php

if($num < 1)
   $this->db->query('rollback;'); // This number is too depressing.
else
   $this->db->query('commit;'); // This number is just right.

Det tilfældige tal, der blev genereret, kan læses før commit for at sikre, at det er egnet, før det gemmes, så alle kan se det (f.eks. commit og lås op for rækken).

Hvis PDO-driveren ikke virker, kan du overveje at bruge mysqli-driveren. Hvis det ikke er en mulighed, kan du altid bruge forespørgslen 'select last_insert_id() som id;' i stedet for $this->db->insert_id()-funktionen.

For at besvare dit andet spørgsmål, hvis du indsætter eller opdaterer data, som andre modeller vil opdatere eller læse, skal du sørge for at bruge transaktioner. Hvis f.eks. en kolonne 'Number_maining' er sat til 1, kan følgende problem opstå.

Person A reads 1
Person B reads 1
Person A wins $1000!
Person A updates 1 to be 0
Person B wins $1000!
Person B updates 0 to be 0

Brug af transaktioner i samme situation ville give dette resultat:

Du kan eventuelt læse mere om transaktionsisoleringsniveauer også.

Vær forsigtig med dødvande, som kan opstå i dette tilfælde:

Til sidst, da person B sandsynligvis har nået PHP's max_execution_time , vil den aktuelle forespørgsel afslutte eksekvering uafhængigt af PHP, men der modtages ingen yderligere forespørgsler. Hvis dette var en transaktion med autocommit=0, vil forespørgslen automatisk blive rullet tilbage, når forbindelsen til din PHP-server afbrydes.




  1. MySQL One-to-Many til JSON-format

  2. Tabelnavngivningsdilemma:Ental vs. flertalsnavne

  3. MySQL installation

  4. SQL-forespørgsel langsom i .NET-applikation, men øjeblikkelig i SQL Server Management Studio