Atomarlik xususiyati ma`lumotlar bazasidagi ma`lumotlarni o`zgartiradigan va tranzaksiyaning bir qismi bo'lgan instruksiyalar to'plamining bo'linmasligini ta'minlaydi. Bu shuni anglatadiki, tranzaksiyada ma`lumotlardagi barcha o`zgarishlar amalga oshiriladi yoki biron bir xato bo'lsa, amalga oshirilgan barcha o`zgarishlar bekor qilinadi.
Mutanosiblik xususiyati ma`lumotlar bazasida tranzaksiya natijasida bir-biriga mos kelmaydigan ma`lumotlarning yo`qligini ta'minlaydi. Boshqacha qilib aytganda, tranzaktsiya orqali amalga oshirilgan ma`lumotlar o`zgarishlari ma`lumotlar bazasini bir muvofiq holatdan ikkinchi muvofiq holatga o`tkazadi.
Izolyatsiya xususiyati barcha bir vaqtning o`zida amalga oshiriladigan operasiyalarni bir-biridan ajratib turadi. Boshqacha qilib aytganda, faol tranzaksiya parallel tranzaksiya va tugatilmagan tranzaksiyalardagi ma`lumotlar o`zgarishlarini ko`ra olmaydi. Izolyatsiyani ta'minlash uchun ba'zi operasiyalarni orqaga qaytarish kerak bo’ladi.
Chidamlilik xususiyati ma`lumotlar bazasining eng muhim talablaridan birini taqdim etadi: ma`lumotlarning doimiyligi. Boshqacha qilib aytganda, tranzaksiya effekti tizim xatosi yuz bergan taqdirda ham effektli bo'lishi kerak. Shu sababli, operasiyani bajarish paytida tizimda xatolik yuzaga kelsa, u holda ushbu tranzaktsiyaning barcha bajarilgan o’zgarishlari bekor qilinadi.
Transact-SQL tranzaksiya operatorlari va instruksilari
BEGIN TRANSACTION instruksiyasi tranzaktsiyani boshlaydi. Ushbu instruksiyasi uchun sintaksis quyidagicha:
BEGIN TRANSACTION [ {transaction_name | @trans_var }
[WITH MARK ['description']]]
Transaction_name parametri faqat BEGIN TRANSACTION / COMMIT yoki BEGIN TRANSACTION / ROLLBACK instruksiyalarida ishlatilishi mumkin bo'lgan tranzaksiya nomini belgilaydi. @Trans_var parametri tranzaktsiyaning haqiqiy nomini o`z ichiga olgan foydalanuvchi tomonidan aniqlangan o`zgaruvchini belgilaydi. WITH MARK xossasi operasiyani jurnalda belgilash kerakligini belgilaydi. description argumenti - bu belgini tavsiflovchi satr. WITH MARK xossasi qo`llanilganda tranzaksiya nomi ko`rsatilishi kerak.
COMMIT WORK instruksiyasi BEGIN TRANSACTION instruksiyasi bilan boshlangan tranzaksiyani muvaffaqiyatli yakunlaydi. Bu shuni anglatadiki, tranzaksiya natijasida amalga oshirilgan o`zgarishlar domiy diskka saqlanadi. COMMIT WORK instruksiyasi ushbu instruksiyasi standart shakli hisoblanadi. WORK bandini yozilmasa ham bo’ladi.
Transact-SQL shuningdek funktsional jihatdan COMMIT WORK instruksiyasiga teng bo'lgan COMMIT TRANSACTION instruksiyasini qo`llab-quvvatlaydi, faqat foydalanuvchi tomonidan belgilangan tranzaksiya nomini qabul qiladi.
COMMIT WORK instruksiyasidan farqli o'laroq, ROLLBACK WORK instruksiyasi muvaffaqiyatsiz tranzaksiya haqida xabar beradi. Dasturchilar ma`lumotlar bazasida xatolik yuz berishi mumkin deb o'ylaganda ushbu instruksiyadan foydalanadilar. Bunday holda, tranzaksiyadagi instruksiyasilar tomonidan amalga oshirilgan barcha o`zgarishlar bekor qilinadi. ROLLBACK WORK instruksiyasi ushbu instruksiyaning standart shakli hisoblanadi. WORK bandi yozilmasa ham bo’ladi. Transact-SQL shuningdek funktsional jihatdan ROLLBACK WORK instruksiyasiga teng bo'lgan ROLLBACK TRANSACTION instruksiyasini qo`llab-quvvatlaydi, faqat foydalanuvchi tomonidan belgilangan tranzaksiya nomini qabul qiladi.
SAVE TRANSACTION instruksiyasi tranzaksiya ichida saqlash nuqtasini o'rnatadi. Saqlash nuqtasi(Savepoint) tranzaktsiyaning shunday nuqtasini belgilaydiki, natijada ushbu nuqtadan keyingi barcha o`zgarishlarni butun tranzaksiyani bekor qilmasdan bekor qilish mumkin. (ROLLBACK instruksiyasi butun operasiyani bekor qilish uchun ishlatiladi.) SAVE TRANSACTION instruksiyasi haqiqatan ham biron bir ma`lumot o`zgarishlarini amalga oshirmaydi. U faqat keyingi ROLLBACK instruksiyasi uchun belgi(metka) yaratadi.
SAVE TRANSACTION instruksiyasi foydalanish quyidagi misolda keltirilgan:
USE SampleDb;
BEGIN TRANSACTION;
INSERT INTO Department (Number, DepartmentName)
VALUES ('d4', 'Skidki');
SAVE TRANSACTION a;
INSERT INTO Department (Number, DepartmentName)
VALUES ('d5', 'Issledovaniye');
SAVE TRANSACTION b;
INSERT INTO Department (Number, DepartmentName)
VALUES ('d6', 'Menedjment');
ROLLBACK TRANSACTION b; -- joriy holatdan b qismgacha bo’lgan barcha o’zgarishlar
-- bekor qilinadi
INSERT INTO Department (Number, DepartmentName)
VALUES ('d7', 'Podderjka');
ROLLBACK TRANSACTION a; -- joriy holatdan a gacha bo’lgan o’zgarishlar bekor qilinadi
COMMIT TRANSACTION;
Ushbu misolda ishlaydigan yagona instruksiya - bu birinchi INSERT instruksiyasi. Uchinchi INSERT instruksiyasi o`zgarishlari “ROLLBACK TRANSACTION b” bilan bekor qilinadi va qolgan ikkita INSERT instruksiyalari o`zgarishlari “ROLLBACK TRANSACTION a” (aslida bu “ROLLBACK TRANSACTION b” instruksiyasining ishini ham bajaradi, ya’ni uni hozirgi holatda yozish shart emas)bilan bekor qilinadi.
Agar bazaga ulanish uchun yashirin tranzaktsiya rejimi o'rnatilsa va ulanishda tranzaktsiya ishlatilmasa, quyidagi instruksiyalarning birontasi bajarilishi tranzaksiyani boshlaydi:
ALTER TABLE;
FETCH;
REVOKE;
CREATE TABLE;
GRANT;
SELECT;
DELETE;
INSERT;
TRUNCATE TABLE;
DROP TABLE;
OPEN;
UPDATE.
Do'stlaringiz bilan baham: |