SỰ DUY TRÌ TÍNH TOÀN VẸN CHO CƠ SỞ DỮ LIỆU:

Một phần của tài liệu Lập trình cơ sở dữ liệu C Sharp-Phần 1 ppt (Trang 70 - 72)

Phần mềm cơ sở dữ liệu bảo đảm rằng những thông tin lưu trữ trong các bảng là nhất quán . trong những điều kiện kỷ thuật, nó duy trì tính toàn vẹn của thông tin. Hai thí dụ về điều này như sau :

● khoá chính cuả một hàng luôn luôn chứa một diá trị duy nhất.

● khoá phu cuả một hàng trong bảng con luôn tham chiếu một giá trị hiện hữu trong bảng cha.

Hãy xem những gì sảy ra khi bạn cố gán một hàng vào một bảng với một khoá chính đã tồn tại trong bảng. phát biểu INSERT sau đang cố thử thêm một hàng vào bảng Customers với CustomerID = ALFKI ( khoá này đã tồn tại trong bảng Customers)

INSERT INTO Customers (

CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax

) VALUES (

'New York', NULL, '12345', 'USA', '(800)-555-1212', NULL );

Nếu bạn cố thử chạy phát biểu INSERT này, bạn sẽ nhận một thông báo lỗi từ co8 sở dữ liệu :

Violation of PRIMARY KEY constraint 'PK_Customers'. Cannot insert duplicate key in object 'Customers'.

The statement has been terminated.

Hãy xem nhũng gì sẽ sảy ra khi bạn cố sửa đổi một khoá chính ở bảng cha có một giá trị đã được tham chiếu từ một khoá phụ trong bảng con. Phát biểu UPDATE sau cố sửa đổi CustomerID từ ALFKI thành ALFKZ trong bảng cha Customers ( hàng này được tham chiếu bởi những hàng trong bảng con Orders) :

UPDATE Customers

SET CustomerID = 'ALFKZ' WHERE CustomerID = 'ALFKI';

Nếu bạn cố chạy thử phát biểu UPDATE này , bạn sẽ nhận thông báo lỗi như sau:

Phát biểu UPDATE này xung đột với cột tham chiếu ràng buộc 'FK_Orders_Customers'. Sự xung đột này sảy ra trong cơ sở dữ liệu ‘NorthWind’, bàng ‘Orders’, cột ‘CustomerID’. Phát biểu này đã bị giới hạn.

Phát biểu UPDATE này bị hỏng vì hàng chứa giá trị khoá chính là ALFKI được tham chiếu bởi những han2g trong bàng Orders. Thông báo cho bạn biết giá trị mới cho cột CustomerID đã vi phạm sự ràng buộc khoá phụ trên cột CustomerID của bàng Orders. Ràng buộc nà có tên FK_Orders_Customers.

Bạn cũng không thể xoá một hàng từ một bảng cha được tham chiếu bởi một hàng trong bảng con. Thí dụ, phát biểu SELECT dưới đây cố thử xoá hàng từ bảng Customers có cột CustomerID bằng ALFKI ( hàng này được tham chiếu bởi những hàng trong bảng Orders) :

DELETE FROM Customers WHERE CustomerID = 'ALFKI';

Nếu bạn cố chạy thử phát biểu DELETE này ,bạn sẽ nhận được thông báo lỗi tương tự như trên.

GOM NHÓM NHNG CÂU LNH SQL:

Theo mặc định , khi bạn chạy một phát biểu INERT, UPDATE, hay DELETE , SQL Server luôn ghi lại những kết quả của phát biểu vào cơ sở dữ liệu . đây có thể không phải luôn luôn là kết quả mong muốn của bạn. thí dụ , trong trường hợp một giao dịch ngân hàng, bạn có thể muốn rút tiền từ một tài khoản và giửi sang một tài khoản khác. Nếu bạn có hai phát biểu UPDATE riêng biệt thực hiện việc rút và gởi, và bạn muốn thực hiện kết quả cho mỗi phát biểu UPDATE thường xuyên chỉ như một đơn vị. Nếu như sự cập nhật bị thất bại do một lí do nào đó, và bạn muốn huỷ những kết quả của cả hai phát biểu UPDATE này.

Chú thích: luôn luôn thực hiện việc ghi lại những kết quả của những phát biểu SQL được hiểu như là một cam kết, hay sự giao phó cho những câu lệnh SQL. Việc huỷ những kết quả của những câu lệnh SQL được hiểu như một sự trả lại tình trạng cũ ( như khi chưa thực thi UPDATE).

Bạn có thể nhóm các câu lệnh SQL trong một trasaction. Và sau đó bạn có thể thực hiện hoặc quay trỏ lại những câu lệnh SQL trong transaction đó như một đơn vị. thí dụ , hai phát biểu trước trong thí dụ về ngân hàng có thể được đặt vào trong một transaction , và rồi bạn có thể giao phó sự thực hiện hay quay ngược giao dic5ch này như một đơn vị,

Tuỳ thuộc vào hai phát biểu này có thành công hay không.

Bạn khởi chạy một giao dịch sử dụng phát biểu BEGIN TRANSASTION hay phiên bản tốc ký ,BEGIN TRAN. Sau đó bạn có thể thực hiện những phát biểu SQL đã tạo thành transaction này. Để giao phó sự thực thi cho

transaction bạn thực thi một phát biểu COMMIT TRANSACTION hoặc một trong số trong phiên bản tốc ký,

COMMIT TRAN hoặc COMMIT. Để roll back một transaction ,bạn thực hiện một phát biểu ROLLBACK TRANSACTION hoặc một trong số những phiên bản tốc ký , ROLLBACK TRANS hay ROLLBACK.

Chú ý : theo mặc định , transaction là phục hồi (rollback) . bạn phải luôn luôn chỉ định rõ ràng commit hay roll back một transaction để cho biết bạn muốn làm gì.

Hãy xem một thí dụ , transaction dưới đây bao gồm hai phát biểu INSERT : phát biểu thứ nhất thêm một hàng vào bảng Customers, và phát biểu thứ hai thêm một hàng vào bảng Orders. Cuối cùng , giao dịch này được giao phó sử dụng phát biểu COMMIT :

BEGIN TRANSACTION; INSERT INTO Customers ( CustomerID, CompanyName

) VALUES (

Một phần của tài liệu Lập trình cơ sở dữ liệu C Sharp-Phần 1 ppt (Trang 70 - 72)

Tải bản đầy đủ (PDF)

(154 trang)