T-SQL - ธุรกรรม
ก transactionเป็นหน่วยงานที่ดำเนินการกับฐานข้อมูล ธุรกรรมคือหน่วยหรือลำดับของงานที่ทำตามลำดับตรรกะไม่ว่าจะเป็นแบบกำหนดเองโดยผู้ใช้หรือโดยอัตโนมัติโดยโปรแกรมฐานข้อมูลบางประเภท
ธุรกรรมคือการเผยแพร่การเปลี่ยนแปลงอย่างน้อยหนึ่งรายการในฐานข้อมูล ตัวอย่างเช่นหากคุณกำลังสร้างบันทึกหรืออัปเดตระเบียนหรือลบบันทึกออกจากตารางแสดงว่าคุณกำลังทำธุรกรรมบนโต๊ะ เป็นสิ่งสำคัญในการควบคุมธุรกรรมเพื่อให้แน่ใจว่าข้อมูลมีความสมบูรณ์และจัดการกับข้อผิดพลาดของฐานข้อมูล
ในทางปฏิบัติคุณจะรวมคำถาม SQL จำนวนมากไว้ในกลุ่มและคุณจะดำเนินการทั้งหมดร่วมกันเป็นส่วนหนึ่งของธุรกรรม
คุณสมบัติของธุรกรรม
ธุรกรรมมีคุณสมบัติมาตรฐานสี่ประการดังต่อไปนี้โดยปกติจะอ้างถึงโดยตัวย่อ ACID -
Atomicity- ตรวจสอบให้แน่ใจว่าการดำเนินการทั้งหมดภายในหน่วยงานเสร็จสมบูรณ์ มิฉะนั้นธุรกรรมจะถูกยกเลิกเมื่อถึงจุดที่ล้มเหลวและการดำเนินการก่อนหน้านี้จะย้อนกลับไปสู่สถานะเดิม
Consistency - ตรวจสอบให้แน่ใจว่าฐานข้อมูลมีการเปลี่ยนแปลงสถานะอย่างเหมาะสมเมื่อทำธุรกรรมสำเร็จ
Isolation - ช่วยให้การทำธุรกรรมดำเนินการอย่างอิสระและโปร่งใสซึ่งกันและกัน
Durability - ตรวจสอบให้แน่ใจว่าผลลัพธ์หรือผลของธุรกรรมที่ตกลงกันยังคงมีอยู่ในกรณีที่ระบบล้มเหลว
การควบคุมธุรกรรม
มีคำสั่งต่อไปนี้ที่ใช้ในการควบคุมธุรกรรม -
COMMIT - เพื่อบันทึกการเปลี่ยนแปลง
ROLLBACK - เพื่อย้อนกลับการเปลี่ยนแปลง
SAVEPOINT - สร้างคะแนนภายในกลุ่มของธุรกรรมที่จะ ROLLBACK
SET TRANSACTION - ตั้งชื่อในการทำธุรกรรม
คำสั่งควบคุมธุรกรรมใช้เฉพาะกับคำสั่ง DML INSERT, UPDATE และ DELETE เท่านั้น ไม่สามารถใช้ในขณะที่สร้างตารางหรือวางตารางได้เนื่องจากการดำเนินการเหล่านี้ถูกส่งโดยอัตโนมัติในฐานข้อมูล
ในการใช้คำสั่งควบคุมธุรกรรมใน MS SQL Server เราต้องเริ่มทำธุรกรรมด้วยคำสั่ง 'begin tran' หรือคำสั่งเริ่มต้นธุรกรรมมิฉะนั้นคำสั่งเหล่านี้จะไม่ทำงาน
คอมมิตคำสั่ง
คำสั่ง COMMIT เป็นคำสั่งธุรกรรมที่ใช้บันทึกการเปลี่ยนแปลงที่เรียกใช้โดยธุรกรรมไปยังฐานข้อมูล คำสั่งนี้บันทึกธุรกรรมทั้งหมดลงในฐานข้อมูลตั้งแต่คำสั่ง COMMIT หรือ ROLLBACK สุดท้าย
ไวยากรณ์
ต่อไปนี้เป็นไวยากรณ์สำหรับคำสั่ง COMMIT
COMMIT;
ตัวอย่าง
พิจารณาตารางลูกค้าที่มีระเบียนต่อไปนี้
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 จากนั้นจึงยอมรับการเปลี่ยนแปลงในฐานข้อมูล
Begin Tran
DELETE FROM CUSTOMERS
WHERE AGE = 25
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
ตัวอย่าง
พิจารณาตารางลูกค้าที่มีระเบียนต่อไปนี้
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 จากนั้น ROLLBACK การเปลี่ยนแปลงในฐานข้อมูล
Begin Tran
DELETE FROM CUSTOMERS
WHERE AGE = 25;
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
SAVE TRANSACTION SAVEPOINT_NAME
คำสั่งนี้ใช้เฉพาะในการสร้าง SAVEPOINT ท่ามกลางคำสั่งธุรกรรม คำสั่ง ROLLBACK ใช้เพื่อเลิกทำกลุ่มธุรกรรม
ต่อไปนี้เป็นไวยากรณ์สำหรับการย้อนกลับไปที่ SAVEPOINT
ROLLBACK TO SAVEPOINT_NAME
ในตัวอย่างต่อไปนี้เราจะลบระเบียนที่แตกต่างกันสามรายการออกจากตาราง CUSTOMERS เราจะต้องสร้าง SAVEPOINT ก่อนการลบแต่ละครั้งเพื่อให้เราสามารถ ROLLBACK ไปยัง SAVEPOINT ได้ตลอดเวลาเพื่อคืนข้อมูลที่เหมาะสมให้กลับสู่สถานะเดิม
ตัวอย่าง
พิจารณาตารางลูกค้าที่มีบันทึกต่อไปนี้ -
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
ต่อไปนี้เป็นชุดปฏิบัติการ -
Begin Tran
SAVE Transaction SP1
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 1
1 row deleted.
SAVE Transaction SP2
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 2
1 row deleted.
SAVE Transaction SP3
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 3
1 row deleted.
อย่างไรก็ตามการลบสามครั้งเกิดขึ้นเราเปลี่ยนใจและตัดสินใจที่จะ ROLLBACK ไปที่ SAVEPOINT ที่เราระบุว่าเป็น SP2 เนื่องจาก SP2 ถูกสร้างขึ้นหลังจากการลบครั้งแรกการลบสองครั้งสุดท้ายจะถูกยกเลิก -
ROLLBACK Transaction SP2
Rollback complete.
สังเกตว่ามีเพียงการลบครั้งแรกเท่านั้นที่เกิดขึ้นตั้งแต่เราย้อนกลับไปที่ SP2
SELECT * FROM CUSTOMERS
เลือก 6 แถว
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
คำสั่ง SET TRANSACTION
คำสั่ง SET TRANSACTION สามารถใช้เพื่อเริ่มต้นธุรกรรมฐานข้อมูล คำสั่งนี้ใช้เพื่อระบุลักษณะสำหรับธุรกรรมที่ตามมา
ไวยากรณ์
ต่อไปนี้เป็นไวยากรณ์สำหรับ SET TRANSACTION
SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>