Transaksi transaksi mengakses unit pelaksanaan program yang mungkin mengemas kini pelbagai item data dalam pangkalan data
Transaksi terdiri daripada permulaan transaksi (mulakan transaksi) dan tamat transaksi ( urus niaga tamat) Semua operasi yang dilakukan di antaranya adalah terdiri daripada
MySQL membenarkan pengurusan bersatu urus niaga (innodb enjin storan), menyimpan sementara operasi yang dilakukan oleh pengguna dan bukan meletakkannya secara langsung dalam jadual data (kemas kini), tunggu sehingga pengguna mengesahkan keputusan sebelum meneruskan
Transaksi biasanya diserahkan secara automatik, atau ia boleh diserahkan secara manual
Apabila klien menghantar SQL Apabila arahan (operasi tulis, penambahan, pemadaman dan pengubahsuaian) diberikan kepada pelayan, pelayan tidak perlu menunggu maklum balas pengguna selepas pelaksanaan, dan secara automatik akan menyegerakkan keputusan kepada data jadual
Dua pelanggan, seorang pelanggan melaksanakan arahan SQL, Pelanggan lain melihat hasil pelaksanaan
Kawal transaksi automatik melalui pembolehubah
mysql> show variables like 'autocommit'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+ -- 关闭自动事务 set autocommit = off; mysql> show variables like 'autocommit'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | OFF | +---------------+-------+
Selepas mematikan transaksi automatik, seorang pelanggan mengubah suai data dan pelanggan lain tidak dapat melihat hasil yang diubah suai
Setelah urus niaga automatik dimatikan, pengguna perlu menyediakan arahan penyegerakan
komit penyerahan (disegerakkan ke jadual data, transaksi akan dikosongkan)
gulung balik (kosongkan operasi sebelumnya, tiada lagi)
-- 客户端A关闭自动事务后操作数据 mysql> select * from my_class; +----+--------+ | id | name | +----+--------+ | 1 | 一班 | | 3 | 三班 | +----+--------+ 2 rows in set (0.01 sec) mysql> insert into my_class (name) values('四班'); Query OK, 1 row affected (0.00 sec) mysql> select * from my_class; +----+--------+ | id | name | +----+--------+ | 1 | 一班 | | 3 | 三班 | | 5 | 四班 | +----+--------+ 3 rows in set (0.00 sec) -- 客户端B看不到新增的 四班数据, mysql> select * from my_class; +----+--------+ | id | name | +----+--------+ | 1 | 一班 | | 3 | 三班 | +----+--------+ 2 rows in set (0.00 sec)
Selepas pelanggan A melaksanakan komit untuk menghantar transaksi, pelanggan B boleh melihat data baharu
Biasanya tidak perlu mematikan transaksi automatik Apabila anda perlu menggunakan transaksi, gunakan transaksi manual
Pengguna mesti menghantar arahan operasi transaksi secara manual untuk permulaan, proses dan tamat
Arahan transaksi manual
-- 1、开启事务,从这条语句开始,后面所有的语句都不会直接写入到数据表,保存在事务日志中 start transaction -- 2、事务处理,多个指令构成 -- 3、事务提交,结束事务 commit / rollback
mysql> select * from my_class; +----+--------+ | id | name | +----+--------+ | 1 | 一班 | | 3 | 三班 | | 5 | 四班 | +----+--------+ 3 rows in set (0.04 sec) mysql> select * from my_student; +----+--------+----------+------+--------+ | id | name | class_id | age | gender | +----+--------+----------+------+--------+ | 1 | 刘备 | 1 | 18 | 2 | | 2 | 李四 | 1 | 19 | 1 | | 3 | 王五 | NULL | 20 | 2 | | 4 | 张飞 | NULL | 21 | 1 | | 5 | 关羽 | NULL | 22 | 2 | | 6 | 曹操 | 1 | 20 | NULL | +----+--------+----------+------+--------+ 6 rows in set (0.00 sec) -- 开启事务 start transaction; -- 执行事务操作,多个修改操作 insert into my_class (name)values ('六班'); insert into my_student (name, class_id, age, gender)values ('司马懿', 6, 26, 1); -- 提交事务 commit; -- 或者回滚操作,所有数据无效清空 rollback;
-- 增加回滚点 savepoint 回滚点名字; -- 回到回滚点 清空之后所有操作 rollback to 回滚点名字;
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan keselamatan transaksi MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!