SQL Server Transaction : สอน คำสั่ง ของ Transaction, เรียน คำสั่ง ของ Transaction
 

Reference

Reference ในเว็บไซต์ Function.in.th เป็นการนำเสนอความรู้ในรูปแบบของแหล่งอ้างอิงของคำสั่งต่าง ๆ ที่ใช้ในการเขียนโปรแกรม โดยผู้ที่สนใจสามารถเข้ามาเรียนรู้การใช้งานคำสั่งของการเขียนโปรแกรมเหล่านี้ได้ ผ่านทาง URL code.function.in.th ทั้งนี้ผู้อ่านยังสามารถร่วมแสดงความคิดเห็นบนเนื้อหาที่มีสอนได้ ซึ่งถือเป็นการส่งเสริมให้มีการแลกเปลี่ยนประสบการณ์และความรู้ระหว่างผู้อ่านด้วยกันเอง
  • Transaction คืออะไร ?? Transaction คืออะไร ??
    องค์ประกอบของ Transactions องค์ประกอบของ Transactions
    ประเภทของ Transaction ประเภทของ Transaction
    Explicit Transactions Explicit Transactions
    Implicit Transactions Implicit Transactions
    Automatic Transactions Automatic Transactions
    @@TRANCOUNT ตรวจสอบจำนวน Transaction ที่เปิดใช้อยู่
    SET XACT_ABORT กำหนดว่าจะหยุดทำงานเมื่อ error หรือไม่
    ตัวอย่างของ Explicit Transactions ตัวอย่างของ Explicit Transactions
    ตัวอย่างของ Explicit Transactions ( 2 ) ตัวอย่างของ Explicit Transactions ( 2 )
    ตัวอย่างของ Implicit Transactions ตัวอย่างของ Implicit Transactions
  • subject :
    Transaction คืออะไร ??

    content :
    Transactions คือ หน่วยการทำงานโดยมีหลักการสำคัญที่ว่า หน่วยของการทำงานจะสำเร็จได้ก็ต่อเมื่อ
    ทุกคำสั่งที่อยู่ในหน่วยการทำงานนั้นๆต้องสำเร็จทั้งหมด แต่ถ้ามีคำสั่งใดคำสั่งหนึ่งในหน่วยของการทำงาน
    ไม่สามารถทำงานได้อย่างถูกต้องแล้ว ทุกคำสั่งที่ทำไปแล้วจะต้องคืนค่าที่เปลี่ยนไปนั้น ให้กลับไปอยู่ใน
    สภาพเดิม คือสภาพก่อนที่หน่วยของการทำงานจะเริ่มขึ้นทั้งหมด
    โดยตามหลักการทำงานของ Transactions จะสามารถรับประกันได้ว่า การทำงานจะสามารถกระทำได้สำเร็จ
    ครบถ้วน หรือไม่ได้ทำการใดๆเลย เพราะจะไม่มีกรณีที่ทำงานค้างอยู่ครึ่งๆกลางๆ
    และในระหว่างการทำงานของ Transactions หนึ่งๆนั้น จะไม่มี Transactions อื่นสามารถเข้ามาแก้ไข
    ข้อมูลที่กำลังดำเนินการอยู่ได้ ทั้งนี้เพราะมีการ Lock ข้อมูลเอาไว้

  • subject :
    องค์ประกอบของ Transactions มี 4 ประการ ( ACID ) ได้แก่

    content :
    > Atomicity คือความเป็นอันหนึ่งอันเดียวกัน โดยทุกคำสั่งใน Transaction หนึ่ง
    จะต้องทำงานได้สำเร็จทั้งหมด ถ้าไม่อย่างนั้นก็จะต้องมีการคืนสภาพกลับไปยังจุดเริ่มต้น
    เหมือนไม่มีการดำเนินการใดๆเกิดขึ้นเลย
    > Consistency คือจะมีความถูกต้องของข้อมูลเสมอ ( เพราะถ้าคำสั่งใน Transaction เกิด
    ความผิดพลาดขึ้น ก็จะมีการคืนสภาพกลับไปยังจุดเริ่มต้น )
    > Isolation คือมีความเป็นส่วนตัว เพราะในแต่ละ Transaction จะถูกแยกออกจากกันอย่างสิ้นเชิง
    ทำให้การทำงานใน Transaction หนึ่งจะไม่ไปรบกวนอีก Transaction หนึ่ง
    > Durability คือมีความทนทาน

  • subject :
    ประเภทของ Transaction

    content :
    Transaction มี 3 ประเภท ได้แก่
    > Explicit Transactions
    > Implicit Transactions 
    > Automatic Transactions

  • subject :
    Explicit Transactions

    content :
    เป็น Transactions ที่สามารถกระทำได้โดยการใช้คำสั่งจาก sql โดยประกอบด้วย คำสั่งดังนี้
    1.) BEGIN TRANSACTION transaction_name [ WITH MARK ["description"] ]
    เป็นการกำหนดให้รู้ว่าจะเริ่มต้น Transactions ที่ตรงจุดนี้
    
    2.) COMMIT TRANSACTION transaction_name
    เป็นการกำหนดให้รู้ว่าสิ้นสุดการทำงานของ Transactions ที่ตรงจุดนี้
    โดยในกรณีที่มี Transactions ซ้อน Transactions แล้ว
    ถ้ามีการ commit transaction ที่อยู่ภายใน ก็จะเป็นเพียงการบอกถึงความสำเร็จ
    ของการทำงานของ transaction นั้นๆเท่านั้นจะยังไม่มีการบันทึกข้อมูลจริง
    เพราะการบันทึกข้อมูลจริงจะมีได้ก็ต่อเมื่อมีการ commit transaction ของ
    transaction ตัวนอกสุด
    
    3.) COMMIT WORK
    เป็นการกำหนดให้รู้ว่าสิ้นสุดการทำงานของ Transactions ที่ตรงจุดนี้
    
    4.) ROLLBACK TRANSACTION { transaction_name | savepoint_name }
    เป็นการกำหนดให้ rollback กลับไปยัง savepoint_name ที่กำหนด
    หรือ rollback การทำงานของ transaction_name ที่กำหนดทั้งหมด
    
    5.) ROLLBACK WORK
    เป็นการกำหนดให้ rollback การทำงานของ Transaction ทั้งหมด
    
    6.) SAVE TRANSACTION savepoint_name
    เป็นการ save จุดของ Transactions เพื่อที่จะสามารถให้ rollback กลับมายังจุดนี้ได้
    และหลังจากนั้นการดำเนินงานก็จะยังคงดำเนินต่อไป จากจุดเดิม
    โดยสามารถใช้ชื่อ savepoint_name เหมือนเดิมได้หลายครั้ง
    แต่เมื่อมีการ rollback กลับมาที่ savepoint_name นี้ ก็จะอ้างอิงไปถึง 
    savepoint_name ล่าสุดนี้
    
    *.) คำสั่งที่ไม่สามารถใช้งานได้ใน Emplicit Transactions ได้แก่
    ALTER DATABASE, DROP DATABASE, RECOFIGURE, BACKUP LOG, RESOTRE DATABASE,
    CREATE DATABASE, RESTORE LOG, UPDATE STATISTICS, DISK INIT, LOAD DATABASE,
    LOAD TRANSACTION, DUMP TRANSACTION

  • subject :
    Implicit Transactions 

    content :
    เป็น Transactions ที่สามารถทำได้โดยการกำหนด mode ของการทำงานในแต่ละ session
    ที่ต้องการให้เป็น ON และยกเลิกการทำงานโดยการกำหนดให้เป็น OFF
    ( โดยคำสั่ง SET IMPLICiT_TRANSACTIONS { ON | OFF } )
    
    โดยถ้ากำหนด mode ของการทำงานให้เป็น on แล้วพบคำสั่งต่อไปนี้
    ระบบจะทำการสร้าง Transactions ให้โดยอัตโนมัติ ได้แก่
    ALTER TABLE, FETCH, REVOKE, CREATE, GRANT, SELECT, DELETE, INSERT,
    TRUNCATE TABLE, DROP, OPEN, UPDATE
    
    หลักการทำงานของ Implicit Transactions คือ
    เมื่ออยู่ใน mode การทำงานของ implicit transactions แล้ว
    การเริ่มต้นของการทำงานของ Transactions นี้ไม่ต้องเริ่มที่คำสั่ง BEGIN TRANSACTION
    เพราะระบบจะรู้เองว่าจะเริ่มต้น Transactions เมื่อพบ keyword ข้างต้น ( ALTER TABLE, FETCH, ..., UPDATE )
    แต่การ COMMIT TRANSACTION หรือ ROLLBACK TRANSACTION ยังคงต้องมีอยู่
    เพื่อบอกให้ระบบรู้ถึงการสิ้นสุดในการทำงานของแต่ละ Transaction
    
    โดยปกติถ้ามีการใช้คำสั่ง BEGIN TRANSACTION และเสร็จสิ้นการทำงานกับ Database แล้ว 
    ถ้าไม่มีการ COMMIT TRANSACTION จะทำให้ข้อมูลถูก ROLLBACK โดย อัตโนมัติทันที
    ดังนั้นถึงแม้จะกำหนดให้อยู่ใน mode การทำงานของ implicit transactions แล้ว
    ก็ยังจะต้องมีการ COMMIT TRANSACTION อยู่ดี

  • subject :
    Automatic Transactions

    content :
    โดยปกติแล้วทุกๆคำสั่งของ script นั้น แต่ละคำสั่งจะมี Transaction เป็นของตัวเอง คือ 1 คำสั่ง 1 Transaction
    ดังนั้นในแต่ละคำสั่งเมื่อทำเสร็จก็จะมีการเขียนลง File Transaction Log แบบคำสั่งต่อคำสั่ง
    ทำให้สิ้นเปลือง resource ของระบบ
    ( สรุปคือถ้ามีการใช้ Explicit Transaction ก็จะทำให้มีการเขียน File Transaction Log ลดน้อยลง )

  • subject :
    @@TRANCOUNT

    syntax :
    @@TRANCOUNT

    content :
    ใช้คืนค่า จำนวนของ transaction ที่เปิดใช้อยู่

    example :
    BEGIN TRANSACTION tran_outerest
    	
    	PRINT @@TRANCOUNT
    
    	BEGIN TRANSACTION tran_inner_1
    		SELECT id, firstname, lastname, sex FROM person
    		UPDATE person SET firstname = 'Mr. ' + firstname WHERE set = 1
    		UPDATE person SET firstname = 'Mrs. ' + firstname WHERE set = 2
    	COMMIT TRANSACTION tran_inner_1
    	
    	PRINT @@TRANCOUNT
    
    	BEGIN TRANSACTION tran_inner_2
    		INSERT INTO person ( firstname, lastname, sex ) VALUES ( 'function', 'in.th', 1 )
    		IF @@ERROR > 0
    		BEGIN
    			ROLLBACK TRANSACTION tran_inner_2
    		END
    	COMMIT TRANSACTION tran_inner_2
    	
    	PRINT @@TRANCOUNT
    
    COMMIT TRANSACTION tran_outerest
    
    PRINT @@TRANCOUNT

  • subject :
    SET XACT_ABORT

    syntax :
    SET XACT_ABORT { ON | OFF }

    content :
    เป็นการกำหนดว่า เมื่อมี run time error เกิดขึ้นภายใน Transaction 
    ต้องการให้ระบบหยุดการทำงานของ Transaction และ RollBack ข้อมูล
    กลับไปทั้งหมด ใช่หรือไม่

    example :
    SET XACT_ABORT ON
    
    BEGIN TRANSACTION
    
    	SELECT id, firstname, lastname, sex FROM person
    
    	INSERT INTO person ( firstname, lastname, sex ) VALUES ( 'function', 'in.th', 1 )
    	IF @@ERROR > 0
    	BEGIN
    		ROLLBACK TRANSACTION
    	END
    
    COMMIT TRANSACTION

  • subject :
    ตัวอย่างของ Explicit Transactions

    example :
    BEGIN TRANSACTION
    
    	SELECT id, firstname, lastname, sex FROM person
    
    	INSERT INTO person ( firstname, lastname, sex ) VALUES ( 'function', 'in.th', 1 )
    	IF @@ERROR > 0
    	BEGIN
    		ROLLBACK TRANSACTION
    	END
    
    COMMIT TRANSACTION

  • subject :
    ตัวอย่างของ Explicit Transactions ( 2 )

    example :
    BEING TRANSACTION
    	
    	DELETE person WHERE id = 101
    
    	SAVE TRANSACTION point_1
    
    	INSERT INTO person ( firstname, lastname, sex ) VALUES ( 'function', 'in.th', 1 )
    	IF @@ERROR > 0
    	BEGIN
    		ROLLBACK TRANSACTION point_1
    	END
    
    	UPDATE person SET firstname = "Mr. " + firstname WHERE sex = 1
    	IF @@ERROR > 0
    	BEGIN
    		ROLLBACK TRANSACTION 
    	END
    
    COMMIT TRANSACTION

  • subject :
    ตัวอย่างของ Implicit Transactions

    example :
    SET IMPLICIT_TRANSACTION ON
    	
    	SELECT id, firstname, lastname, sex FROM person
    
    	INSERT INTO person ( firstname, lastname, sex ) VALUES ( 'function', 'in.th', 1 )
    
    	COMMIT TRANSACTION
    
    	DELETE person WHERE id = 101
    
    	IF @@ERROR > 0
    	BEGIN
    		ROLLBACK TRANSACTION
    	END
    
    	COMMIT TRANSACTION
    
    SET IMPLICIT_TRANSACTION OFF

 
Share This Chapter Login with Facebook