SQL - ธุรกรรม
ธุรกรรมคือหน่วยของงานที่ดำเนินการกับฐานข้อมูล ธุรกรรมคือหน่วยหรือลำดับของงานที่ทำตามลำดับตรรกะไม่ว่าจะเป็นแบบกำหนดเองโดยผู้ใช้หรือโดยอัตโนมัติโดยโปรแกรมฐานข้อมูลบางประเภท
ธุรกรรมคือการเผยแพร่การเปลี่ยนแปลงอย่างน้อยหนึ่งรายการในฐานข้อมูล ตัวอย่างเช่นหากคุณกำลังสร้างบันทึกหรืออัปเดตระเบียนหรือลบระเบียนออกจากตารางแสดงว่าคุณกำลังทำธุรกรรมบนตารางนั้น สิ่งสำคัญคือต้องควบคุมธุรกรรมเหล่านี้เพื่อให้แน่ใจว่าข้อมูลมีความสมบูรณ์และจัดการกับข้อผิดพลาดของฐานข้อมูล
ในทางปฏิบัติคุณจะรวมคิวรี SQL จำนวนมากไว้ในกลุ่มและคุณจะดำเนินการทั้งหมดร่วมกันเป็นส่วนหนึ่งของธุรกรรม
คุณสมบัติของธุรกรรม
ธุรกรรมมีคุณสมบัติมาตรฐานสี่ประการดังต่อไปนี้ซึ่งโดยปกติจะอ้างถึงด้วยตัวย่อ ACID.
Atomicity- ทำให้มั่นใจได้ว่าการดำเนินการทั้งหมดภายในหน่วยงานจะเสร็จสมบูรณ์ มิฉะนั้นธุรกรรมจะถูกยกเลิกเมื่อถึงจุดที่ล้มเหลวและการดำเนินการก่อนหน้านี้ทั้งหมดจะย้อนกลับไปสู่สถานะเดิม
Consistency - ตรวจสอบให้แน่ใจว่าฐานข้อมูลมีการเปลี่ยนแปลงสถานะอย่างถูกต้องเมื่อทำธุรกรรมสำเร็จ
Isolation - ช่วยให้การทำธุรกรรมดำเนินการอย่างอิสระและโปร่งใสซึ่งกันและกัน
Durability - ตรวจสอบให้แน่ใจว่าผลลัพธ์หรือผลของธุรกรรมที่ตกลงกันยังคงอยู่ในกรณีที่ระบบล้มเหลว
การควบคุมธุรกรรม
คำสั่งต่อไปนี้ใช้เพื่อควบคุมธุรกรรม
COMMIT - เพื่อบันทึกการเปลี่ยนแปลง
ROLLBACK - เพื่อย้อนกลับการเปลี่ยนแปลง
SAVEPOINT - สร้างคะแนนภายในกลุ่มของธุรกรรมที่จะ ROLLBACK
SET TRANSACTION - ตั้งชื่อในการทำธุรกรรม
คำสั่งควบคุมธุรกรรม
คำสั่งควบคุมธุรกรรมใช้เฉพาะกับ DML Commandsเช่น - INSERT, UPDATE และ DELETE เท่านั้น ไม่สามารถใช้ในขณะที่สร้างตารางหรือวางตารางได้เนื่องจากการดำเนินการเหล่านี้ถูกส่งโดยอัตโนมัติในฐานข้อมูล
คำสั่ง COMMIT
คำสั่ง COMMIT เป็นคำสั่งธุรกรรมที่ใช้เพื่อบันทึกการเปลี่ยนแปลงที่เรียกใช้โดยธุรกรรมไปยังฐานข้อมูล
คำสั่ง COMMIT เป็นคำสั่งธุรกรรมที่ใช้เพื่อบันทึกการเปลี่ยนแปลงที่เรียกใช้โดยธุรกรรมไปยังฐานข้อมูล คำสั่ง COMMIT บันทึกธุรกรรมทั้งหมดลงในฐานข้อมูลตั้งแต่คำสั่ง COMMIT หรือ ROLLBACK สุดท้าย
ไวยากรณ์สำหรับคำสั่ง COMMIT มีดังนี้
COMMIT;
Example
พิจารณาตารางลูกค้าที่มีบันทึกต่อไปนี้ -
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
ต่อไปนี้เป็นตัวอย่างที่จะลบระเบียนเหล่านั้นออกจากตารางที่มี age = 25 แล้วจึงยอมรับการเปลี่ยนแปลงในฐานข้อมูล
SQL> DELETE FROM CUSTOMERS
WHERE AGE = 25;
SQL> COMMIT;
ดังนั้นสองแถวจากตารางจะถูกลบและคำสั่ง SELECT จะให้ผลลัพธ์ดังต่อไปนี้
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
คำสั่ง ROLLBACK
คำสั่ง ROLLBACK เป็นคำสั่งธุรกรรมที่ใช้ในการเลิกทำธุรกรรมที่ยังไม่ได้บันทึกลงในฐานข้อมูล คำสั่งนี้สามารถใช้เพื่อเลิกทำธุรกรรมนับตั้งแต่คำสั่ง COMMIT หรือ ROLLBACK ล่าสุดถูกเรียกใช้
ไวยากรณ์สำหรับคำสั่ง ROLLBACK มีดังนี้ -
ROLLBACK;
Example
พิจารณาตารางลูกค้าที่มีบันทึกต่อไปนี้ -
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
ต่อไปนี้เป็นตัวอย่างซึ่งจะลบระเบียนเหล่านั้นออกจากตารางที่มีอายุ = 25 จากนั้น ROLLBACK การเปลี่ยนแปลงในฐานข้อมูล
SQL> DELETE FROM CUSTOMERS
WHERE AGE = 25;
SQL> ROLLBACK;
ดังนั้นการดำเนินการลบจะไม่ส่งผลกระทบต่อตารางและคำสั่ง SELECT จะให้ผลลัพธ์ดังต่อไปนี้
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
คำสั่ง SAVEPOINT
SAVEPOINT เป็นจุดหนึ่งในการทำธุรกรรมเมื่อคุณสามารถหมุนธุรกรรมกลับไปที่จุดหนึ่งโดยไม่ต้องย้อนกลับธุรกรรมทั้งหมด
ไวยากรณ์สำหรับคำสั่ง SAVEPOINT มีดังที่แสดงด้านล่าง
SAVEPOINT SAVEPOINT_NAME;
คำสั่งนี้ใช้เฉพาะในการสร้าง SAVEPOINT จากคำสั่งธุรกรรมทั้งหมด คำสั่ง ROLLBACK ใช้เพื่อเลิกทำกลุ่มธุรกรรม
ไวยากรณ์สำหรับการย้อนกลับไปที่ SAVEPOINT มีดังที่แสดงด้านล่าง
ROLLBACK TO SAVEPOINT_NAME;
ต่อไปนี้เป็นตัวอย่างที่คุณวางแผนที่จะลบระเบียนที่แตกต่างกันสามรายการออกจากตาราง CUSTOMERS คุณต้องการสร้าง SAVEPOINT ก่อนการลบแต่ละครั้งเพื่อให้คุณสามารถ ROLLBACK ไปยัง SAVEPOINT ได้ตลอดเวลาเพื่อคืนข้อมูลที่เหมาะสมให้กลับสู่สถานะดั้งเดิม
Example
พิจารณาตารางลูกค้าที่มีบันทึกต่อไปนี้
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
บล็อกรหัสต่อไปนี้ประกอบด้วยชุดของการดำเนินการ
SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.
ตอนนี้การลบทั้งสามได้เกิดขึ้นแล้วให้เราสมมติว่าคุณเปลี่ยนใจและตัดสินใจที่จะ ROLLBACK ไปที่ SAVEPOINT ที่คุณระบุว่าเป็น SP2 เนื่องจาก SP2 ถูกสร้างขึ้นหลังจากการลบครั้งแรกการลบสองครั้งสุดท้ายจะถูกยกเลิก -
SQL> ROLLBACK TO SP2;
Rollback complete.
สังเกตว่ามีเพียงการลบครั้งแรกเท่านั้นที่เกิดขึ้นนับตั้งแต่คุณย้อนกลับไปที่ SP2
SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
6 rows selected.
คำสั่ง RELEASE SAVEPOINT
คำสั่ง RELEASE SAVEPOINT ใช้เพื่อลบ SAVEPOINT ที่คุณสร้างขึ้น
ไวยากรณ์สำหรับคำสั่ง RELEASE SAVEPOINT มีดังนี้
RELEASE SAVEPOINT SAVEPOINT_NAME;
เมื่อปล่อย SAVEPOINT แล้วคุณจะไม่สามารถใช้คำสั่ง ROLLBACK เพื่อยกเลิกการทำธุรกรรมที่ดำเนินการตั้งแต่ SAVEPOINT ล่าสุดได้อีกต่อไป
คำสั่ง SET TRANSACTION
คำสั่ง SET TRANSACTION สามารถใช้เพื่อเริ่มต้นธุรกรรมฐานข้อมูล คำสั่งนี้ใช้เพื่อระบุลักษณะสำหรับธุรกรรมที่ตามมา ตัวอย่างเช่นคุณสามารถระบุธุรกรรมที่จะอ่านอย่างเดียวหรืออ่านเขียน
ไวยากรณ์สำหรับคำสั่ง SET TRANSACTION มีดังนี้
SET TRANSACTION [ READ WRITE | READ ONLY ];