Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 116 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
116
Dung lượng
2,63 MB
Nội dung
LỜI GIỚI THIỆU Vài nét xuất xứ giáo trình: Giáo trình viết theo Thơng tư số 03/2017/TT-BLĐTBXH ngày 01 tháng 03 năm 2017 Bộ Lao động – Thương binh Xã hội việc Quy định quy trình xây dựng, thẩm định ban hành chương trình; tổ chức biên soạn, lựa chọn, thẩm định giáo trình đào tạo trình độ trung cấp, trình độ cao đẳng Quá trình biên soạn: Giáo trình biên soạn có tham gia tích cực giáo viên có kinh nghiệm, với ý kiến đóng góp quý báu chuyên gia lĩnh vực công nghệ thông tin Mối quan hệ tài liệu với chương trình, mơ đun/mơn học: Căn vào chương trình đào tạo nghề Thiết kế trang web, giáo trình giúp cung cấp cho người học kiến thức ngôn ngữ truy vấn SQL Server kỹ sử dụng phần mềm SQL Server để thiết kế sở liệu quan hệ Để học mơ đun người học cần có kiến thức sở liệu Cấu trúc chung giáo trình bao gồm bài: Bài Tổng quan DBMS SQL sever Bài Ngôn ngữ định nghĩa liệu Bài Ngôn ngữ thao tác liệu Bài Làm việc với View ( khung nhìn ) Bài Bảo mật SQL Bài Thủ tục lưu trữ , hàm trigger Lời cảm ơn Giáo trình biên soạn sở văn quy định Nhà nước tham khảo nhiều tài liệu liên quan có giá trị Song hẳn q trình biên soạn khơng tránh khỏi thiếu sót định Ban biên soạn mong muốn thực cảm ơn ý kiến nhận xét, đánh giá chuyên gia, thầy cô đóng góp cho việc chỉnh sửa để giáo trình ngày hoàn thiện Lâm Đồng, ngày 10 tháng 12 năm 2019 Tham gia biên soạn Phạm Đình Nam Ngơ Thiên Hồng Nguyễn Quỳnh Ngun Phan Ngọc Bảo Trang MỤC LỤC BÀI Tổng quan DBMS SQL sever Tổng quan DBMS SQL Sever 1.1Tổng quan DBMS 1.2 Tổng quan sở liệu quan hệ 1.3 Giới Thiệu SQL Server 2000 10 1.4 Cài Ðặt SQL Server 2000 (Installation) 11 chọn giá trị mặc định (default) 11 nên chọn giá trị mặc định (default) 14 Sơ lược SQL 15 2.1 Kiểu liệu 18 2.2 Các tập tin vật lý lưu trữ sở liệu 20 Kết chương 21 Bài Ngôn ngữ định nghĩa liệu 22 Ngôn ngữ định nghĩa liệu 22 1.1 Tạo CSDL 22 1.2 Tạo bảng liệu 26 1.3 Tạo cấu trúc bảng T-SQL 28 1.4 Ràng buộc CHECK 30 1.5 Ràng buộc PRIMARY KEY 31 1.6 Ràng buộc UNIQUE 32 1.7 Ràng buộc FOREIGN KEY 33 Sửa đổi định nghĩa bảng 35 Xoá bảng 36 Bài Ngôn ngữ thao tác liệu 38 Ngôn ngữ thao tác liệu 38 1.1 Truy xuất liệu với câu lệnh SELECT 38 1.1.1Mệnh đề FROM 39 1.1.2 Danh sách chọn câu lệnh SELECT 39 1.1.3 Tạo bảng liệu từ kết câu lệnh SELECT 47 1.1.4 Sắp xếp kết truy vấn 47 1.1.5 Phép hợp 48 1.1.6 Phép nối 50 1.2 Phép nối 53 Trang 1.2.1 Các loại phép nối 53 1.2.2 Sử dụng phép nối SQL2 57 1.2.3 Thống kê liệu với GROUP BY 59 1.2.4 Thống kê liệu với COMPUTE 62 1.2.5 Truy vấn (Subquery) 65 Bổ sung, cập nhật xoá liệu 68 2.1 Bổ sung liệu 68 2.2 Cập nhật liệu 69 2.3 Xoá liệu 71 Bài tập chương 72 Bài Làm việc với View ( khung nhìn ) 76 Khái niệm view (Khung nhìn) 76 Tạo khung nhìn 77 Cập nhật, bổ sung xoá liệu thơng qua khung nhìn 79 Sửa đổi khung nhìn 81 Xố khung nhìn 81 Bài tập chương 82 Lời giải 83 Bài Bảo mật SQL 86 Các khái niệm 86 Cấp phát quyền 86 Cấp phát quyền thực thi câu lệnh 88 Thu hồi quyền 89 Bài Thủ tục lưu trữ , hàm trigger 92 Thủ tục lưu trữ (stored procedure) 92 1.1 Các khái niệm 92 1.2 Tạo thủ tục lưu trữ 92 1.3 Lời gọi thủ tục lưu trữ 94 1.4 Sử dụng biến thủ tục 94 1.5 Giá trị trả tham số thủ tục lưu trữ 95 1.6 Tham số với giá trị mặc định 95 1.7 Sửa đổi thủ tục 96 1.8 Xoá thủ tục 96 Hàm trigger 97 Trang 2.1 Hàm người dùng định nghĩa 97 2.2 Trigger 100 Bài tập chương 108 Bài Giao dịch SQL 111 Giao dịch tính chất giao dịch 111 Mơ hình giao dịch SQL 111 Giao dịch lồng 114 Phụ lục: Cơ sở liệu mẫu 116 Trang Bài 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 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 1.1Tổ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 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 Trang 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 nguyên 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 • 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 qn Đ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 toà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ữ Trang Cho phép cập nhật lưu trữ liệu sau cập nhật chọn Cung cấp chế mục (index) hiệu để truy cập nhanh liệu lựa 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) 1.2 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 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 Trang 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: liệu • Tên bảng: sử dụng để xác định bảngn sở • 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 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 Trang 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 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 1.3 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 Trang 10 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) - 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 1.4 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 cập liệu (access data) SQL Server Tuy nhiên ta nên chọn Mixed Mode để dễ dàng cho việc học tập Sau install bạn thấy icon nằm góc phải bên hình, Service Manager Có thể Start, Stop SQL Server services dễ dàng cách doubleclick vào icon Trang 11 Với trigger ví dụ trên, câu lệnh: UPDATE nhatkybanhang SET soluong=soluong+20 WHERE stt=1 kích hoạt trigger ứng với mệnh đề IF UPDATE (soluong) câu lệnh UPDATE trigger thực thi Tuy nhiên câu lệnh: UPDATE nhatkybanhang SET nguoimua='Mai Hữu Toàn' WHERE stt=3 lại khơng kích hoạt trigger Mệnh đề IF UPDATE xuất nhiều lần phần thân trigger Khi đó, mệnh đề IF UPDATE phần câu lệnh mệnh đề thực thi trigger kích hoạt Giả sử ta định nghĩa bảng R sau: CREATE TABLE R ( A INT, B INT, C INT ) trigger trg_R_updatecho bảng R: CREATE TRIGGER trg_R_test ON R FOR UPDATE AS IF UPDATE(A) Print 'A updated' IF UPDATE(C) Print 'C updated' Câu lệnh UPDATE R SET A=100 WHERE A=1 kích hoạt trigger cho kết là: A updated câu lệnh: UPDATE R SET C=100 WHERE C=2 kích hoạt trigger cho kết là: C updated câu lệnh: UPDATE R SET B=100 WHERE B=3 hiển nhiên khơng kích hoạt trigger ROLLBACK TRANSACTION trigger Một trigger có khả nhận biết thay đổi mặt liệu bảng liệu, từ phát huỷ bỏ thao tác khơng đảm bảo tính tồn vẹn liệu Trong trigger, để huỷ bỏ tác dụng câu lệnh làm kích hoạt trigger, ta sử dụng câu lệnh(1): ROLLBACK TRANSACTION > Nếu bảng MATHANG, ta tạo trigger sau: CREATE TRIGGER trg_mathang_delete ON mathang FOR DELETE AS ROLLBACK TRANSACTION Thì câu lệnh DELETE khơng thể có tác dụng bảng MATHANG Hay nói cách khác, ta khơng thể xố liệu bảng Trigger kích hoạt câu lệnh INSERT sử dụng để bổ sung ghi cho bảng NHATKYBANHANG Trong trigger kiểm tra điều Trang 103 kiện hợp lệ liệu số lượng hàng bán phải nhỏ số lượng hàng có Nếu điều kiện khơng thoả mãn huỷ bỏ thao tác bổ sung liệu CREATE TRIGGER trg_nhatkybanhang_insert ON NHATKYBANHANG FOR INSERT AS DECLARE @sl_co int /* Số lượng hàng có */ DECLARE @sl_ban int /* Số lượng hàng bán */ DECLARE @mahang nvarchar(5) /* Mã hàng bán */ SELECT @mahang=mahang,@sl_ban=soluong FROM inserted SELECT @sl_co = soluong FROM mathang where mahang=@mahang /*Nếu số lượng hàng có nhỏ số lượng bán huỷ bỏ thao tác bổ sung liệu */ IF @sl_co=@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 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 Trang 110 Bài 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 nguyên 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 qn (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 • 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 dấu) • SAVE TRANSACTION: Đánh dấu vị trí giao dịch (gọi điểm đánh • ROLLBACK TRANSACTION: Quay lui trở lại đầu giao dịch điểm đánh dấu trước giao dịch Trang 111 • 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 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 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 Trang 112 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: 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 mộtgiao dịch BEGIN TRANSACTION giaotac3 UPDATE diemthi SET diemlan2=0 Trang 113 WHERE diemlan2 IS NULL SAVE TRANSACTION a UPDATE monhoc 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 : Trang 114 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 giao dịch có vai trị định Nếu giao dịch ngồi 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) Trang 115 Phụ lục: Cơ sở liệu mẫu mẫu Trong tồn nội dung giáo trình, hầu hết ví dụ dựa sở liệ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: 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 Trang 116 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