HSQLDB - ธุรกรรม

Transactionเป็นกลุ่มตามลำดับของการดำเนินการจัดการฐานข้อมูลซึ่งดำเนินการและถือว่าเป็นหน่วยงานเดียว กล่าวอีกนัยหนึ่งคือเมื่อดำเนินการทั้งหมดสำเร็จแล้วธุรกรรมทั้งหมดจะเสร็จสมบูรณ์เท่านั้น หากการดำเนินการใด ๆ ภายในธุรกรรมล้มเหลวธุรกรรมทั้งหมดจะล้มเหลว

คุณสมบัติของธุรกรรม

โดยทั่วไปธุรกรรมรองรับคุณสมบัติมาตรฐาน 4 ประการ สามารถเรียกได้ว่าเป็นคุณสมบัติของกรด

Atomicity - การดำเนินการทั้งหมดในธุรกรรมดำเนินการสำเร็จมิฉะนั้นธุรกรรมจะถูกยกเลิกเมื่อถึงจุดที่ล้มเหลวและการดำเนินการก่อนหน้านี้จะย้อนกลับไปที่ตำแหน่งก่อนหน้า

Consistency - ฐานข้อมูลมีการเปลี่ยนแปลงสถานะอย่างถูกต้องเมื่อทำธุรกรรมสำเร็จ

Isolation - ช่วยให้ธุรกรรมสามารถดำเนินการได้อย่างอิสระและโปร่งใสซึ่งกันและกัน

Durability - ผลลัพธ์หรือผลของธุรกรรมที่ตกลงกันยังคงมีอยู่ในกรณีที่ระบบล้มเหลว

Commit, Rollback และ Savepoint

คำหลักเหล่านี้ส่วนใหญ่ใช้สำหรับธุรกรรม HSQLDB

Commit- ควรทำธุรกรรมที่สำเร็จทุกครั้งโดยดำเนินการคำสั่ง COMMIT

Rollback - หากเกิดความล้มเหลวในธุรกรรมคำสั่ง ROLLBACK ควรถูกเรียกใช้เพื่อส่งคืนทุกตารางที่อ้างถึงในธุรกรรมกลับสู่สถานะก่อนหน้า

Savepoint - สร้างจุดภายในกลุ่มธุรกรรมที่จะย้อนกลับ

ตัวอย่าง

ตัวอย่างต่อไปนี้อธิบายถึงแนวคิดการทำธุรกรรมพร้อมกับการกระทำการย้อนกลับและ Savepoint ให้เราพิจารณาตารางลูกค้าด้วยรหัสคอลัมน์ชื่ออายุที่อยู่และเงินเดือน

Id ชื่อ อายุ ที่อยู่ เงินเดือน
1 ราเมช 32 อาเมดาบัด 2,000.00 น
2 การุ ณ 25 เดลี 1500.00
3 Kaushik 23 โคตะ 2,000.00 น
4 ไชยธัญญา 25 มุมไบ 6500.00
5 Harish 27 โภปาล 8500.00
6 คาเมช 22 ส.ส. 1500.00
7 มูราลี 24 อินดอร์ 10,000.00

ใช้คำสั่งต่อไปนี้เพื่อสร้างตารางลูกค้าตามบรรทัดข้อมูลข้างต้น

CREATE TABLE Customer (id INT NOT NULL, name VARCHAR(100) NOT NULL, age INT NOT
NULL, address VARCHAR(20), Salary INT, PRIMARY KEY (id));
Insert into Customer values (1, "Ramesh", 32, "Ahmedabad", 2000);
Insert into Customer values (2, "Karun", 25, "Delhi", 1500);
Insert into Customer values (3, "Kaushik", 23, "Kota", 2000);
Insert into Customer values (4, "Chaitanya", 25, "Mumbai", 6500);
Insert into Customer values (5, "Harish", 27, "Bhopal", 8500);
Insert into Customer values (6, "Kamesh", 22, "MP", 1500);
Insert into Customer values (7, "Murali", 24, "Indore", 10000);

ตัวอย่างสำหรับ COMMIT

แบบสอบถามต่อไปนี้จะลบแถวออกจากตารางที่มี age = 25 และใช้คำสั่ง COMMIT เพื่อใช้การเปลี่ยนแปลงเหล่านั้นในฐานข้อมูล

DELETE FROM CUSTOMERS WHERE AGE = 25;
COMMIT;

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

2 rows effected

หลังจากดำเนินการคำสั่งข้างต้นสำเร็จแล้วให้ตรวจสอบบันทึกของตารางลูกค้าโดยดำเนินการตามคำสั่งที่กำหนดด้านล่าง

Select * from Customer;

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |   ADDRESS |  SALARY  |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  |  32 | Ahmedabad |   2000   |
| 3  |  kaushik |  23 |   Kota    |   2000   |
| 5  |  Harish  |  27 |   Bhopal  |   8500   |
| 6  |  Kamesh  |  22 |    MP     |   4500   |
| 7  |  Murali  |  24 |   Indore  |   10000  |
+----+----------+-----+-----------+----------+

ตัวอย่างสำหรับการย้อนกลับ

ให้เราพิจารณาตารางลูกค้าเดียวกันกับข้อมูลเข้า

Id ชื่อ อายุ ที่อยู่ เงินเดือน
1 ราเมช 32 อาเมดาบัด 2,000.00 น
2 การุ ณ 25 เดลี 1500.00
3 Kaushik 23 โคตะ 2,000.00 น
4 ไชยธัญญา 25 มุมไบ 6500.00
5 Harish 27 โภปาล 8500.00
6 คาเมช 22 ส.ส. 1500.00
7 มูราลี 24 อินดอร์ 10,000.00

นี่คือตัวอย่างแบบสอบถามที่อธิบายเกี่ยวกับฟังก์ชันการย้อนกลับโดยการลบระเบียนออกจากตารางที่มี age = 25 จากนั้น ROLLBACK การเปลี่ยนแปลงในฐานข้อมูล

DELETE FROM CUSTOMERS WHERE AGE = 25;
ROLLBACK;

หลังจากดำเนินการตามคำสั่งสองข้อข้างต้นสำเร็จแล้วคุณสามารถดูข้อมูลบันทึกในตารางลูกค้าโดยใช้คำสั่งต่อไปนี้

Select * from Customer;

หลังจากดำเนินการคำสั่งข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |   ADDRESS |  SALARY  |
+----+----------+-----+-----------+----------+
|  1 |  Ramesh  |  32 | Ahmedabad |   2000   |
|  2 |  Karun   |  25 |   Delhi   |   1500   |
|  3 |  Kaushik |  23 |   Kota    |   2000   |
|  4 | Chaitanya|  25 |   Mumbai  |   6500   |
|  5 |  Harish  |  27 |   Bhopal  |   8500   |
|  6 |  Kamesh  |  22 |     MP    |   4500   |
|  7 |  Murali  |  24 |    Indore |   10000  |
+----+----------+-----+-----------+----------+

คำสั่ง Delete จะลบข้อมูลเรกคอร์ดของลูกค้าที่อายุ = 25 คำสั่ง Rollback จะย้อนกลับการเปลี่ยนแปลงเหล่านั้นในตารางลูกค้า

ตัวอย่างสำหรับ Savepoint

Savepoint เป็นจุดหนึ่งในการทำธุรกรรมเมื่อคุณสามารถหมุนธุรกรรมกลับไปที่จุดหนึ่งโดยไม่ต้องย้อนกลับธุรกรรมทั้งหมด

ให้เราพิจารณาตารางลูกค้าเดียวกันกับข้อมูลเข้า

Id ชื่อ อายุ ที่อยู่ เงินเดือน
1 ราเมช 32 อาเมดาบัด 2,000.00 น
2 การุ ณ 25 เดลี 1500.00
3 Kaushik 23 โคตะ 2,000.00 น
4 ไชยธัญญา 25 มุมไบ 6500.00
5 Harish 27 โภปาล 8500.00
6 คาเมช 22 ส.ส. 1500.00
7 มูราลี 24 อินดอร์ 10,000.00

ให้เราพิจารณาในตัวอย่างนี้คุณวางแผนที่จะลบระเบียนที่แตกต่างกันสามรายการออกจากตารางลูกค้า คุณต้องการสร้าง Savepoint ก่อนการลบแต่ละครั้งเพื่อให้คุณสามารถย้อนกลับไปที่ Savepoint ใด ๆ ได้ตลอดเวลาเพื่อคืนข้อมูลที่เหมาะสมให้กลับสู่สถานะเดิม

นี่คือชุดปฏิบัติการ

SAVEPOINT SP1;
DELETE FROM CUSTOMERS WHERE ID = 1;
SAVEPOINT SP2;
DELETE FROM CUSTOMERS WHERE ID = 2;
SAVEPOINT SP3;
DELETE FROM CUSTOMERS WHERE ID = 3;

ตอนนี้คุณได้สร้าง Savepoint สามรายการและลบบันทึกสามรายการ ในสถานการณ์นี้หากคุณต้องการย้อนกลับระเบียนที่มี Id 2 และ 3 ให้ใช้คำสั่ง Rollback ต่อไปนี้

ROLLBACK TO SP2;

สังเกตว่ามีเพียงการลบครั้งแรกเท่านั้นที่เกิดขึ้นนับตั้งแต่คุณย้อนกลับไปที่ SP2 ใช้แบบสอบถามต่อไปนี้เพื่อแสดงบันทึกทั้งหมดของลูกค้า

Select * from Customer;

หลังจากดำเนินการค้นหาข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |   ADDRESS |  SALARY  |
+----+----------+-----+-----------+----------+
|  2 |   Karun  |  25 |  Delhi    |   1500   |
|  3 |  Kaushik |  23 |  Kota     |   2000   |
|  4 | Chaitanya|  25 |  Mumbai   |   6500   |
|  5 |  Harish  |  27 |  Bhopal   |   8500   |
|  6 |  Kamesh  |  22 |  MP       |   4500   |
|  7 |  Murali  |  24 |  Indore   |  10000   |
+----+----------+-----+-----------+----------+

ปล่อย Savepoint

เราสามารถปล่อย Savepoint โดยใช้คำสั่ง RELEASE ต่อไปนี้เป็นไวยากรณ์ทั่วไป

RELEASE SAVEPOINT SAVEPOINT_NAME;