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 ];