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

Bagaimana mencegah komit implisit mysql

Pendekatan hacky lain yang baru saja saya coba dengan sukses adalah mendapatkan DDL buat tabel melalui perintah khusus mysql

SHOW CREATE TABLE `tableName`

Kemudian buat beberapa keajaiban regexp dan buat kueri DDL baru yang akan membuat tabel sementara berdasarkan tabel asli, dengan semua perubahan tabel yang diubah dimasukkan ke dalam tabel buat.

Dalam proyek berbasis PHP saya, saya melakukan hal berikut untuk menambahkan indeks unik ke tabel sementara. Itu berhasil dan tidak ada lagi komit implisit yang terjadi di tengah-tengah transaksi.

$createDDL = ... get from SHOW CREATE TABLE `tableName`
$nr = 0;
$createDDL = preg_replace("/CREATE TABLE `$tableName` \(/", "CREATE TEMPORARY TABLE `$tmpName` (\nUNIQUE `ukey-1` ($uniqCols),", $createDDL, -1, $nr);
if (!$nr)
  throw new Exception("CREATE TABLE replacement error. No reps made.");
mysqli_query($con, $createDDL);

EDIT Omong-omong, inilah beberapa laporan bug (fitur) (sejak bertahun-tahun). Pada bagian pertama Anda dapat melihat respons (berasal dari 2006) yang menyatakan:karena perilaku ini sama dengan di Oracle db, ini adalah yang konsisten...

Mungkin permintaan fitur "kampanye spam" harus dimulai agar permintaan fitur ini dihidupkan kembali!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP menghasilkan sisipan PDO dinamis

  2. Hasilkan urutan integer di MySQL

  3. menyebarkan data mysql di beberapa disk

  4. MySQL mengonversi YEARWEEK ke tanggal

  5. Rata-rata tertimbang MySQL dalam satu kueri