Orders jadvaliga qo'shilmagan holatga qaytishingiz kerak. Lekin
siz
Customers jadvaliga ma'lumotlar qo'shishni bekor qilishni xohlamasligingiz mumkin (agar u
bajarilgan bo'lsa).
Tranzaksiyaning bir qismini bekor qilish uchun siz ko'rsatmalar blokidagi strategik nuqtalarda
teglarni joylashtirish imkoniyatiga ega bo'lishingiz kerak. Keyin, agar siz qisman orqaga qaytarishingiz
kerak bo'lsa, ma'lumotlar bazasini teglardan biriga mos keladigan holatga qaytarishingiz mumkin.
SQLda bu teglar saqlash nuqtalari deb ataladi. Bunday nuqtani yaratish uchun MariaDB,
MySQL va Oracle
SAVEPOINT bayonotidan foydalanadi.
SAVEPOINT delete1;
SQL Serverda siz quyidagilarni bajarishingiz kerak.
SAVE TRANSACTION deletel;
Har bir saqlash nuqtasi uni o'ziga xos tarzda identifikatsiya qiluvchi noyob nomga ega bo'lishi
kerak, shuning uchun siz orqaga qaytganingizda, MBBT qaysi nuqtaga qaytishi kerakligini "biladi".
SQL Serverda ushbu nuqtadan keyin barcha bayonotlarni bekor qilish uchun quyidagilarni bajaring:
ROLLBACK TRANSACTION deletel;
Buni MariaDB, MySQL va Oracle qilish kerak.
ROLLBACK ТО deletel;
Nihoyat quyida SQL Server uchun to'liq misol:
BEGIN TRANSACTION
INSERT INTO Customers(cust_id, cust_name)
VALUES(’1000000010’, ’Toys Emporium');
SAVE TRANSACTION StartOrder;
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20100,’2001/12/1’,’1000000010’);
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
INSERT INTO Orderlterns(order_num, order_item, prod_id, quantity, item_price)
VALUES(20100, 1, 'BR01’, 100, 5.49);
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20100, 2, 'BR03', 100, 10.99);
IF 0@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
COMMIT TRANSACTION
Bu yerda to'rtta
INSERT bayonotlari to'plami bajariladi, ular tranzaksiyaga birlashtiriladi.
Saqlash nuqtasi birinchi
Do'stlaringiz bilan baham: |