Trong giáo trình này, tác giả không có tham vọng đề cập đến mọi khía cạnh của SQL mà chỉ mong muốn rằng đây sẽ là tài liệu tham khảo tương đối đầy đủ về các câu lệnh thường được sử dụng trong SQL. Ngoài sáu chương trong giáo trình, phần phụ lục ở cuối giáo trình đề cập đến cơ sở dữ liệu mẫu được sử dụng trong hầu hết các ví dụ và một số hàm thường được sử dụng trong hệ quản trị SQL Server 2000 để bạn đọc tiện trong việc tra cứu.Thông tin chung về ebook “Giáo trình SQL”Tên tài liệu : Giáo trình SQLSố ebook: 146Ngôn ngữ : Tiếng ViệtFormat : PDFThể loại : ProgrammingSQLGiới thiệu ebook “Giáo trình SQL”Ngôn ngữ hỏi có cấu trúc (SQL), có tiền thân là SEQUEL, là một ngôn ngữ được IBM phát triển và sử dụng trong hệ cơ sở dữ liệu thử nghiệm có tên là SystemR vào năm 1974, chính thức được ANSIISO công nhận là một chuẩn ngôn ngữ sử dụng trong cơ sở dữ liệu quan hệ vào năm 1986. Cho đến hiện nay, SQL đã được sử dụng phổ biển trong các hệ quản trị cơ sở dữ liệu thương mại và có vai trò quan trọng trong những hệ thống này.Được sự động viên của các đồng nghiệp trong Khoa Công nghệ Thông tin (Trưòng Đại học Khoa học – Đại học Huế), chúng tôi mạnh dạn viết và giới thiệu Giáo trình SQL đến bạn đọc. Trong giáo trình này, chúng tôi không có tham vọng đề cập đến mọi khía cạnh của SQL mà chỉ mong muốn rằng đây sẽ là tài liệu tham khảo tương đối đầy đủ về các câu lệnh thường được sử dụng trong SQL. Giáo trình được chia thành sáu chương với nội dung như sau:Chương 1 giới thiệu tổng quan về SQL và một số khái cơ bản liên quan đến cơ sở dữ liệu quan hệ.Chương 2 được dành để bàn luận đến các câu lệnh thao tác dữ liệu bao gồm SELECT, INSERT, UPDATE và DELETE, trong đó tập trung nhiều vào câu lệnh SELECT.Chương 3 trình bày một số câu lệnh cơ bản được sử dụng trong định nghĩa các đối tượng cơ sở dữ liệu.Một số vấn đề liên quan đến bảo mật dữ liệu trong SQL được đề cập đến trong chương 4.Nội dung của chương 5 liên quan đến việc sử dụng thủ tục lưu trữ, hàm và trigger trong cơ sở dữ liệu.Trong chương cuối cùng, chương 6, chúng tôi giới thiệu đến bạn đọc một số vấn đề liên quan đến xử lý giao tác trong SQLNgoài sáu chương trên, phần phụ lục ở cuối giáo trình đề cập đến cơ sở dữ liệu mẫu được sử dụng trong hầu hết các ví dụ và một số hàm thường được sử dụng trong hệ quản trị SQL Server 2000 để bạn đọc tiện trong việc tra cứu. So với chuẩn SQL do ANSIISO đề xuất, bản thân các hệ quản trị cơ sở dữ liệu quan hệ thương mại lại có thể có một số thay đổi nào đó; Điều này đôi khi dẫn đến sự khác biệt, mặc dù không đáng kể, giữa SQL chuẩn và SQL được sử dụng trong các hệ quản trị cơ sở dữ liệu cụ thể. Trong giáo trình này, chúng tôi chọn hệ quản trị cơ sở dữMục lục ebook “Giáo trình SQL”+ Table of contentCHƯƠNG 1: TỔNG QUAN VỀ SQLCHƯƠNG 2: NGÔN NGỮ THAO TÁC DỮ LIỆUCHƯƠNG 3: NGÔNCHƯƠNG 4: BẢO MẬT TRONG SQLCHƯƠNG 5: THỦ TỤC LƯU TRỮ, HÀM VÀ TRIGGERCHƯƠNG 6: GIAO TÁC SQL
TRƯỜNG ĐẠI HỌC KHOA HỌC HUẾ KHOA CÔNG NGHỆ THÔNG TIN GIÁO TRÌNH SQL (Lưu hành nội bộ) Biên soạn: Trần Nguyên Phong Huế, 2004 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL MỤC LỤC MỤC LỤC LỜI NÓI ĐẦU CHƯƠNG 1: TỔNG QUAN VỀ SQL .7 1.1 SQL ngôn ngữ sở liệu quan hệ 1.2 Vai trò SQL 1.3 Tổng quan sở liệu quan hệ 1.3.1 Mơ hình liệu quan hệ 1.3.2 Bảng (Table) 1.3.3 Khoá bảng 10 1.3.4 Mối quan hệ khố ngồi 11 1.4 Sơ lược SQL 12 1.4.1 Câu lệnh SQL 12 1.4.2 Qui tắc sử dụng tên SQL 14 1.4.3 Kiểu liệu 14 1.4.4 Giá trị NULL 16 1.5 Kết chương 16 CHƯƠNG 2: NGÔN NGỮ THAO TÁC DỮ LIỆU 18 2.1 Truy xuất liệu với câu lệnh SELECT 18 2.1.1 Mệnh đề FROM 19 2.1.2 Danh sách chọn câu lệnh SELECT 20 2.1.3 Chỉ định điều kiện truy vấn liệu 25 2.1.4 Tạo bảng liệu từ kết câu lệnh SELECT 29 2.1.5 Sắp xếp kết truy vấn 29 2.1.6 Phép hợp 31 2.1.7 Phép nối 33 2.1.7.1 Sử dụng phép nối 34 2.1.7.2 Các loại phép nối 36 2.1.7.4 Sử dụng phép nối SQL2 40 2.1.8 Thống kê liệu với GROUP BY 43 2.1.9 Thống kê liệu với COMPUTE 46 2.1.10 Truy vấn (Subquery) 49 2.2 Bổ sung, cập nhật xoá liệu 53 2.2.1 Bổ sung liệu 53 2.2.2 Cập nhật liệu 54 2.2.3 Xoá liệu 56 Bài tập chương 58 CHƯƠNG 3: NGÔN NGỮ ĐỊNH NGHĨA DỮ LIỆU 69 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL 3.1 Tạo bảng liệu 69 3.1.1 Ràng buộc CHECK 72 3.1.2 Ràng buộc PRIMARY KEY 74 3.1.3 Ràng buộc UNIQUE 76 3.1.4 Ràng buộc FOREIGN KEY 76 3.2 Sửa đổi định nghĩa bảng 79 3.3 Xoá bảng 81 3.4 Khung nhìn 82 3.4.1 Tạo khung nhìn 84 3.4.2 Cập nhật, bổ sung xố liệu thơng qua khung nhìn 86 3.4.3 Sửa đổi khung nhìn 89 3.4.4 Xố khung nhìn 90 Bài tập chương 90 CHƯƠNG 4: BẢO MẬT TRONG SQL 96 4.1 Các khái niệm 96 4.2 Cấp phát quyền 97 4.2.1 Cấp phát quyền cho người dùng đối tượng sở liệu 97 4.2.2 Cấp phát quyền thực thi câu lệnh 99 4.3 Thu hồi quyền 100 4.3.1 Thu hồi quyền đối tượng sở liệu: 100 4.3.2 Thu hồi quyền thực thi câu lênh: 103 CHƯƠNG 5: THỦ TỤC LƯU TRỮ, HÀM VÀ TRIGGER .104 5.1 Thủ tục lưu trữ (stored procedure) 104 5.1.1 Các khái niệm 104 5.1.2 Tạo thủ tục lưu trữ 105 5.1.3 Lời gọi thủ tục lưu trữ 107 5.1.4 Sử dụng biến thủ tục 107 5.1.5 Giá trị trả tham số thủ tục lưu trữ 108 5.1.6 Tham số với giá trị mặc định 109 5.1.7 Sửa đổi thủ tục 110 5.2 Hàm người dùng định nghĩa 111 5.2.1 Định nghĩa sử dụng hàm 111 5.2.2 Hàm với giá trị trả “dữ liệu kiểu bảng” 112 5.3 Trigger 116 5.3.1 Định nghĩa trigger 117 5.3.2 Sử dụng mệnh đề IF UPDATE trigger 119 5.3.3 ROLLBACK TRANSACTION trigger 121 5.3.4 Sử dụng trigger trường hợp câu lệnh INSERT, UPDATE DELETE có tác động đến nhiều dịng liệu 122 5.3.4.1 Sử dụng truy vấn 122 5.3.4.2 Sử dụng biến trỏ 125 Bài tập chương 127 CHƯƠNG 6: GIAO TÁC SQL 132 6.1 Giao tác tính chất giao tác 132 6.2 Mơ hình giao tác SQL 133 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL 6.3 Giao tác lồng 136 PHỤ LỤC 138 A Cơ sở liệu mẫu sử dụng giáo trình 138 B Một số hàm thường sử dụng 141 B.1 Các hàm liệu kiểu chuỗi 141 B.2 Các hàm liệu kiểu ngày 143 B.3 Hàm chuyển đổi kiểu 144 TÀI LIỆU THAM KHẢO 146 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL LỜI NĨI ĐẦU Ngơn ngữ hỏi có cấu trúc (SQL), có tiền thân SEQUEL, ngơn ngữ IBM phát triển sử dụng hệ sở liệu thử nghiệm có tên System/R vào năm 1974, thức ANSI/ISO cơng nhận chuẩn ngôn ngữ sử dụng sở liệu quan hệ vào năm 1986 Cho đến nay, SQL sử dụng phổ biển hệ quản trị sở liệu thương mại có vai trị quan trọng hệ thống Được động viên đồng nghiệp Khoa Công nghệ Thông tin (Trưòng Đại học Khoa học - Đại học Huế), chúng tơi mạnh dạn viết giới thiệu Giáo trình SQL đến bạn đọc Trong giáo trình này, chúng tơi khơng có tham vọng đề cập đến khía cạnh SQL mà mong muốn tài liệu tham khảo tương đối đầy đủ câu lệnh thường sử dụng SQL Giáo trình chia thành sáu chương với nội dung sau: • Chương giới thiệu tổng quan SQL số khái liên quan đến sở liệu quan hệ • Chương dành để bàn luận đến câu lệnh thao tác liệu bao gồm SELECT, INSERT, UPDATE DELETE, tập trung nhiều vào câu lệnh SELECT • Chương trình bày số câu lệnh sử dụng định nghĩa đối tượng sở liệu • Một số vấn đề liên quan đến bảo mật liệu SQL đề cập đến chương • Nội dung chương liên quan đến việc sử dụng thủ tục lưu trữ, hàm trigger sở liệu • Trong chương cuối cùng, chương 6, giới thiệu đến bạn đọc số vấn đề liên quan đến xử lý giao tác SQL Ngoài sáu chương trên, phần phụ lục cuối giáo trình đề cập đến sở liệu mẫu sử dụng hầu hết ví dụ số hàm thường sử dụng hệ quản trị SQL Server 2000 để bạn đọc tiện việc tra cứu So với chuẩn SQL ANSI/ISO đề xuất, thân hệ quản trị sở liệu quan hệ thương mại lại có số thay đổi đó; Điều đơi dẫn đến khác biệt, không đáng kể, SQL chuẩn SQL sử dụng hệ quản trị sở liệu cụ thể Trong giáo trình này, chúng tơi chọn hệ quản trị sở Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL liệu SQL Server 2000 hãng Microsoft để sử dụng cho ví dụ minh hoạ lời giải tập Chúng hi vọng giáo trình thực có ích bạn đọc Chúng mong nhận cổ vũ ý kiến đóng góp thẳng thắn bạn Cuối cùng, xin gởi lời cảm ơn đến thầy cô, đồng nghiệp bạn sinh viên động viên giúp đỡ chúng tơi hồn thành giáo trình Huế, 2003 Trần Nguyên Phong Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL Chương 1: TỔNG QUAN VỀ SQL 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ệ? Nội dung chương cung cấp cho nhìn tổng quan SQL số vấn đề liên quan 1.1 SQL ngôn ngữ sở liệu quan hệ SQL, viết tắt Structured Query Language (ngơn ngữ hỏi có cấu trúc), cơng cụ sử dụng để tổ chức, quản lý truy xuất liệu đuợc lưu trữ sở liệu SQL hệ thống ngôn ngữ bao gồm tập câu lệnh sử dụng để tương tác với sở liệu quan hệ Tên gọi ngôn ngữ hỏi có cấu trúc phần làm liên tưởng đến công cụ (ngôn ngữ) dùng để truy xuất liệu sở liệu Thực mà nói, khả SQL vượt xa so với công cụ truy xuất liệu, mục đích ban đầu SQL xây dựng nên truy xuất liệu chức quan trọng SQL sử dụng để điều khiển tất chức mà hệ quản trị sở liệu cung cấp cho người dùng bao gồm: • Định nghĩa liệu: SQL cung cấp khả định nghĩa sở liệu, cấu trúc lưu trữ tổ chức liệu mối quan hệ thành phần liệu • Truy xuất thao tác liệu: Với SQL, người dùng dễ dàng thực thao tác truy xuất, bổ sung, cập nhật loại bỏ liệu sở liệu • Điều khiển truy cập: SQL sử dụng để cấp phát kiểm soát thao tác người sử dụng liệu, đảm bảo an toàn cho sở liệu Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL • Đảm bảo toàn vẹn liệu: SQL định nghĩa ràng buộc toàn vẹn sở liệu nhờ đảm bảo tính hợp lệ xác liệu trước thao tác cập nhật lỗi hệ thống Như vậy, nói SQL ngơn ngữ hồn thiện sử dụng hệ thống sở liệu thành phần thiếu hệ quản trị sở liệu Mặc dù SQL ngơn ngữ lập trình C, C++, Java, song câu lệnh mà SQL cung cấp nhúng vào ngơn ngữ lập trình nhằm xây dựng ứng dụng tương tác với sở liệu Khác với ngôn ngữ lập trình quen thuộc C, C++, Java, SQL ngơn ngữ có tính khai báo Với SQL, người dùng cần mô tả yêu cầu cần phải thực sở liệu mà không cần phải cách thức thực yêu cầu Chính vậy, SQL ngơn ngữ dễ tiếp cận dễ sử dụng 1.2 Vai trò SQL Bản thân SQL hệ quản trị sở liệu, khơng thể tồn độc lập SQL thực phần hệ quản trị sở liệu, xuất hệ quản trị sở liệu với vai trị ngơn ngữ cơng cụ giao tiếp người sử dụng hệ quản trị sở liệu Trong hầu hết hệ quản trị sở liệu quan hệ, SQL có vai trị sau: • SQL ngơn ngữ hỏi có tính tương tác: Người sử dụng dễ dàng thơng qua trình tiện ích để gởi u cầu dạng câu lệnh SQL đến sở liệu nhận kết trả từ sở liệu • SQL ngơn ngữ lập trình sở liệu: Các lập trình viên nhúng câu lệnh SQL vào ngơn ngữ lập trình để xây dựng nên chương trình ứng dụng giao tiếp với sở liệu • SQL ngơn ngữ quản trị sở liệu: Thông qua SQL, người quản trị sở liệu quản lý sở liệu, định nghĩa cấu trúc lưu trữ liệu, điều khiển truy cập sở liệu, • SQL ngơn ngữ cho hệ thống khách/chủ (client/server): Trong hệ thống sở liệu khách/chủ, SQL sử dụng cơng cụ để giao tiếp trình ứng dụng phía máy khách với máy chủ sở liệu • SQL ngôn ngữ truy cập liệu Internet: Cho đến nay, hầu hết máy chủ Web máy chủ Internet sử dụng SQL với vai trị ngơn ngữ để tương tác với liệu sở liệu • SQL ngôn ngữ sở liệu phân tán: Đối với hệ quản trị sở liệu phân tán, hệ thống sử dụng SQL để giao tiếp với hệ thống khác mạng, gởi nhận yêu cầu truy xuất liệu với Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL • SQL ngôn ngữ sử dụng cho cổng giao tiếp sở liệu: Trong hệ thống mạng máy tính với nhiều hệ quản trị sở liệu khác nhau, SQL thường sử dụng chuẩn ngôn ngữ để giao tiếp hệ quản trị sở liệu 1.3 Tổng quan sở liệu quan hệ 1.3.1 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) Hình 1.1 minh hoạ cho ta thấy bảng sở liệu Hình 1.1: Các bảng sở liệu 1.3.2 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: Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL 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ảng sở liệu • Cấu trúc bảng: Tập cột bảng Mỗi cộ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 1.3.3 Khố bảng Trong sở 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 khố 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 Hình 1.2: 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 khố (primary key) khố cịn lại gọi khố phụ khoá dự tuyển (candidate key/unique key) 10 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL Chương GIAO TÁC SQL 6.1 Giao tác tính chất giao tác Một giao tác (transaction) 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 tác 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 tác nhằm đảm bảo tính tồn vẹn liệu khả phục hồi liệu Trong giao tác, câu lệnh độc lập với tất câu lệnh giao tác đò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 tác (transaction log) để ghi lại thay đổi mà giao tác 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 tác đị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 tác thực thành cơng khơng có thay đổi liệu xảy giao tác không thực trọn vẹn Nói cách khác, tác dụng câu lệnh giao tác phải câu lệnh đơn • Tính qn (Consistency): Tính quan địi hỏi sau giao tác 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 tác có nghĩa tác dụng giao tác phải giống thực hệ thống Nói cách khác, giao tác thực thi đồng thời với giao tác khác hệ thống không chịu ảnh hưởng giao tác • Tính bền vững (Durability): Sau giao tác thực thành công, tác dụng mà tạo phải tồn bền vững sở liệu, cho dù hệ thống có bị lỗi 132 Khoa CNTT - Trường HKH Hu Giỏo trỡnh SQL Trạng thái CSDL trớc giao tác tiến hành SELECT UPDATE INSERT SELECT ROLLBACK Giao tác ROLLBACK INSERT SELECT INSERT UPDATE UPDATE DELETE DELETE Lỗi phần cứng! UPDATE Lỗi chơng trình! Trạng thái CSDL sau giao tác tiến hành Hỡnh 6.1: Giao tỏc SQL 6.2 Mơ hình giao tác SQL Giao tác SQL định nghĩa dựa câu lệnh xử lý giao tác sau đây: • BEGIN TRANSACTION: Bắt đầu giao tác • SAVE TRANSACTION: Đánh dấu vị trí giao tác (gọi điểm đánh dấu) • ROLLBACK TRANSACTION: Quay lui trở lại đầu giao tác điểm đánh dấu trước giao tác • COMMIT TRANSACTION: Đánh dấu điểm kết thúc giao tác Khi câu lệnh thực thi có nghĩa giao tác thực thành cơng • ROLLBACK [WORK]: Quay lui trở lại đầu giao tác • COMMIT [WORK]: Đánh dấu kết thúc giao tác Một giao tác SQL bắt đấu câu lệnh BEGIN TRANSACTION Câu lệnh đánh dấu điểm bắt đầu giao tác có cú pháp sau: BEGIN TRANSACTION [tên_giao_tác] Một giao tác kết thúc trường hợp sau: 133 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL • 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 tác Sau câu lệnh này, giao tác bắt đầu • Khi câu lệnh ROLLBACK TRANSACTION (hoặc ROLLBACK WORK) thực thi để huỷ bỏ giao tác đưa sở liệu trạng thái trước giao tác bắt đầu Một giao tác bắt đầu sau câu lệnh ROLLBACK thực thi • Một giao tác 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 tác bắt đầu (tương tự câu lệnh ROLLBACK thực thi để huỷ bỏ giao tác) Tuy nhiên, trường hợp khơng có giao tác bắt đầu Ví dụ 6.1: Giao tác kết thúc lệnh ROLLBACK TRANSACTION thay đổi vể mặt liệu mà giao tác thực (UPDATE) 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 tác 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 tác 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 tác Trong trình thực thi giao tác 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 tác thực từ điểm đánh dấu đến trước câu lệnh ROLLBACK triệu gọi bị huỷ bỏ Giao tác tiếp tục với trạng thái sở liệu có điểm đánh dấu Hình 6.2 mơ tả cho ta thấy hoạt động giao tác có sử dụng điểm đánh dấu: 134 Khoa CNTT - Trường ĐHKH Huế Giáo trỡnh SQL Trạng thái CSDL trớc giao tác tiến hµnh BEGIN TRANSACTION trans_example INSERT UPDATE SAVE TRANSACTION a Giao tác: Bắt đầu lệnh BEGIN TRANSACTION kết thúc lệnh COMMIT TRANSACTION Trạng thái CSDL điểm đánh dấu a UPDATE SAVE TRANSACTION b Trạng thái CSDL ®iĨm ®¸nh dÊu b INSERT UPDATE ROLLBACK TRANSACTION b UPDATE SELECT COMMIT TRANSACTION Trạng thái CSDL sau giao tác tiÕn hµnh Hình 6.2: Hoạt động giao tác Sau câu lệnh ROLLBACK TRANSACTION sử dụng để quay lui lại điểm đánh dấu giao tác, giao tác 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 tác (tức huỷ bỏ giao tác), giao tác kết thúc câu lệnh COMMIT TRANSACTION trường hợp gặp lỗi Ví dụ 6.2: Câu lệnh COMMIT TRANSACTION giao tác kết thúc thành công giao tác BEGIN TRANSACTION giaotac3 UPDATE diemthi SET diemlan2=0 WHERE diemlan2 IS NULL 135 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL 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 6.3 Giao tác lồng Các giao tác SQL lồng vào theo cấp Điều thường gặp giao tác thủ tục lưu trữ gọi từ tiến trình giao tác khác Ví dụ minh hoạ cho ta trường hợp giao tác lồng Ví dụ 6.3: 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 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 END Lời gọi đến thủ tuch sp_TransEx thực giao tác khác sau: BEGIN TRANSACTION T3 136 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL EXECUTE sp_tranex 10,20 ROLLBACK TRANSACTION T3 Trong giao tác trên, câu lệnh ROLLBACK TRANSACTION T3 huỷ bỏ giao tác tác dụng lời gọi thủ tục giao tác 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 tác 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 tác khác có lời gọi đến thủ tục sp_tranex sau: 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 tác thực xong, liệu bảng T là: A 20 21 40 41 B 40 41 80 81 Như vậy, tác dụng lời gọi thủ tục sp_tranex 30,60 giao tác bị huỷ bỏ câu lệnh ROLLBACK TRANSACTION giao tác Như thấy ví dụ trên, giao tác SQL lồng vào nhau, giao tác ngồi giao tác có vai trị định Nếu giao tác ngồi uỷ thác (commit) giao tác lồng bên đồng thời uỷ thác; Và giao tác ngồi thực lệnh ROLLBACK giao tác lồng bên chịu tác động câu lệnh (cho dù giao tác lồng bên thực lệnh COMMIT TRANSACTION) _ 137 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL PHỤ LỤC A 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ơ đồ 138 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL 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 , namnhaphoc INT 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 ( mamonhoc tenmonhoc monhoc NVARCHAR(10) NOT NULL CONSTRAINT pk_monhoc PRIMARY KEY, NVARCHAR(50) NOT NULL , 139 Khoa CNTT - Trường ĐHKH Huế sodvht ) SMALLINT CREATE TABLE diemthi ( mamonhoc NVARCHAR(10) masv NVARCHAR(10) diemlan1 NUMERIC(5, 2) diemlan2 NUMERIC(5, 2) CONSTRAINT pk_diemthi PRIMARY ) Giáo trình SQL NOT NULL NOT NULL , NOT NULL , NULL , NULL, 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 140 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL ON UPDATE CASCADE ALTER TABLE monhoc ADD CONSTRAINT chk_monhoc_sodht CHECK(sodvht>0 and sodvht=0 and diemlan1=0 and diemlan2