Rumah  >  Artikel  >  pangkalan data  >  Analisis contoh enjin urus niaga dan simpanan Mysql

Analisis contoh enjin urus niaga dan simpanan Mysql

WBOY
WBOYke hadapan
2023-05-27 20:29:43737semak imbas

1. Transaksi MySQL

1 Konsep transaksi

(1) Transaksi ialah satu mekanisme, urutan operasi, yang merangkumi satu set perintah operasi pangkalan data dan menggabungkan semua arahan Serahkan atau batalkan permintaan operasi kepada sistem secara keseluruhan, iaitu set perintah pangkalan data ini sama ada akan dilaksanakan atau tiada satu pun daripada mereka akan dilaksanakan.

(2) Transaksi ialah unit kerja logik yang tidak boleh dibahagikan Apabila melakukan operasi serentak pada sistem pangkalan data, urus niaga ialah unit kawalan terkecil.

(3) Senario sistem pangkalan data yang dikendalikan oleh berbilang pengguna pada masa yang sama, seperti bank, syarikat insurans, sistem perdagangan sekuriti, dll., sesuai untuk pemprosesan transaksi. (4) Transaksi memastikan konsistensi data melalui integriti transaksi.

2. Ciri-ciri ACID urus niaga

Nota: ACID merujuk kepada empat ciri yang perlu ada dalam urus niaga dalam sistem pengurusan pangkalan data (DBMS): Atomicity , Consistency, Isolation, Durability. Ini adalah beberapa ciri yang perlu ada pada pangkalan data yang boleh dipercayai.

(1) Transaksi adalah atom, iaitu, operasi dalam urus niaga sama ada semua dilaksanakan atau tidak dilaksanakan sama sekali dan tidak boleh dibahagikan. a. Transaksi adalah operasi yang lengkap, dan unsur-unsur transaksi tidak dapat dipisahkan.

b. Semua elemen dalam urus niaga mesti dilakukan atau ditarik balik secara keseluruhan.

c. Jika mana-mana elemen dalam transaksi gagal, keseluruhan transaksi akan gagal.

(2) Ketekalan: bermakna kekangan integriti pangkalan data tidak dilanggar sebelum transaksi bermula dan selepas transaksi tamat.

a. Apabila transaksi selesai, data mestilah dalam keadaan yang konsisten.

b. Sebelum transaksi bermula, data yang disimpan dalam pangkalan data berada dalam keadaan yang konsisten.

c. Dalam urus niaga yang berterusan, data mungkin berada dalam keadaan tidak konsisten.

d. Apabila transaksi berjaya diselesaikan, data mesti kembali ke keadaan konsisten yang diketahui semula.

(3) Pengasingan: Apabila berbilang transaksi beroperasi pada data yang sama pada masa yang sama, dalam persekitaran serentak, setiap transaksi boleh menggunakan kawasan data lengkap bebasnya sendiri. Semua urus niaga serentak yang mengubah suai data diasingkan antara satu sama lain, menunjukkan bahawa urus niaga mestilah bebas dan ia tidak seharusnya bergantung atau menjejaskan transaksi lain dalam apa jua cara. Transaksi yang mengubah suai data boleh mengakses data sebelum transaksi lain yang menggunakan data yang sama bermula atau selepas transaksi lain yang menggunakan data yang sama berakhir.

(4) Kegigihan: Selepas urus niaga selesai, perubahan yang dibuat kepada pangkalan data oleh urus niaga itu dikekalkan dalam pangkalan data dan tidak akan ditarik balik.

a. Ini bermakna tidak kira sama ada sistem gagal atau tidak, hasil pemprosesan transaksi adalah kekal.

b. Sebaik sahaja urus niaga dilakukan, kesan urus niaga akan dikekalkan secara kekal dalam pangkalan data.

Ringkasan: Dalam pengurusan transaksi, atomicity adalah asas, pengasingan adalah cara, konsistensi adalah tujuan, dan ketahanan adalah hasilnya.

3. Pengaruh bersama antara perkara

(1) Bacaan kotor: Satu urus niaga membaca data tanpa komitmen transaksi lain, dan data ini mungkin ditarik balik.

Apabila dua pertanyaan yang sama dilaksanakan secara berterusan dalam transaksi, tetapi hasil yang berbeza diperoleh, keadaan ini dipanggil bacaan tidak boleh berulang. Ini disebabkan oleh komit pengubahsuaian oleh transaksi lain dalam sistem pada masa pertanyaan.

Pernyataan semula: Bacaan hantu merujuk kepada apabila transaksi mengubah suai beberapa baris data dalam jadual, tetapi transaksi lain memasukkan beberapa baris data baharu pada masa yang sama, menyebabkan transaksi pertama menemui beberapa baris lagi apabila membuat pertanyaan data. Pada masa yang sama, transaksi lain mengubah suai jadual dan memasukkan baris data baharu. Pengguna yang mengendalikan transaksi sebelumnya akan terkejut apabila mendapati masih terdapat baris data yang tidak diubah suai dalam jadual, seolah-olah mereka sedang berhalusinasi.

(4 Kemas kini yang hilang: Dua transaksi membaca rekod yang sama pada masa yang sama A mengubah suai rekod terlebih dahulu, dan B juga mengubah suai rekod itu (B tidak tahu bahawa A telah mengubahnya). menyerahkan data, keputusan pengubahsuaian B ditimpa Hasil pengubahsuaian A.

2. Tahap pengasingan mysql dan transaksi

(1), baca tidak komited: baca data tidak komited, jangan selesaikan bacaan kotor

(2), baca komited: Bacaan diserahkan data boleh menyelesaikan bacaan kotor

(3), baca berulang: membaca semula boleh menyelesaikan bacaan kotor dan bacaan tidak boleh berulang------------- Mysql lalai kepada

(4), boleh bersiri: bersiri, yang boleh menyelesaikan bacaan kotor, bacaan tidak boleh berulang dan bacaan maya - setara dengan jadual kunci Nota: Tahap pemprosesan transaksi lalai mysql boleh dibaca berulang, manakala Oracle dan SQL Server dibaca komited

1. Tahap pengasingan transaksi global pertanyaan

show global variables like '%isolation%';
或
select @@global.tx_isolation;

Analisis contoh enjin urus niaga dan simpanan Mysql

2 tahap pengasingan transaksi Sesi Pertanyaan

show session variables like '%isolation%';
SELECT @@session.tx_isolation; 
SELECT @@tx_isolation;

Analisis contoh enjin urus niaga dan simpanan Mysql

3. . Tetapkan tahap pengasingan transaksi global

set global transaction isolation level read committed;
show global variables like '%isolation%';

Analisis contoh enjin urus niaga dan simpanan Mysql

4 Tetapkan tahap pengasingan transaksi

set session transaction isolation level read committed;
show session variables like '%isolation%';

Analisis contoh enjin urus niaga dan simpanan Mysql

三、事务控制语句

1、相关语句

begin;               开启事务
commit;              提交事务,使已对数据库进行的所有修改变为永久性的
rollback;            回滚事务,撤销正在进行的所有未提交的修改
savepoint s1;        建立回滚点,s1为回滚点名称,一个事务中可以有多个
rollback to s1;      回滚到s1回滚点

2、案例

①、创建表

create database school;
use school;
create table Fmoney(
id int(10) primary key not null,  
name varchar(20),  
money decimal(5,2));

insert into Fmoney values ('1','srs1','100');
insert into Fmoney values ('2','srs2','200');
select * from Fmoney;

Analisis contoh enjin urus niaga dan simpanan Mysql

②、测试提交事务

begin;
update Fmoney set money= money - 100 where name='srs2';
commit;
quit

mysql -u root -p
use school;
select * from Fmoney;

Analisis contoh enjin urus niaga dan simpanan Mysql

③、测试回滚事务

begin;
update Fmoney set money= money + 100 where name='srs2';
select * from Fmoney;
rollback;

select * from Fmoney;

Analisis contoh enjin urus niaga dan simpanan Mysql

④、测试多点回滚

begin;
update Fmoney set money= money + 100 where name='srs2';
select * from Fmoney;
savepoint a;
update Fmoney set money= money + 100 where name='srs1';
select * from Fmoney;
savepoint b;
insert into Fmoney values ('3','srs3','300');
select * from Fmoney;

rollback to b;
select * from Fmoney;

Analisis contoh enjin urus niaga dan simpanan Mysql

Analisis contoh enjin urus niaga dan simpanan Mysql

3、使用 set 设置控制事务

SET AUTOCOMMIT=0;                        #禁止自动提交
SET AUTOCOMMIT=1;                        #开启自动提交,Mysql默认为1
SHOW VARIABLES LIKE 'AUTOCOMMIT';        #查看Mysql中的AUTOCOMMIT值

如果没有开启自动提交,当前会话连接的mysql的所有操作都会当成一个事务直到你输入rollback|commit;当前事务才算结束。当前事务结束前新的mysql连接时无法读取到任何当前会话的操作结果。
如果开起了自动提交,mysql会把每个sql语句当成一个事务,然后自动的commit。
当然无论开启与否,begin; commit|rollback; 都是独立的事务。

Analisis contoh enjin urus niaga dan simpanan Mysql

四、MySQL 存储引擎

1、存储引擎概念介绍

(1)MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平,并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎。

(2)存储引擎是MySQL将数据存储在文件系统中的存储方式或者存储格式

(3)MySQL 常用的存储引擎有: a、MylSAM b、InnoDB

(4)MySQL数据库中的组件,负责执行实际的数据I/O操作

(5)MySQL系统中,存储引擎处于文件系统之.上,在数据保存到数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行存储。

2、查看系统支持的存储引擎

show engines;

Analisis contoh enjin urus niaga dan simpanan Mysql

3、查看表使用的存储引擎

(1)方法一:直接查看
show table status from 库名 where name='表名'\G;
例:
show table status from school where name='class'\G;

(2)方法二:进入数据库查看
use 库名;
show create table 表名\G;

例:
use school;
show create table class\G;

Analisis contoh enjin urus niaga dan simpanan Mysql

4、修改存储引擎

(1) 方法一:通过 alter table 修改
use 库名;
alter table 表名 engine=MyISAM;

例:
use school;
alter table class engine=MYISAM;

(2)方法二:通过修改 /etc/my.cnf 配置文件,指定默认存储引擎并重启服务
注意:此方法只对修改了配置文件并重启mysql服务后新创建的表有效,已经存在的表不会有变更。
vim /etc/my.cnf
......
[mysqld]
......
default-storage-engine=INNODB

systemctl restart mysql.service


(3)方法三:通过 create table 创建表时指定存储引擎
use 库名;
create table 表名(字段1 数据类型,...) engine=MyISAM;

例:
mysql -u root -p
use school;
create table test7(id int(10) not null,name varchar(20) not null) engine=MyISAM;

Analisis contoh enjin urus niaga dan simpanan Mysql

Analisis contoh enjin urus niaga dan simpanan Mysql

Analisis contoh enjin urus niaga dan simpanan Mysql

Atas ialah kandungan terperinci Analisis contoh enjin urus niaga dan simpanan Mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam