- InnoDB menerima transaksi ACID, blokir oleh file dan BACA BERULANG karena cacat.
- Controla autocommit, START TRANSACTION, COMMIT/ROLLBACK y SAVEPOINT para atomicidad real.
- Penyesuaian tingkat keislaman dan mode READ ONLY/READ WRITE dengan SET TRANSACTION.
- Evita sucias, tidak ada pengulangan dan fantasi yang seimbang dan konsisten.
Transaksi di MySQL adalah pilar untuk menjalankan data dengan cara yang aman ketika Anda mewawancarai berbagai kalimat yang harus Anda pahami sebagai satu kesatuan. Jika ini gagal oleh camino, mereka akan berputar ke posisi depan tanpa meninggalkan basis data ke media. Artikel ini akan menemukan penjelasan lengkap dan praktis tentang cara kerjanya, yang disediakan untuk melengkapi dan bagaimana mengonfigurasinya untuk menyeimbangkan konsistensi dan kinerja.
Pelajari lebih lanjut tentang perintah dasar seperti itu MULAI TRANSAKSI, KOMIT dan ROLLBACK, veremos el papel de komit otomatis, The niveles de aislamiento ACID, kunci, titik simpanan, modos de acceso y TETAPKAN TRANSAKSI. Juga termasuk contoh paso dari masalah-masalah yang terjadi bersamaan, dengan catatan sederhana InnoDB vs MyISAM, bagaimana cara melakukan transaksi setelahnya PHP (mysqli) dan prosedur tersimpan, seperti baterai praktis yang dapat Anda gunakan untuk belajar. Jika Anda mempersiapkan DAW, DAM atau ASIR, ini akan terjadi seperti yang dilakukan sebelumnya.
Titik BD untuk DAW, DAM dan ASIR — Kursus 2025/2026. Bahan ini sintetik pada praktik terbaik dan teoría clave yang perlu dilakukan untuk melakukan transaksi di MySQL secara profesional.
catatan: Anda telah menyumbangkan uang untuk mengelola situs web baru, seperti yang menghasilkan konten terbaik. Anda akan segera membuat panduan teknis yang berguna dan hari berikutnya.
Itu adalah transaksi dan hal yang penting
Una transacción es una unidad lógica de trabajo yang mengumpulkan berbagai kalimat dengan cara yang sama o se aplikasi semua o no se aplikasi ningguna. Hal ini tidak boleh dilakukan secara konsisten, terutama dalam pengoperasian komputer yang memiliki berbagai tab atau file. Piensa en traspaso entre cuentas bankarias: se descuenta de la cuenta origin dan se abona en la destino; Jika ada tindakan yang gagal, tidak ada yang mengizinkan Anda melakukan hal lain selain itu.
MySQL, con el motor InnoDB, terapkan transaksi sesuai model ACID, proporsi tersebut menjamin soliditas integritas termasuk kesalahan sistem atau kerusakan sistem. Jika Anda melihat SGBD lainnya, Anda akan merasa seperti di rumah: konsep kelas atas adalah mismos.
ASAM Propiedades: las cuatro garantías
- atomisitas: blok itu setrata sebagai tak terpisahkan; o semuanya baik-baik saja o nada. Jika operasi gagal, Anda akan menghidupkan kembali semuanya.
- Konsistensi: setiap transaksi akan didasarkan pada data yang valid dan lainnya. Tidak ada peraturan yang menunjukkan kerentanan bisnis dan data yang mustahil.
- isolasi: apa yang terjadi ketika ada transaksi tidak perlu mengganggu atau mempengaruhi ayat tersebut oleh karena itu jika Anda melakukannya secara paralel, itu akan menjadi tingkat yang elegan.
- Daya tahan: una vez haces
COMMIT, perubahan yang terjadi terus menerus incluso ante fallos.
InnoDB vs MyISAM: motornya penting
En MySQL existen varios mesin penyimpanan. Solo InnoDB mendukung transaksi dan ruang depan; malahan menyebabkan kerusakan pada tingkat file dan pemulihan sebelum kesalahan. MyISAM tidak mendukung transaksi dan memprioritaskan kecepatan yang konsisten, yang berguna untuk skenario pembelajaran intensif, tapi tidak cukup jika Anda membutuhkan ACID.
Komit otomatis: apa yang terpengaruh
MySQL tiene el modo komit otomatis diaktifkan karena cacat. Ini berarti bahwa, karena transaksi yang jelas, setiap kalimat DML akan dikonfirmasi secara otomatis bagaimana jika Anda merasa envuelta por START TRANSACTION y COMMIT. Si la sentencia falla, se revierte automáticamente Ini niatnya, tapi jika Anda sudah berhasil, Anda tidak bisa menghapusnya secara manual dengan ROLLBACK.
Ketika Anda memulai transaksi dengan penipu START TRANSACTION, MySQL menonaktifkan sementara komitmen otomatis yang telah dilakukan COMMIT o ROLLBACK. Anda dapat mengubah komitmen otomatis ke tingkat sesi yang sama SET:
-- Ver el valor actual
SELECT @@autocommit;
-- Desactivar autocommit en la sesión actual
SET autocommit = 0;
-- Activarlo de nuevo
SET autocommit = 1;
Setelah menonaktifkan autocommit, perubahan tidak ada anak permanen yang harus dikeluarkan COMMIT; si quieres descartarlos, Amerika Serikat ROLLBACK. Ada alasan bahwa konfigurasi ini untuk sesi y lihat atur ulang koneksinya.
Dasar-dasar perintah: MULAI TRANSAKSI, KOMITMEN, dan ROLLBACK
El ciclo típico es: memulai transaksi, menjalankan operasi DML dan mengonfirmasi atau menghapusnya lihat hasilnya. Ini adalah sinonim yang sama BEGIN o BEGIN WORK para iniciar, y COMMIT/ROLLBACK para finalizar:
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 20;
UPDATE cuentas SET saldo = saldo + 100 WHERE id = 30;
COMMIT; -- o ROLLBACK si algo fue mal
Jika sistemnya masuk ke dalam dua hal UPDATE o jika koneksi dinonaktifkan dengan komitmen otomatis, InnoDB menjamin bahwa transaksi tidak lengkap tidak dikonfirmasi. Jika suatu keadaan tidak ada atau suatu pembatasan (p. ej., CHECK de saldo no negativo) falla, la transacción se revierte dan itu adalah dasar yang sama dengan prinsipnya.
Savepoints: kontrol fino di dalam transaksi
dengan SAVEPOINT meningkatkan poin pemulihan melalui transaksi yang bisa dilakukan deshacer parcialmente sin tirar todo el trabajo:
START TRANSACTION;
UPDATE productos SET stock = stock - 2 WHERE id = 10;
SAVEPOINT p1;
UPDATE productos SET stock = stock - 5 WHERE id = 11;
-- Si falla lo siguiente, solo deshacemos hasta p1
ROLLBACK TO SAVEPOINT p1;
-- Seguimos con otras operaciones
RELEASE SAVEPOINT p1;
COMMIT;
Ini mendefinisikan berbagai SAVEPOINT dengan nama yang berbeda, MySQL dianggap sebagai yang terakhir. Kami juga bisa eliminarlos con RELEASE SAVEPOINT untuk menjaga kelancaran transaksi.
Nilai-nilai Islam: keseimbangan antara konsistensi dan hasil
Keberanian untuk cacat di MySQL adalah REPEATABLE READ, yang memberikan ceramah yang koheren tentang misma transacción gracias al multiversioning (MVCC).
Masalah klasik de concurrencia que queremos acotar:
- Lectura sucia (Dirty Read): lihat perubahan transaksi lain yang tidak terjadi
COMMIT. - Lectura no repetible: melihat misma fila dos veces dan mendapatkan nilai yang berbeda por actualizaciones confirmadas transaksi lainnya di antara kuliah lainnya.
- Bacaan yang fantastis: jalankan misma konsultasi dan apa aparezcan filas nuevas melakukan penyisipan konfirmasi transaksi lainnya.
Perilaku tingkat (praktik resume): READ UNCOMMITTED permite las tres anomalías; READ COMMITTED evita lecturas sucias tapi bisa sufrir tidak ada pengulangan dan fantasi; REPEATABLE READ evita sucias y no repetibles y, secara umum, hanya mengakui potensi “fantasma”; SERIALIZABLE blok seperti yang dikeluarkan secara seri, menghilangkan tiga beban lebih.
-- Consultar nivel de aislamiento (sesión y global)
SELECT @@transaction_isolation; -- sesión
SELECT @@global.transaction_isolation; -- global
Anda dapat menyesuaikan tujuan Islam melalui transaksi, sesi, atau global. Memperhatikan perubahan GLOBAL yang mempengaruhi hubungan baru, no a las existentes.
Bloqueos dan ceramah dengan bloqueo
Untuk memelihara aislamiento, el motor usa bloqueos (penguncian). InnoDB diblokir karena cacat a nivel de fila, Anda mengizinkan Walikota menyetujui pemblokiran tersebut. Sebuah blok yang menghalangi transaksi lain untuk mengubah data yang digunakan sementara itu tuya belum selesai.
Segun el level and la operación, MySQL mungkin memerlukan kunci untuk membaca atau menulis. Sebagai contoh SERIALIZABLE dengan komitmen otomatis menonaktifkan konversi ceramah dan blok untuk memperbaiki konsistensi. Tujuan ini adalah untuk menghindari transaksi lain yang berinteraksi dengan “instan” data Anda.
Cara mengaksesnya: BACA TULIS dan BACA SAJA
Transaksi dapat diumumkan dengan cara yang sama READ WRITE (default) atau READ ONLY. En modo solo lectura, no se permiten cambios tentang tabel, untuk menginformasikan data yang dapat direproduksi dan dibuat.
-- Establecer modo de acceso al iniciar
START TRANSACTION READ ONLY;
-- o
START TRANSACTION READ WRITE;
También puedes fijarlo con SET TRANSACTION, digabungkan dengan tingkat pendidikan Islam dan el ambit aplikasi.
SET TRANSAKSI: aislamiento, acceso y ambitos (SESI, GLOBAL)
Kalimat SET TRANSACTION izinkan untuk mengatur tingkat pendidikan Islam dan cara akses untuk itu próxima transacción, Untuk keseluruhan sesi atau cara global:
-- Aplica a la próxima transacción (si no indicas ámbito)
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ ONLY;
-- Aplica a todas las transacciones de esta sesión actual
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ WRITE;
-- Aplica a sesiones futuras (no a las existentes)
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
Este control fino te permite keseimbangan kemampuan dan kinerja jika terjadi penggunaan, dari artikel analitis dan kesepakatan OLTP lainnya.
Contoh Konkurensi: Bacaan Kotor, Tidak Dapat Diulang, dan Fantasma
Dirty Read (lectura sucia): transaksi B lee valores no konfirmasi oleh A. Con READ UNCOMMITTED esto es posible; con READ COMMITTED en adelante, no.
-- Terminal A
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
-- (sin COMMIT todavía)
-- Terminal B
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT saldo FROM cuentas WHERE id = 1; -- puede ver el saldo "sucio"
-- Terminal A
ROLLBACK; -- los cambios se deshacen
Lectura no repetible: B mengkonfirmasi UPDATE antara kuliah A. Con REPEATABLE READ lo evitas; con READ COMMITTED puede ocurrir.
-- Terminal A
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
START TRANSACTION;
SELECT saldo FROM cuentas WHERE id = 1; -- lectura 1
-- Terminal B (otra sesión)
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
COMMIT;
-- Terminal A
SELECT saldo FROM cuentas WHERE id = 1; -- lectura 2 (puede diferir)
ROLLBACK;
Bacaan yang fantastis: antara Anda melihat data yang dikumpulkan, transaksi lain serta memasukkan file yang dimasukkan ke dalam filter. Con SERIALIZABLE se evita a costa de más bloqueos.
-- Terminal A
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION;
SELECT SUM(saldo) FROM cuentas;
-- Terminal B
INSERT INTO cuentas(id, saldo) VALUES (4, 3000);
COMMIT;
-- Terminal A
SELECT SUM(saldo) FROM cuentas; -- puede observar un "fantasma"
ROLLBACK;
DML penting dan kunci foráneas: efek PADA HAPUS / PADA PEMBARUAN
El DML agrupa PILIH, MASUKKAN, PERBARUI, dan HAPUS. Jika Anda mendefinisikan kelas-kelas tersebut di InnoDB, Anda dapat menampilkan perilaku sebelum dihapus/diaktualisasikan dalam tabel referensi:
RESTRICT: menghalangi penghapusan/mengaktualisasikan referensi apa pun. Ini adalah keberanian karena cacat di MySQL.CASCADE: menyebarkan tindakan ke file yang dicuri.SET NULL: pone el valor aNULLen las filas hijas.NO ACTION: setara denganRESTRICTdi MySQL.SET DEFAULT: tidak ada yang tersedia dengan InnoDB dan MySQL.
Estas reglas son clave para referensi konsistensi asegurar dan menghindari data yang merugikan ketika melakukan transaksi dan hubungan yang lengkap.
Transaksi dari PHP (mysqli): komit otomatis, komit, dan kembalikan
Si programas en PHP con mysqli, Anda dapat mengontrol transaksi dengan cara yang sederhana. Nonaktifkan autocommit, jalankan konsultasi dan konfirmasi atau lihat hasil berikut:
$db = new mysqli("localhost", "root", "pass", "database");
$db->autocommit(false);
try {
$db->query("INSERT INTO users (name) VALUES ('marcus')");
$db->query("UPDATE users SET name = 'jane' WHERE id = 39");
$db->commit();
} catch (Throwable $e) {
$db->rollback();
// log del error
}
Dengan pola ini, jika ada kalimat yang salah, ya rollback() y evitas inconsistencias. Luego ya putuskan jika Anda ingin, memberi tahu, atau melakukan tindakan lain.
Prosedur kesalahan dan cara mengatasi kesalahan di MySQL
Prosedur MySQL lainnya dapat dideklarasikan manejadores de errores ayat SQLEXCEPTION y SQLWARNING, maka mengeluarkan ROLLBACK secara otomatis ante fallos:
DELIMITER //
CREATE PROCEDURE transferir(IN p_origen INT, IN p_destino INT, IN p_importe DECIMAL(10,2))
BEGIN
DECLARE exit handler FOR SQLEXCEPTION
BEGIN
ROLLBACK;
END;
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - p_importe WHERE id = p_origen;
UPDATE cuentas SET saldo = saldo + p_importe WHERE id = p_destino;
COMMIT;
END //
DELIMITER ;
Anda juga dapat menggunakan manajemen unik yang umum untuk berbagai jenis kesalahan jika Anda melakukannya dengan lebih baik. Tujuannya adalah untuk memusatkan pengembalian dan menghilangkan kebocoran dasar cuando algo no va bien.
Hal-hal praktis yang perlu Anda lakukan: lakukan pekerjaan yang Anda pelajari
Tienda de informática
- Inserta fabrikan menunjukkan kode dan nama; dan juga sendirian dengan nama yang mulia.
- Masukkan produk terkait dengan pabrikasi dengan rangkaian kolom yang berbeda (dengan dan tanpa kode).
- Crea la tabla
fabricante_productosdengan kolomnombre_fabricante,nombre_producto,precioe masukkan satu kali saja ke semua pendaftar daritienda. - Crea la vista
vista_fabricante_productosdengan tiga kolom anterior. - Elimina fabricantes sebagai
AsusoXiaomidan razon karena itu tidak mungkin; ajusta claves foráneas (hal. ej.,ON DELETE) si hace falta. - Actualiza códigos pembuat (
Lenovopada 20,Huaweia 30) dan menganalisis batasan-batasan referensi yang diperlukan. - Actualiza precios sumando 5 € untuk semua produk; elimina impresoras con precio < 200 €.
Karyawan
- Sisipkan departemen dengan kombinasi kolom yang berbeda (con y sin codigo, con gastos).
- Inserta empleados vinculados a departmentamentos (con y sin codigo explícito).
- Crea y rellena
departamento_backupdaridepartamento. - Elimina departamentos (
Proyectos,Desarrollo) dan pembenaran jika kamu bisa atau tidak; sesuaikan kebutuhan yang diperlukan. - Actualiza códigos (misalnya.,
Recursos Humanoske 30;Publicidada 40) evaluasi dampak referensial. - Incrementa presupuestos +50.000 € solo para los < 20.000 €.
- Transaksi: menghilangkan karyawan tanpa departemen yang menjamin konsistensi.
Berkebun
- Sisipan kantor en
Almeríadan seorang karyawan yang mewakili pekerjaan. - Masukkan klien cuyo laut komersial el empleado anterior; crea un pedido con al menos dos productos.
- Perbarui kode klien dan verifikasi perubahan dalam tabel hubungan; Hapus dan revisi efek; jika tidak ada jerami, mengkonfigurasi
ON DELETE CASCADE. - Elimina clientes sin pedidos; sube un 20% harga produk tanpa biaya; borra pagos klien dengan batas kredit yang lebih kecil.
- Ajusta límite de crédito a 0 untuk klien dengan kurang dari satu unit produk
11679. - Modifica la tabla
detalle_pedidoañadiendo campoiva; tengah transaksi pon 18 a pedidos desde enero 2009 y 21 untuk sisanya. - Tambah campo
total_lineay calcula conprecio_unidad*cantidad*(1 + (iva/100))para todos los registros. - Borra el cliente dengan batas kredit yang lebih kecil: evaluasi jika Anda dapat berkonsultasi dengan satu-satunya hal yang Anda perlukan.
- Sisipan kantor en
Granadacon tres comerciales y tiga klien rekan; transaksi untuk kepentingan klien dengan produk setiap orang; borra un cliente dan sesuaikan foráneas jika tidak ada hay cascada; transaksi untuk mendaftarkan halaman-halaman ini.
Ensayo adicional útil: simulasi kerusakan koneksi dengan SET AUTOCOMMIT = 0, sesi ini harus dilakukan sebelum menyelesaikan dan kemudian menyambung kembali untuk memeriksa apakah Anda bertahan dan tidak. Ini akan merusak konsep ketahanan dan ketahanan atom.
Bandingkan dengan cepat dengan SQL Server dan Oracle
Los conceptos son homólogos: MULAI/MULAI TRANSAKSI, KOMIT, KEMBALI y tingkat isolasi. Di SQL Server ada tingkat yang lebih tinggi seperti FOTOBahwa menyajikan pemandangan yang konsisten pada awal transaksi tanpa bloquear tanto como SERIALIZABLE. Oracle menawarkan tingkat yang serupa; dalam praktiknya, mengubah “dialek” tetapi musiknya sama: jika Anda melakukan kesalahan secara optimal selama islami dan rendimiento.
Tip-tip ujian/entrevisi
- Apa yang dimaksud dengan ASAM Propiedades? Defínelas y pon un ejemplo.
- ¿Cuáles adalah tiga masalah konkurensi dan bagaimana mitigasi terhadap tingkat pendidikan Islam?
- Apakah levelnya sudah rusak di InnoDB? BACAAN YANG DAPAT DIULANG.
- Apakah Anda dapat melakukan transaksi dengan MyISAM? No, necesitas InnoDB.
- Perbedaan InnoDB vs MyISAM: transaksi, foráneas, bloqueo por fila, recuperación, dll.
- Transfer bank: ¿qué pasa si falla una
UPDATEperantara atau apakah akunnya tidak ada? Jawaban: kembalikan konsistensi asegura.
Mendominasi transaksi di MySQL adalah seperti yang digabungkan ACID, autocommit, aislamiento, bloqueos, savepoints dan mode akses untuk melindungi data Anda tanpa hasil yang luar biasa. Dengan InnoDB, tienes las herramientas para que operaciones complejas (pagos, pedidos, inventario) se comporten sebagai tindakan yang aman. penyesuaian TETAPKAN TRANSAKSI al caso de uso, apóyate en prosedur dan pengendalian kesalahan, dan praktik dengan properti Anda: garam yang berkualitas dalam sistem Anda tidak akan masuk akal.
