phpMyAdmin
 sql >> Teknologi Basis Data >  >> Database Tools >> phpMyAdmin

Apakah saya bisa menggunakan transaksi dengan ALTER TABLE?

Beberapa pernyataan (terutama DDL ) di MySQL menyebabkan komit implisit sebelum mereka dieksekusi dan tidak dapat dibatalkan - dengan demikian ini mencegah perubahan DML sebelumnya dibatalkan juga.

Pernyataan yang tercantum di bagian ini (dan sinonim apa pun untuknya) secara implisit mengakhiri transaksi apa pun yang aktif di sesi saat ini, seolah-olah Anda telah melakukan COMMIT sebelum mengeksekusi pernyataan . Pada MySQL 5.5.3, sebagian besar pernyataan ini juga menyebabkan komit implisit setelah dijalankan; untuk detail tambahan, lihat akhir bagian ini.

Sejak ALTER TABLE adalah salah satu pernyataan yang terpengaruh, kumpulan SQL secara efektif diperlakukan sebagai:

START TRANSACTION;
INSERT INTO `users` VALUES(NULL, 'User A', '[email protected]', '4', 'User A');

COMMIT; -- prevents ROLLBACK of insert(s), even if DDL fails
ALTER TABLE `users` CHANGE `level` `level` TINYINT(3) UNSIGNED NOT NULL;

Solusi yang disarankan adalah memisahkan DDL dan DML . Dokumentasi mengatakan:

Anda harus merancang transaksi [DML] Anda untuk tidak menyertakan pernyataan [DDL] tersebut. Jika Anda mengeluarkan pernyataan di awal transaksi yang tidak dapat dibatalkan, dan kemudian pernyataan lain kemudian gagal, efek penuh dari transaksi tidak dapat dibatalkan dalam kasus tersebut dengan mengeluarkan pernyataan ROLLBACK.




  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Bagaimana cara mengeluarkan skema db dari MySQL/phpMyAdmin?

  2. Tidak dapat menginstal Kesalahan phpMyAdmin:konflik umum php71w dengan php-umum-5.4.16-43.el7_4.1.x86_64

  3. Auto TimeStamp entri baru ke DB (phpMyAdmin)

  4. mengubah url default phpmyadmin

  5. phpmyadmin mengekspor ke csv untuk excel