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;