Rumah > Artikel > pangkalan data > Bagaimana untuk menggunakan pencetus dan transaksi dalam pangkalan data MySQL
Prigger ialah kaedah yang disediakan oleh pelayan SQL kepada pengaturcara dan penganalisis data untuk memastikan integriti data dicetuskan oleh peristiwa. Pencetus sering digunakan untuk menguatkuasakan kekangan integriti data dan peraturan perniagaan.
Buat jadual data akaun dan log_akaun:
CREATE TABLE account( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), money DOUBL ); INSERT INTO account VALUES (NULL,'张三',1000),(NULL,'李四',1000); CREATE TABLE account_log( id INT PRIMARY KEY AUTO_INCREMENT, operation VARCHAR(20), operation_time DATETIME, operation_id INT, operation_params VARCHAR(200) );
// 语法格式: BEFORE|AFTER INSERT: 插入 UPDATE:更新 DELETE:删除 // DELIMITER $ // CREATE TRIGGER 触发器名称 // BEFORE|AFTER INSERT|UPDATE|DELETE // ON 表名 // FOR EACH ROW // BEGIN // 触发器要执行的功能; // END$ // DELIMITER ; // 创建INSERT型触发器。用于对account表新增数据进行日志的记录 DELIMITER $ CREATE TRIGGER account_insert AFTER INSERT ON account FOR EACH ROW BEGIN INSERT INTO account_log VALUES (NULL,'INSERT',NOW(),new.id,CONCAT('插入后{id=',new.id,',name=',new.name,',money=',new.money,'}')); END $ DELIMITER ; // 向account表添加一条记录 INSERT INTO account VALUES (NULL, '王五', 2000); // 查询account表 SELECT * FROM account;
Dalam pangkalan data hubungan, transaksi boleh menjadi pernyataan SQL, kumpulan pernyataan SQL atau satu. keseluruhan program. Cirinya ialah unit ini sama ada berjaya atau gagal pada masa yang sama, dan setiap pernyataan SQL dalam unit bergantung antara satu sama lain untuk membentuk keseluruhan. Urus niaga harus mempunyai empat sifat: atomicity, konsistensi, pengasingan dan ketahanan. Empat sifat ini selalunya dipanggil sifat ASID.
Empat ciri utama:
Atomicity: Transaksi ialah unit kerja yang tidak boleh dibahagikan, dan transaksi mengandungi Semua operasi sama ada berjaya atau gagal dan digulung semula.
Ketekalan: Sesuatu urus niaga mesti menukar pangkalan data daripada satu keadaan konsistensi kepada keadaan konsistensi yang lain, iaitu, transaksi mesti dilaksanakan sebelum dan selepas pelaksanaan dalam keadaan yang konsisten.
Pengasingan: Apabila berbilang pengguna mengakses pangkalan data secara serentak, seperti semasa mengendalikan jadual yang sama, transaksi yang dibuka oleh pangkalan data untuk setiap pengguna tidak boleh digunakan oleh pengguna lain. urus niaga Gangguan oleh operasi, berbilang transaksi serentak mesti diasingkan antara satu sama lain
Kegigihan: Sebaik sahaja transaksi diserahkan, perubahan pada data dalam pangkalan data Ia kekal , dan operasi melakukan transaksi tidak akan hilang walaupun sistem pangkalan data menghadapi kegagalan.
Buka transaksi: Rekod titik balik , dan maklumkan pelayan
untuk melaksanakan pernyataan SQL: Laksanakan satu atau lebih pernyataan sql khusus
Tamat transaksi (serahkan | gulung balik): Serah : Tiada masalah berlaku, data dikemas kini; Timbal balik : Masalah berlaku, data dipulihkan kepada keadaan apabila transaksi dibuka
// 查看标准语法: SHOW TRIGGERS; // 查看触发器 SHOW TRIGGERS; // 删除标准语法:DROP TRIGGER 触发器名称; // 删除account_delete触发器 DROP TRIGGER account_delete;
-- 开启事务 START TRANSACTION; -- 执行SQL语句 UPDATE account SET money=money-500 WHERE NAME='张三'; -- 回滚事务(出现问题) ROLLBACK; -- 提交事务(没出现问题) COMMIT;
Empat tahap pengasingan
Baca tanpa komitmen: baca tanpa komitmen
Baca komited: baca komited (peringkat lalai pangkalan data Oracle/SQL Server )
boleh menyebabkan masalah:
Bacaan kotor: merujuk kepada Data dalam transaksi tidak komited lain adalah dibaca semasa pemprosesan transaksi, menyebabkan keputusan pertanyaan tidak konsisten antara dua pertanyaan
Bacaan tidak boleh berulang: merujuk kepada transaksi Semasa pemprosesan, data diubah suai dan diserahkan dalam urus niaga lain telah dibaca, mengakibatkan keputusan tidak konsisten bagi dua pertanyaan
Bacaan hantu: pilih sama ada rekod tertentu wujud, Rekod ini tidak wujud disediakan untuk dimasukkan, tetapi apabila sisipan dilaksanakan, didapati rekod itu sudah wujud dan tidak boleh dimasukkan. Atau operasi padam tidak wujud, tetapi didapati pemadaman berjaya
// 查看提交方式 SELECT @@AUTOCOMMIT; -- 1代表自动提交 0代表手动提交 // 修改事务的提交方式 SET @@autocommit=1;Nota: Tahap pengasingan menjadi lebih dan lebih selamat dari kecil ke besar, tetapi kecekapannya semakin rendah, jadi tidak digalakkan untuk menggunakan tahap pengasingan READ UNCOMMITTED dan BOLEH BERSIRI.
Atas ialah kandungan terperinci Bagaimana untuk menggunakan pencetus dan transaksi dalam pangkalan data MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!