Tranzaksiya

Tranzaksiya vahid əməliyyat kimi yerinə yetirilən SQL əmrlər toplusudur. Məsələn, bir bank hesabından digərinə pul köçürmək lazımdır. Əlbəttə ki siz aşağıdakı hallardan hər hansı biri ilə qarşılaşmaq istəməzsiniz:

  1. Siz pulu ikinci bank hesabınıza köçürdünüz, birinci hesabdan isə pulu çıxartmaq istədikdə məlumatların yenilənməsi vaxtı nasazlıq oldu və indi pullar hər iki hesabda görsənir;
  2. Siz pulu birinci bank hesabınızdan çıxartdınız, amma pulun ikinci hesaba köçürülməsi üçün yeniləmə sorğusunun icrası vaxtı nasazlıq oldu və indi hər iki hesabda pul yoxdur.

Bəli, tranzaksiya bu kimi halların qarşısını almağa imkan verir. Əgər tranzaksiyanın gedişində hansısa bir əməliyyat icra olunmursa, o zaman heç bir əməliyyat yerinə yetirilmir.

MySQL-də tranzaksiyalardan istifadə etmək üçün InnoDB məlumat saxlama nüvəsini (5.5 versiyasından etibarən başlanğıc ayar kimi təyin edilib) seçmək lazımdır.

Konsolda aşağıdakı SQL əmrini daxil etməklə accounts cədvəlini yaradırıq:

CREATE TABLE `accounts` (
	`number` INT, 
	`balance` FLOAT,
	PRIMARY KEY(`number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

DESCRIBE operatoru vasitəsilə yeni yaradılmış cədvəlin strukturuna baxırıq:

Beləliklə, accounts cədvəlinin uğurla yaradılmasına əmin olduq. İndi isə bu cədvələ iki sətir əlavə edirik və nəticəni yoxlayırıq:

INSERT INTO accounts(number, balance) VALUES 
(12345, 1025.50),
(67890, 140.00);

phpMyAdmin proqramında SQL yarlıkına keçib aşağıdakı sorğuları icra edirik:

UPDATE accounts SET balance=balance-250 WHERE number=12345;
UPDATE people SET balance=balance+250 WHERE number=67890;

İkinci sorğunun icrası zamanı səhv qeydə alınır. Bildirilir ki, my_db verilənlər bazasında people cədvəli yoxdur:

Buna baxmayaraq, birinci sorğu icra olunub. Əmin ola bilərik:

Diqqət yetirsəniz, nömrəsi 12345 olan bank hesabından 250 çıxılıb və qiyməti 775.5-ə bərabərdir. İkinci sorğu isə icra olunmayıb. Artıq dərsin əvvəlində yazıldığı kimi məhz tranzaksiya bu kimi halların qarşısını almağa imkan verir.

MySQL-də tranzaksiyalar ya BEGIN, ya da START TRANSACTION əmrləri ilə başladılır. Dəyişlikləri tətbiq etmək üçün sonda COMMIT yazılır. Bu dəfə phpMyAdmin proqramının SQL yarlıkında aşağıdakı SQL əmrlərini icra edirik:

BEGIN;
UPDATE accounts SET balance=balance-250 WHERE number=12345;
UPDATE people SET balance=balance+250 WHERE number=67890;
COMMIT;

Bu dəfə, həmçinin ikinci sorğunun icrası zamanı səhv qeydə alınır. Bildirilir ki, my_db verilənlər bazasında people cədvəli yoxdur:

Lakin bu dəfə birinci sorğu icra olunmayıb:

Bəli, bu dəfə nömrəsi 12345 olan bank hesabından pul çıxılmayıb, qiyməti olduğu kimi (775.5) saxlanılıb. Artıq bildiyimiz kimi, tranzaksiya vahid əməliyyat kimi yerinə yetirilən SQL əmrlər toplusudur.

0

Şərh yazmaq üçün hesabınıza daxil olun.