Bagaimana untuk melaksanakan keselamatan transaksi MySQL

PHPz
Lepaskan: 2023-05-29 10:04:07
ke hadapan
1308 orang telah melayarinya

Transaksi keselamatan transaksi

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

Prinsip asas urus niaga

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

Transaksi automatik

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   |
+---------------+-------+
Salin selepas log masuk

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)
Salin selepas log masuk

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

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
Salin selepas log masuk

Penggunaan transaksi

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;
Salin selepas log masuk

Titik putar balik<🎜. >

Apabila terdapat beberapa siri operasi transaksi, dan jika langkah-langkah itu berjaya , tidak perlu dimulakan semula, anda boleh menetapkan tanda (titik balik) pada titik tertentu, dan kemudian jika terdapat kegagalan kemudian , anda boleh kembali ke kedudukan tanda ini

-- 增加回滚点
savepoint 回滚点名字;
-- 回到回滚点 清空之后所有操作
rollback to 回滚点名字;
Salin selepas log masuk
Semasa transaksi, jika Terdapat banyak langkah dan berbilang titik balik boleh ditetapkan

Ciri-ciri transaksi

ASID:

  • Atomicity Transaksi ialah Unit kerja yang tidak boleh dibahagikan, sama ada buat semuanya atau buat apa-apa

  • Transaksi konsisten mesti menukar pangkalan data daripada satu keadaan konsisten kepada keadaan konsisten yang lain

  • Pengasingan pengasingan Pelaksanaan transaksi tidak boleh diganggu oleh transaksi lain Apabila data beroperasi, data akan dikunci

  • Ketahanan Ketahanan Setelah transaksi diserahkan, ia akan Perubahan data dalam pangkalan data adalah kekal
  • Jika indeks digunakan dalam keadaan, rekod akan diasingkan jika tidak, melalui jadual penuh pengambilan semula, seluruh meja akan dikunci

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan keselamatan transaksi MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan