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

Bagaimana cara mendapatkan ID sisipan terakhir mysql bekerja dengan transaksi? + pertanyaan transaksi

Untuk menjawab pertanyaan pertama Anda...

Saat menggunakan transaksi, kueri Anda dijalankan secara normal sejauh menyangkut koneksi Anda. Anda dapat memilih untuk melakukan, menyimpan perubahan tersebut, atau mengembalikan, mengembalikan semua perubahan. Perhatikan pseudo-code berikut:

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.

Nomor acak yang dihasilkan dapat dibaca sebelum dikomit untuk memastikan bahwa itu cocok sebelum menyimpannya untuk dilihat semua orang (misalnya komit dan membuka kunci baris).

Jika driver PDO tidak berfungsi, pertimbangkan untuk menggunakan driver mysqli. Jika itu bukan opsi, Anda selalu dapat menggunakan kueri 'select last_insert_id() as id;' daripada fungsi $this->db->insert_id() .

Untuk menjawab pertanyaan kedua Anda, jika Anda memasukkan atau memperbarui data yang akan diperbarui atau dibaca oleh model lain, pastikan untuk menggunakan transaksi. Misalnya, jika kolom 'Number_remaining' disetel ke 1, masalah berikut dapat terjadi.

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

Menggunakan transaksi dalam situasi yang sama akan menghasilkan hasil ini:

Anda mungkin ingin membaca tentang tingkat isolasi transaksi juga.

Hati-hati dengan kebuntuan, yang dapat terjadi dalam hal ini:

Pada akhirnya, karena Orang B mungkin telah mencapai max_execution_time PHP , kueri saat ini akan selesai dieksekusi secara independen dari PHP, tetapi tidak ada kueri lebih lanjut yang akan diterima. Jika ini adalah transaksi dengan autocommit=0, kueri akan dibatalkan secara otomatis saat koneksi ke server PHP Anda terputus.




  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 - Cara menyisipkan ke tabel yang memiliki hubungan banyak-ke-banyak

  2. MySQL:InnoDb:Menunggu semaphore telah berlangsung> 600 detik. Kami sengaja merusak server

  3. Php , Mysql Pilih dari tabel dimana baris =? apakah mungkin?

  4. Tidak dapat membuka dan mengunci tabel hak istimewa:Tabel 'mysql.user' tidak ada

  5. Tidak dapat menghubungkan mysql dari permata Sekuel