1. Trang chủ
  2. » Luận Văn - Báo Cáo

Giao trinh h qun tr c s d liu SQL

145 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Giáo trình hệ quản trị sở liệu SQL - ĐHCNHN Biên tập bởi: Tổ HTTT Đại học Công nghiệp Hà Nội Giáo trình hệ quản trị sở liệu SQL - ĐHCNHN Biên tập bởi: Tổ HTTT Đại học Công nghiệp Hà Nội Các tác giả: Tổ HTTT Đại học Công nghiệp Hà Nội Phiên trực tuyến: http://voer.edu.vn/c/0351a5c3 MỤC LỤC Tổng quan DBMS SQL sever Ngôn ngữ định nghĩa liệu Ngôn ngữ thao tác liệu 3.1 Ngôn ngữ thao tác liệu 3.2 Phép nối Làm việc với View ( khung nhìn ) Bảo mật SQL Thủ tục lưu trữ , hàm trigger 6.1 Thủ tục lưu trữ 6.2 Hàm trigger Giao dịch SQL Phụ lục Giao trinh He quan tri CSDL-SQL Tham gia đóng góp 1/143 Tổng quan DBMS SQL sever Tổng quan DBMS SQL Sever Chương trình bày cách nhìn khái quát sở liệu (CSDL/DB), hệ quản trị sở liệu (HQTCSDL/DBMS) hệ sở liệu (HCSDL/DBS) Các đòi hỏi xây dựng HQTCSDL chức mà HCSDL cần phải có Trong chương chúng tơi muốn giới thiệu tổng quan ngơn ngữ hỏi có cấu trúc (SQL) hệ quản trị sở liệu quan hệ tảng kỹ thuật quan trọng cơng nghiệp máy tính Cho đến nay, nói SQL xem ngôn ngữ chuẩn sở liệu Các hệ quản trị sở liệu quan hệ thương mại có Oracle, SQL Server, Informix, DB2, chọn SQL làm ngơn ngữ cho sản phẩm Vậy thực SQL gì? Tại lại quan trọng hệ quản trị sở liệu? SQL làm nào? Nó sử dụng hệ quản trị sở liệu quan hệ? Chương cung cấp cho nhìn tổng quan SQL số vấn đề liên quan Ta tìm hiểu DBMS HQCSDL cụ thể: SQL Server 2000 Do chương giới thiệu cài đặt SQL Server 2000 thành phần nó, giúp chủ động khai thác nắm bắt tạo lập ứng dụng Tổng quan DBMS MỘT SỐ KHÁI NIỆM Một cơsở liệu - CSDL(DataBase): Là kho liệu tổ chức theo nguyên tắc Đó tập hợp tập tin có liên quan với nhau, thiết kế nhằm làm giảm thiểu dư thừa liệu, đảm bảo tính tin cậy truy xuất liệu Các tập tin chứa thông tin biểu diễn đối tượng ứng dụng giới thực CSDL lưu giữ thông tin trường đại học : khoa, giảng viên, sinh viên, khóa học,… Thơng thường, sở liệu bao trùm tất thông tin ứng dụng, không nên đặt hai sở liệu vào ứng dụng Hệ quản trị sở liệu DBMS(DataBaseManagement System): hệ thống gồm CSDL thao tác CSDL Đó hệ thống chương trình, cơng cụ cho 2/143 phép quản lý tương tác với CSDL Trên người dùng định nghĩa, thao tác, xử lí liệu CSDL để xuất thông tin có nghĩa Ví dụ 1-5 : DBMS quản trị sở liệu trường đại học sở liệu có ý nghĩa khác : sở liệu phục vụ tổng thu nhập quốc gia, sở liệu liên hợp quốc liệu địa lý giới,v v… - Một hệ sở liệu (HCSDL/ DBS: DataBase System) phần mềm cho phép xây dựng HQTCSDL Các vấn đề cần xử lý hệ sở liệu Một số điểm bất lợi việc lưu giữ thơng tin có tổ chức hệ thống xử lý file thông thường mà hệ HCSDL cần lưu ý: • Dư thừa liệu tính khơng qn (Data redundancy and inconsistency) : Do file trình ứng dụng tạo người lập trình khác nhau, nên file có định dạng khác nhau, chương trình viết ngơn ngữ lập trình khác nhau, thơng tin lưu giữ file khác Tính khơng thống dư thừa làm tăng chi phí truy xuất lưu trữ, nũa, dẫn đến tính khơng qn liệu: liệu khơng qn • Khó khăn việc truy xuất liệu: Môi trường hệ thống xử lý file thông thường không cung cấp công cụ cho phép truy xuất thông tin cách hiệu thuận lợi • Sự lập liệu(Data isolation) : Các giá trị liệu lưu trữ sở liệu phải thoả mãn số ràng buộc tính quán liệu ( ràng buộc quán / consistency contraints ) Trong hệ thống xử lý file thơng thường, khó khăn việc thay đổi chương trình để thoả mãn yêu cầu thay đổi ràng buộc Vấn đề trở nên khó khăn ràng buộc liên quan đến hạng mục liệu nằm file khác • Các vấn đề tính ngun tử (Atomicity problems): Tính nguyên tử hoạt động (giao dịch) là: hồn tất trọn vẹn khơng có Điều có nghĩa hoạt động (giao dịch) làm thay đổi liệu bền vững hồn tất (kết thúc thành công) không, giao dịch không để lại dấu vết CSDL Trong hệ thống xử lý file thơng thường khó đảm bảo tính chất 3/143 • Tính bất thường truy xuất cạnh tranh : Một hệ thống cho phép nhiều người sử dụng cập nhật liệu đồng thời, dẫn đến kết liệu không quán Điều đòi hỏi giám sát Hệ thống xử lý file thông thường không cung cấp chức • Vấn đề an tồn (Security problems): người sử dụng hệ sở liệu không cần thiết khơng có quyền truy xuất tất liệu Vấn đề đòi hỏi hệ thống phải đảm bảo tính phân quyền, chống truy xuất trái phép Các bất lợi nêu gợi mở phát triển DBMS Phần sau giáo trình đề cập đến quan niệm thuật toán sử dụng để phát triển hệ sở liệu nhằm giải vấn đề nêu Hầu hết hệ quản trị CSDL thực chức sau : Lưu trữ liệu Tạo trìCSDL Cho phép nhiềungười dùngtruy xuất đồngthời Hỗ trợ tính bảo mật riêng tư Cho phép xem xử lý liệu lưu trữ Cho phép cập nhật lưu trữ liệu sau cập nhật Cung cấp chế mục (index) hiệu để truy cập nhanh liệu lựa chọn Cung cấp tính quán ghi khác Bảo vệ liệu khỏi mát trình lưu (backup) phục hồi (recovery) Tổng quan sở liệu quan hệ Mơ hình liệu quan hệ Mơ hình liệu quan hệ Codd đề xuất năm 1970 đến trở thành mơ hình sử dụng phổ biến hệ quản trị sở liệu thương mại Nói cách đơn giản, sở liệu quan hệ sở liệu tất liệu tổ chức bảng có mối quan hệ với Mỗi bảng bao gồm dòng cột: dòng gọi ghi (bộ) cột trường (thuộc tính) Hai hay nhiều bảng có liên kết chúng có hay nhiều trường chung) Hình 1.1 minh hoạ cho ta thấy bảng sở liệu 4/143 Các bảng sở liệu Bảng (Table) Như nói trên, sở liệu quan hệ, bảng đối tượng sử dụng để tổ chức lưu trữ liệu Một sở liệu bao gồm nhiều bảng bảng xác định tên bảng Một bảng bao gồm tập dòng cột: dòng bảng biểu diễn cho thực thể (trong hình 1.1, dịng bảng SINHVIEN tương ứng với sinh viên), cột biểu diễn cho tính chất thực thể (chẳng hạn cột NGAYSINH bảng SINHVIEN biểu diễn cho ngày sinh sinh viên lưu trữ bảng) Như vậy, liên quan đến bảng bao gồm yếu tố sau: • Tên bảng: sử dụng để xác định bảngn sở liệu • Cấu trúc bảng: Tập cột bảng Mỗi mộtcột bảng xác định tên cột phải có kiểu liệu (chẳng hạn cột NGAYSINH bảng SINHVIEN hình 1.1 có kiểu DATETIME) Kiểu liệu cột qui định giá trị liệu chấp nhận cột • Dữ liệu bảng: Tập dịng (bản ghi) có bảng 5/143 Khoá bảng Trong sởdữ liệu thiết kế tốt, bảng phải có một tập cột mà giá trị liệu xác định dòng tập dịng bảng Tập nhiều cột có tính chất gọi khoá bảng Việc chọn khố bảng có vai trị quan trọng việc thiết kế cài đặt sở liệu quan hệ Các dòng liệu bảng phải có giá trị khác khố Bảng MONHOC hình có khố cột MAMONHOC Bảng MONHOC với khố MAMONHOC Một bảng có nhiều tập cột khác có tính chất khố (tức giá trị xác định dòng liệu bảng) Trong trường hợp này, khoá chọn cho bảng gọi khoá (primary key) khố cịn lại gọi khoá phụ khoá dự tuyển (candidate key/unique key) Mối quan hệ khố ngồi Các bảng sở liệu không tồn độc lập mà có mối quan hệ mật thiết với mặt liệu Mối quan hệ thể thông qua ràng buộc giá trị liệu xuất bảng phải có xuất trước bảng khác Mối quan hệ bảng sở liệu nhằm đàm bảo tính đắn hợp lệ liệu sở liệu Trong hình 1.3, hai bảng LOP KHOA có mối quan hệ với Mối quan hệ đòi hỏi giá trị cộtMAKHOA dòng (tức lớp)trong bảng LOP phải xác định từ cột MAKHOA bảng KHOA 6/143 Mối quan hệ hai bảng LOP KHOA sở liệu Mối quan hệ bảng sở liệu thể mối quan hệ thực thể giới thực Trong hình 1.3, mối quan hệ hai bảng LOP KHOA không cho phép lớp tồn mà lại thuộc vào khoa khơng có thật Khái niệm khố ngồi (Foreign Key) sở liệu quan hệ sử dụng để biểu diễn mối quan hệ bảng liệu Một hay tập cột bảng mà giá trị xác định từ khóa bảng khác gọi khố ngồi Trong hình 1.3, cột MAKHOA bảng LOP gọi khố ngồi bảng này, khố ngồi tham chiếu đến khố bảng KHOA cột MAKHOA Giới Thiệu SQL Server 2000 SQL Server 2000 hệ thống quản trị sở liệu quan hệ (Relational Database Management System (RDBMS) ) sử dụng Transact-SQL để trao đổi liệu Client computer SQL Server computer Một RDBMS bao gồm databases, database engine ứng dụng dùng để quản lý liệu phận khác RDBMS SQL Server 2000 tối ưu để chạy mơi trường sở liệu lớn (Very Large Database Environment) lên đến Tera-Byte phục vụ lúc cho hàng ngàn user SQL Server 2000 kết hợp "ăn ý" với server khác Microsoft InternetInformation Server (IIS), E-Commerce Server, Proxy Server SQL Server có editions - Enterprise : Chứa đầy đủ đặc trưng SQL Server chạy tốt hệ thống lên đến 32 CPUs 64 GB RAM Thêm vào có dịch vụ giúp cho việc phân tích liệu hiệu (Analysis Services) 7/143 - Standard : Rất thích hợp cho cơng ty vừa nhỏ giá thành rẻ nhiều so với Enterprise Edition, lại bị giới hạn số chức cao cấp (advanced features) khác, edition chạy tốt hệ thống lên đến CPU GB RAM - Personal: tối ưu hóa để chạy PC nên cài đặt hầu hết phiên windows kể Windows 98 - Developer : Có đầy đủ tính Enterprise Edition chế tạo đặc biệt giới hạn số lượng người kết nối vào Server lúc Ðây edition mà bạn muốn học SQL Server cần có Chúng ta dùng edition suốt khóa học Edition cài Windows 2000 Professional hay Win NT Workstation - Desktop Engine (MSDE): Ðây engine chạy desktop khơng có user interface (giao diện) Thích hợp cho việc triển khai ứng dụng máy client Kích thước database bị giới hạn khoảng GB - Win CE : Dùng cho ứng dụng chạy Windows CE - Trial: Có tính Enterprise Edition, download free, giới hạn thời gian sử dụng Cài Ðặt SQL Server 2000 (Installation) Ta cần có Developer Edition 64 MB RAM, 500 MB hard disk để install SQL Server Có thể install Windows Server hay Windows XP Professional, Windows 2000 Professional hay NT Workstation install Win 98 family Khi install cần lưu ý điểm sau: Ở hình thứ hai bạn chọn Install Database Server Sau install xong SQL Server bạn install thêm Analysis Service thích Ở hình Installation Definition chọn Server and Client Tools Sau nên chọn kiểu Customvà chọn tất cảcác phận SQL Server Ngoài nên chọn giá trị mặc định (default) Ở hình Authentication Mode nhớ chọn Mixed Mode Lưu ý SQL Server dùng chung chế độ bảo mật (security) với Win NT dùng chế độ bảo mật riêng Trong Production Server người ta thường dùng Windows Authetication độ an tồn cao dễ dàng cho người quản lý mạng cho người sử dụng Nghĩa bạn chấp nhận (authenticated) kết nối vào domain bạn có quyền truy 8/143 WHERE mahang=@mahang FETCH NEXT FROM contro INTO @mahang,@soluong END CLOSE contro DEALLOCATE contro END END Bài tập chương Dựa sở liệu tập chương 2, thực yêu cầu sau: 5.1 Tạo thủ tục lưu trữ để thơng qua thủ tục bổ sung thêm ghi cho bảng MATHANG (thủ tục phải thực kiểm tra tính hợp lệ liệu cần bổ sung: khơng trùng khố đảm bảo toàn vẹn tham chiếu) 5.2 Tạo thủ tục lưu trữ có chức thống kê tổng số lượng hàng bán mặt hàng có mã (mã mặt hàng cần thống kê tham số thủ tục) 5.3 Viết hàm trả bảng cho biết tổng số lượng hàng bán mặt hàng Sử dụng hàm để thống kê xem tổng số lượng hàng (hiện có bán) mặt hàng 5.4 Viết trigger cho bảng CHITIETDATHANG theo yêu cầu sau: •Khi ghi bổ sung vào bảng giảm số lượng hàng có số lượng hàng có lớn số lượng hàng bán Ngược lại huỷ bỏ thao tác bổ sung •Khi cập nhật lại số lượng hàng bán, kiểm tra số lượng hàng cập nhật lại có phù hợp hay khơng (số lượng hàng bán khơng vượt q số lượng hàng có không nhỏ 1) Nếu liệu hợp lệ giảm (hoặc tăng) số lượng hàng có cơng ty, ngược lại huỷ bỏ thao tác cập nhật 5.5 Viết trigger cho bảng CHITIETDATHANG để cho chấp nhận giá hàng bán phải nhỏ giá gốc (giá mặt hàng bảng MATHANG) 5.6 Để quản lý tin Website, người ta sử dụng hai bảng sau: Bảng LOAIBANTIN (loại tin) CREATE TABLE loaibantin ( maphanloai INT NOT NULL PRIMARY KEY, tenphanloai NVARCHAR(100) NOT NULL , bantinmoinhat INT DEFAULT(0) ) Bảng BANTIN (bản tin) 129/143 CREATE TABLE bantin ( maso INT NOT NULLmPRIMARY KEY, ngayduatin DATETIME NULL , tieude NVARCHAR(200) NULL , noidung NTEXT NULL , maphanloai INT NULL FOREIGN KEY REFERENCES loaibantin(maphanloai) ) Trong bảng LOAIBANTIN, giá trị cột BANTINMOINHAT cho biết mã số tin thuộc loại tương ứng (được bổ sung sau cùng) Hãy viết trigger cho bảng BANTIN cho: •Khi tin bổ sung, cập nhật lại cột BANTINMOINHAT dòng tương ứng với loại tin vừa bổ sung •Khi tin bị xố, cập nhật lại giá trị cột BANTINMOINHAT bảng LOAIBANTIN dịng ứng với loại tin vừa xóa mã số tin trước (dựa vào ngày đưa tin) Nếu khơng cịn tin loại giá trị cột •Khi cập nhật lại mã số tin tin cập nhật lại giá trị cột BANTINMOINHAT mã số 5.1 CREATE PROCEDURE sp_insert_mathang( @mahang @tenhang NVARCHAR(50), @macongty NVARCHAR(10) = NULL, @maloaihang INT = NULL, @soluong INT = 0, @donvitinh NVARCHAR(20) = NULL, @giahang money = 0) AS IF NOT EXISTS(SELECT mahang FROM mathang WHERE mahang=@mahang) IF (@macongty IS NULL OR EXISTS(SELECT macongty FROM nhacungcap WHERE macongty=@macongty)) AND (@maloaihang IS NULL OR EXISTS(SELECT maloaihang FROM loaihang WHERE maloaihang=@maloaihang)) INSERT INTO mathang VALUES(@mahang,@tenhang, @macongty,@maloaihang, @soluong,@donvitinh,@giahang) 5.2 CREATE PROCEDURE sp_thongkebanhang(@mahang NVARCHAR(10)) AS SELECT mathang.mahang,tenhang, SUM(chitietdathang.soluong) AS tongsoluong FROM mathang LEFT OUTER JOIN chitietdathang ON 130/143 mathang.mahang=chitietdathang.mahang WHERE mathang.mahang=@mahang GROUP BY mathang.mahang,tenhang 5.3 Định nghĩa hàm CREATE FUNCTION func_banhang() RETURNS TABLE AS RETURN (SELECT mathang.mahang,tenhang, CASE WHEN sum(chitietdathang.soluong) IS NULL THEN ELSE sum(chitietdathang.soluong) END AS tongsl FROM mathang LEFT OUTER JOIN chitietdathang ON mathang.mahang = chitietdathang.mahang GROUP BY mathang.mahang,tenhang) Sử dụng hàm định nghĩa SELECT a.mahang,a.tenhang,soluong+tongsl FROM mathang AS a INNER JOIN dbo.func_banhang() AS b ON a.mahang=b.mahang 5.4 Định nghĩa hàm CREATE TRIGGER trg_chitietdathang_insert ON chitietdathang FOR INSERT AS BEGIN DECLARE @mahang NVARCHAR(100) DECLARE @soluongban INT DECLARE @soluongcon INT SELECT @mahang=mahang,@soluongban=soluong FROM inserted SELECT @soluongcon=soluong FROM mathang WHERE mahang=@mahang IF @soluongcon>=@soluongban UPDATE mathang SET soluong=soluong@soluongban WHERE mahang=@mahang ELSE ROLLBACK TRANSACTION END CREATE TRIGGER trg_chitietdathang_update_soluong ON chitietdathang FOR UPDATE AS IF UPDATE(soluong) BEGIN IF EXISTS SELECT sohoadon FROM inserted WHERE soluong ROLLBACK TRANSACTION ELSE BEGIN UPDATE mathang SET soluong=soluong (SELECT SUM(inserted.soluong ,deleted.soluong) FROM inserted INNER JOIN deleted ON inserted.sohoadon=deleted.sohoadon AND inserted.mahang=deleted.mahang WHERE inserted.mahang=mathang.mahang GROUP BY inserted.mahang) WHERE mahang IN (SELECT DISTINCT mahang FROM inserted) IF EXISTS SELECT mahang FROM mathang WHERE soluong ROLLBACK TRANSACTION END END 5.5 131/143 CREATE TRIGGER trg_chitietdathang_giaban ON chitietdathang FOR INSERT,UPDATE AS IF UPDATE(giaban) IF EXISTS(SELECT inserted.mahang FROM mathang INNER JOIN inserted ON mathang.mahang=inserted.mahang WHERE mathang.giahang>inserted.giaban) ROLLBACK TRANSACTION 132/143 Giao dịch SQL Giao dịch SQL Một khái niệm quan trọng khái niệm giao dịch (Transaction) Các tính chất giao dịch phải có để đảm bảo HQTCSDL, xây dựng HCSDL tương ứng, suốt q trình hoạt động ln cho CSDL tin cậy (dữ liệu quán) Quản trị giao dịch nhằm đảm bảo giao dịch hệ thống có tính chất mà giao dịch phải có Một điều cần ý tính chất giao dịch, tính chất quán trước hết phải đảm bảo người lập trình- người viết giao dịch Giao dịch tính chất giao dịch Một giao dịch (transaction) một chuỗi nhiều câu lệnh SQL kết hợp lại với thành khối công việc Các câu lệnh SQL xuất giao dịch thường có mối quan hệ tương đối mật thiết với thực thao tác độc lập Việc kết hợp câu lệnh lại với giao dịch nhằm đảm bảo tính tồn vẹn liệu khả phục hồi liệu Trong giao dịch, câu lệnh độc lập với tất câu lệnh giao dịch đòi hỏi phải thực thi trọn vẹn không câu lệnh thực thi Các sở liệu sử dụng nhật ký giao dịch (transaction log) để ghi lại thay đổi mà giao dịch tạo sở liệu thơng qua phục hồi liệu trường hợp gặp lỗi hay hệ thống có cố Một giao dịch địi hỏi phải có bồn tính chất sau đây: • Tính ngun tử (Atomicity): Mọi thay đổi mặt liệu phải thực trọn vẹn giao dịch thực thành cơng khơng có thay đổi liệu xảy giao dịch không thực trọn vẹn Nói cách khác, tác dụng câu lệnh giao dịch phải câu lệnh đơn • Tính qn (Consistency):Tính quan đòi hỏi sau giao dịch kết thúc, cho dù thành công hay bị lỗi, tất liệu phải trạng thái quán (tức tồn vẹn liệu phải ln bảo tồn) • Tính độc lập (Isolation):Tính độc lập giao dịch có nghĩa tác dụng giao dịch phải giống thực hệ thống Nói cách khác, giao dịch thực thi đồng thời với giao dịch khác hệ thống không chịu ảnh hưởng giao dịch 133/143 • Tính bền vững (Durability):Sau giao dịch thực thành cơng, tác dụng mà tạo phải tồn bền vững sở liệu, chodù hệ thống có bị lỗi Mơ hình giao dịch SQL Giao dịch SQL định nghĩa dựa câu lệnh xử lý giao dịch sau đây: • BEGIN TRANSACTION: Bắt đầu giao dịch • SAVE TRANSACTION: Đánh dấu vị trí giao dịch (gọi điểm đánh dấu) • ROLLBACK TRANSACTION: Quay lui trở lại đầu giao dịch điểm đánh dấu trước giao dịch • COMMIT TRANSACTION: Đánh dấu điểm kết thúc giao dịch Khi câu lệnh thực thi có nghĩa giao dịch thực thành cơng • ROLLBACK [WORK]: Quay lui trở lại đầu giao dịch • COMMIT [WORK]: Đánh dấu kết thúc giao dịch Một giao dịch SQL bắt đấu câu lệnh BEGIN TRANSACTION Câu lệnh đánh dấu điểm bắt đầu giao dịch có cú pháp sau: BEGIN TRANSACTION [tên_giao_tác] Một giao dịch kết thúc trường hợp sau • Câu lệnh COMMIT TRANSACTION (hoặc COMMIT WORK) thực thi Câu lệnh báo hiệu kết thúc thành công giao dịch Sau câu lệnh này, giao dịch bắt đầu • Khi câu lệnh ROLLBACK TRANSACTION (hoặc ROLLBACK WORK) thực thi để huỷ bỏ giao dịch đưa sở liệu trạng thái trước giao dịch bắt đầu Một giao dịch bắt đầu sau câu lệnh ROLLBACK thực thi • Một giao dịch kết thúc trình thực gặp lỗi (chẩng hạn hệ thống gặp lỗi, kết nối mạng bị “đứt”, ) Trong trường hợp này, hệ thống tự động phục hồi lại trạng thái sở liệu trước giao dịch bắt đầu (tương tự câu lệnh ROLLBACK thực thi để huỷ bỏ giao dịch) Tuy nhiên, trường hợp khơng có giao dịch bắt đầu 134/143 Giao dịch kết thúc lệnh ROLLBACK TRANSACTION thay đổi vể mặt liệu mà giao dịch thực (UPDATE) khơng có tác dụng BEGIN TRANSACTION giaotac1 UPDATE monhoc SET sodvht=4 WHERE sodvht=3 UPDATE diemthi SET diemlan2=0 WHERE diemlan2 IS NULL ROLLBACK TRANSACTION giaotac1 giao dịch kết thúc lệnh COMMIT thực thành công việc cập nhật liệu bảng MONHOC DIEMTHI BEGIN TRANSACTION giaotac2 UPDATE monhoc SET sodvht=4 WHERE sodvht=3 UPDATE diemthi SET diemlan2=0 WHERE diemlan2 IS NULL COMMIT TRANSACTION giaotac2 Câu lệnh: SAVE TRANSACTION tên_điểm_dánh_dấu sử dụng để đánh dấu vị trí giao dịch Khi câu lệnh thực thi, trạng thái sở liệu thời điểm ghi lại nhật ký giao dịch Trong q trình thực thi giao dịch quay trở lại điểm đánh dấu cách sử dụng câu lệnh: ROLLBACK TRANSACTION tên_điểm_đánh_dấu Trong trường hợp này, thay đổi mặt liệu mà giao dịch thực từ điểm đánh dấu đến trước câu lệnh ROLLBACK triệu gọi bị huỷ bỏ Giao dịch tiếp tục với trạng thái sở liệu có điểm đánh dấu Hình mơ tả cho ta thấy hoạt động giao dịch có sử dụng điểm đánh dấu: 135/143 Hoạt động giao dịch Sau câu lệnh ROLLBACK TRANSACTION sử dụng để quay lui lại điểm đánh dấu giao dịch, giao dịch tiếp tục với câu lệnh sau Nhưng câu lệnh sử dụng để quay lui lại đầu giao dịch (tức huỷ bỏ giao dịch), giao dịch kết thúc câu lệnh COMMIT TRANSACTION trường hợp gặp lỗi Câu lệnh COMMIT TRANSACTION giao dịch kết thúc thành công giao dịch BEGIN TRANSACTION giaotac3 UPDATE diemthi SET diemlan2=0 WHERE diemlan2 IS NULL SAVE TRANSACTION a UPDATE monhoc 136/143 SET sodvht=4 WHERE sodvht=3 ROLLBACK TRANSACTION a UPDATE monhoc SET sodvht=2 WHERE sodvht=3 COMMIT TRANSACTION giaotac3 ví dụ đây, câu lệnh COMMIT TRANSACTION gặp lỗi: BEGIN TRANSACTION giaotac4 UPDATE diemthi SET diemlan2=0 WHERE diemlan2 IS NULL SAVE TRANSACTION a UPDATE monhoc SET sodvht=4 WHERE sodvht=3 ROLLBACK TRANSACTION giaotac4 UPDATE monhoc SET sodvht=2 WHERE sodvht=3 COMMIT TRANSACTION giaotac4 Giao dịch lồng Các giao dịch SQL lồng vào theo cấp Điều thường gặp giao dịch thủ tục lưu trữ gọi từ tiến trình giao dịch khác Ví dụ minh hoạ cho ta trường hợp giao dịch lồng Ta định nghĩa bảng T sau: CREATE TABLE T ( A INT PRIMARY KEY, B INT ) thủ tục sp_TransEx: CREATE PROC sp_TranEx(@a INT,@b INT) AS BEGIN END BEGIN TRANSACTION T1 IF NOT EXISTS (SELECT * FROM T WHERE A=@A ) INSERT INTO T VALUES(@A,@B)> IF NOT EXISTS (SELECT * FROM T WHERE A=@A+1) INSERT INTO T VALUES(@A+1,@B+1) COMMIT TRANSACTION T1 Lời gọi đến thủ tục sp_TransEx thực giao dịch khác sau: BEGIN TRANSACTION T3 Trong giao dịch trên, câu lệnh ROLLBACK TRANSACTION T3 huỷ bỏ giao dịch tác dụng lời gọi thủ tục giao dịch khơng cịn tác dụng, tức khơng có dịng liệu bổ sung vào bảng T (cho dù giao dịch T1 thủ tục sp_tranex thực thành công với lệnh COMMIT TRANSACTION T1) Ta xét tiếp trường hợp giao dịch khác có lời gọi đến thủ tục sp_tranex sau : 137/143 BEGIN TRANSACTION EXECUTE sp_tranex 20,40 SAVE TRANSACTION a EXECUTE sp_tranex 30,60 ROLLBACK TRANSACTION a EXECUTE sp_tranex 40,80 COMMIT TRANSACTION sau giao dịch thực xong, liệu bảng T là: A B 20 40 21 41 40 80 41 81 Như vậy, tác dụng lời gọi thủ tục sp_tranex 30,60 giao dịch bị huỷ bỏ câu lệnh ROLLBACK TRANSACTION giao dịch Như thấy ví dụ trên, giao dịch SQL lồng vào nhau, giao dịch ngồi giao dịch có vai trị định Nếu giao dịch uỷ thác (commit) giao dịch lồng bên đồng thời uỷ thác Và giao dịch thực lệnh ROLLBACK giao dịch lồng bên chịu tác động câu lệnh (cho dù giao dịch lồng bên thực lệnh COMMIT TRANSACTION) 138/143 Phụ lục Giao trinh He quan tri CSDL-SQL Cơ sở liệu mẫu sử dụng giáo trình Trong tồn nội dung giáo trình, hầu hết ví dụ dựa sở liệu mẫu mô tả Cơ sở liệu cài đặt hệ quản trị sở liệu SQL Server 2000 sử dụng để quản lý sinh viên điểm thi sinh viên trường đại học Để tiện cho việc tra cứu kiểm chứng ví dụ, phần đầu phụ lục giới thiệu sơ qua sở liệu Cơ sở liệu bao gồm bảng sau đây: • Bảng KHOA lưu trữ liệu khoa có trường • Bảng LOP bao gồm liệu lớp trường • Bảng SINHVIEN sử dụng để lưu trữ liệu sinh viên trường • Bảng MONHOC bao gồm mơn học (học phần) giảng dạy trường • Bảng DIEMTHI với liệu cho biết điểm thi kết thúc môn học sinh viên Mối quan hệ bảng thể qua sơ đồ Các bảng sở liệu, mối quan hệ chúng số ràng buộc cài đặt sau: 139/143 CREATE TABLE khoa ( makhoa NVARCHAR(5) NOT NULL CONSTRAINT pk_khoa PRIMARY KEY, tenkhoa NVARCHAR(50) NOT NULL , dienthoai NVARCHAR(15) NULL ) CREATE TABLE lop ( malop NVARCHAR(10) NOT NULL CONSTRAINT pk_lop PRIMARY KEY, tenlop NVARCHAR(30) NULL , khoa SMALLINT NULL , hedaotao NVARCHAR(25) NULL , namnhaphocINT NULL , siso INT NULL , makhoa NVARCHAR(5) NULL ) CREATE TABLE sinhvien ( masv NVARCHAR(10) NOT NULL CONSTRAINT pk_sinhvien PRIMARY KEY, hodem NVARCHAR(25) NOT NULL , ten NVARCHAR(10) NOT NULL , ngaysinh SMALLDATETIME NULL , gioitinh BIT NULL , noisinh NVARCHAR(100) NULL , malop NVARCHAR(10) NULL ) CREATE TABLE monhoc ( mamonhoc NVARCHAR(10) NOT NULL CONSTRAINT pk_monhoc PRIMARY KEY, tenmonhoc NVARCHAR(50) NOT NULL , sodvht SMALLINT NOT NULL ) CREATE TABLE diemthi ( mamonhoc NVARCHAR(10) NOT NULL , masv NVARCHAR(10) NOT NULL , diemlan1 NUMERIC(5, 2) NULL , diemlan2 NUMERIC(5, 2) NULL, CONSTRAINT pk_diemthi PRIMARY KEY(mamonhoc,masv) ) ALTER TABLE lop ADD CONSTRAINT fk_lop_khoa FOREIGN KEY(makhoa) REFERENCES khoa(makhoa) ON DELETE CASCADE ON UPDATE CASCADE ALTER TABLE sinhvien ADD CONSTRAINT fk_sinhvien_lop FOREIGN KEY (malop) REFERENCES lop(malop) ON DELETE CASCADE ON UPDATE CASCADE ALTER TABLE diemthi ADD CONSTRAINT fk_diemthi_monhoc FOREIGN KEY (mamonhoc) REFERENCES monhoc(mamonhoc) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT fk_diemthi_sinhvien FOREIGN KEY (masv) REFERENCES sinhvien(masv) ON DELETE CASCADE ON UPDATE CASCADE ALTER TABLE monhoc ADD CONSTRAINT chk_monhoc_sodht CHECK(sodvht>0 and sodvht=0 and diemlan1=0 and diemlan2

Ngày đăng: 21/12/2022, 14:29

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w