Əsas səhifə > MySQL > MySQL Transaction

MySQL Transaction

Transaction-ın nə olduğu barədə tonla material var internetdə. Ona görə də, MySQL-də Transaction haqqında qısa olaraq bəhs edəcik ki, mən də bunu indi oxuyub öyrənmişəm.

MySQL-də Transaction dəstəyi 4.0-cı versiyadan var və bu dəstək yalnız İnnoDB saxlama mexanizmində təklif olunur (Oracle, PostgreSQL və MS SQL-də bu dəstək çoxdan var imiş).

Deməli ilk öncə biz table tiplərini İnnoDB-yə keçirməliyik. Bunun üçün:

ALTER TABLE tablename ENGİNE=İNNODB;

Məndə default engine İnnoDB olduğu üçün ehtiyac yoxdu😉

İndi isə table yaradaq:

CREATE TABLE military (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(15),
surname VARCHAR(15),
occupation VARCHAR(10), PRIMARY KEY (id)
);

Transaction-u başlatmaq üçün:

START TRANSACTION;

İndi isə yaratdığımız table-a insert edək:

insert into military (name,surname,occupation) values ('Ahmed','Memmedov','lieutinant');
INSERT INTO military (name,surname,occupation) VALUES ('Necib','Samedov','captain');

Transaction-u ROLLBACK və ya COMMİT-lə sonlandırmaq lazımdır.Sınaq üçün heç bir şey etmədən EXİT;-ləsək.Və daha sonra yenidən qoşulub select versək EMPTY SET qayıdacaq.
Lakin COMMİT etsəydik, 2 insert-in 2sini də görmüş olardıq. ROLLBACK isə bütün edilmiş əməliyyatları geri qaytarır. Demək ki, EXİT=ROLLBACK🙂

blog_image_1

blog_image_2

Default olaraq hər transaction bitdikdən sonra MySQL avtomatik olaraq yeni transaction başlatmır.
Demək ki, hər dəfə yeni transaction başlatmaq lazım gələcək.
START TRANSACTİON-a əlavə olaraq ADD CHAİNRELEASE komandaları da var.
ADD CHAİN-her transaction bitdikdən sonra yenisini başladır.
RELEASE-her transaction bitdikdən sonra user connection-u ləğv edir.
Eyni nəticəyə completion_type dəyişənini ya hər session-da(SET vasitəsilə) ya da qlobal olaraq dəyişə bilərik (MySQL konfiqurasiya faylından istifadə etməklə).
SAVEPOİNT (yadda saxlama nöqtələri) haqqında kiçicik danışaq. İlk öncə ardıcıl olaraq aşağıdakı kodları keçirək:

START TRANSACTION;

INSERT INTO military (name,surname,occupation) VALUES ('Ahmed','Memmedov','lieutinant');
INSERT INTO military (name,surname,occupation) VALUES ('Necib','Samedov','captain');

SAVEPOINT ml1;

INSERT INTO military (name,surname,occupation) VALUES ('Receb','Babayev','captain');

SAVEPOINT ml2;

INSERT INTO military (name,surname,occupation) VALUES ('Nihad','Ovcuyev','major');

SAVEPOINT ml3;

Və şəkildəki kimi ROLLBACK TO SAVEPOİNT komandasını verdikdə. Uyğun savepoint nöqtəsindən sonrakı bütün əməliyyatlar rollback olunacaq.

blog_image_3

SAVEPOİNT-ler haqqında bəzi vacib şeyləri yadda saxlamaq lazımdır (çox dəhşətdir elə deyil mi?😛 )
1) Bir transaction-da bir neçə savepoint ola bilər. Yetər ki onların adları fərqli olsun (identifikatorları). Eyni adlı savepoint sonuncudan əvvəlki bütün savepoint-ləri silir.
2) Rollback savepoint komandas transaction-u sonlandırmır. Bunun üçün ya commit ya da rollback olmalıdır. Əgər rollback savepoint-dəki nöqtə mövcud deyilsə MySQL error verəcək.
3) Savepoint-i silmək üçün RELEASE SAVEPOİNT-dən istifadə etmək lazımdır.

MySQL default olaraq hər SQL sorğunu avtomatik olaraq commit edir. Başqa sözlə desək MySQL hır sorğunu ayrıca transaction kimi görür və onu avtomatik olaraq commit edir. Hər dəfə start transaction-a ehtiyac yoxdur yəni ki. Buna AUTOCOMMİT rejimi deyilir. Bu rejimi dəyişmək üçün

SET autocommit=0;

Yenidən aktiv etmək üçün:

SET autocommit=1;

Son mövzu isə TRANSACTİON İSOLATİON LEVEL-dir ki, 4 dənədir.
READ UNCOMMİTTED
READ COMMİTTED
REPEATABLE READ
SERİALİZABLE
MySQL-də default olaraq REPEATABLE READ-dir.
Dəyişmək üçün:

SET TRANSACTION ISOLATION LEVEL isolationname;

TRANSACTİON İSOLATİON LEVEL-i öyrənmək üçün:

blog_image_4

Default olaraq TRANSACTİON İSOLATİON LEVEL hər session üçün keçərlidir. Global olaraq dəyişmək üçün:

SET GLOBAL TRANSACTION ISOLATION LEVEL isolationname;

Təşəkkürlər🙂

Kateqoriyalar: MySQL Etiketlər: , , , ,
  1. Hələlik heç bir şərh yoxdur
  1. No trackbacks yet.

Bir cavab yazın

Sistemə daxil olmaq üçün məlumatlarınızı daxil edin və ya ikonlardan birinə tıklayın:

WordPress.com Loqosu

WordPress.com hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Twitter rəsmi

Twitter hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Facebook fotosu

Facebook hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Google+ foto

Google+ hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

%s qoşulma

%d bloqqer bunu bəyənir: