Đề cương môn học Hệ quản trị CSDL SQL Server
MỤC LỤC
Bài 1. Giới thiệu về SQL Server 2005 . 7
1.1. Cài đặt SQL Server 2005 Enterprise Edition . 7
1.1.1. Các yêu cầu cho hệ thống 32bit . 7
1.1.2. Các bước cài đặt SQL Server 2005 Enterprise Edition . 8
1.2. Một số thao tác cơ bản trên SQL Server 2005 Enterprise Edition . 14
1.2.1. Tạo một CSDL mới . 14
1.2.2. Tạo bảng mới . 19
1.2.3. Xóa bảng, xóa CSDL . 20
1.2.4. Mở một query editor để viết câu lệnh SQL . 21
Bài 2. Structured Query Language (SQL) . 22
2.1. SQL là ngôn ngữ của cơ sở dữ liệu quan hệ . 22
2.2. Vai trò của SQL . 23
2.3. Giới thiệu sơ lược về Transact SQL (T-SQL) . 24
2.3.1. Ngôn ngữ định nghĩa dữ liệu (Data Definition Language – DDL) . 24
2.3.2. Ngôn ngữ điều khiển dữ liệu (Data Control Language – DCL) . 25
2.3.3. Ngôn ngữ thao tác dữ liệu (Data manipulation Language – DML) . 26
2.3.4. Cú pháp của T-SQL . 27
2.3.5. Các kiểu dữ liệu . 29
2.3.6. Biến (Variables) . 31
2.3.7. Hàm (Funtion) . 31
2.3.8. Các toán tử (Operators) . 32
2.3.9. Các thành phần điều khiển (Control of flow) . 32
2.3.10. Chú thích (Comment) . 33
2.3.11. Giá trị NULL . 33
Bài 3. Ngôn ngữ định nghĩa dữ liệu – DDL . 34
3.1. Tạo bảng . 34
3.2. Các loại ràng buộc . 37
3.2.1. Ràng buộc CHECK . 37
3.2.2. Ràng buộc PRIMARY KEY . 38
3.2.3. Ràng buộc FOREIGN KEY . 40
3.2.4. Ràng buộc NULL / NOT NULL . 42
3.2.5. Ràng buộc UNIQUE . 43
3.2.6. Ràng buộc DEFAULT . 45
3.3. Sửa đổi định nghĩa bảng . 46
3.4. Xóa bảng . 47
Bài 4. Ngôn ngữ thao tác dữ liệu – DML . 49
4.1. Câu lệnh SELECT . 49
4.1.1. Danh sách chọn trong câu lệnh SELECT . 51
4.1.2. Mệnh đề FROM . 55
4.1.3. Mệnh đề WHERE – điều kiện truy vấn dữ liệu . 56
4.1.4. Phép hợp (UNION) . 62
4.1.5. Phép nối . 65
4.1.6. Các loại phép nối . 68
4.1.7. Phép nối theo chuẩn SQL – 92 . 71
4.1.8. Mệnh đề GROUP BY . 74
4.1.9. Truy vấn con (Subquery) . 78
Đề cương bài giảng - Hệ quản trị CSDL SQL Server
Bộ môn CNPM – Khoa CNTT - UTEHY Trang 4
4.2. Thêm, cập nhật và xóa dữ liệu. 81
4.2.1. Thêm dữ liệu . 81
4.2.2. Cập nhật dữ liệu . 83
4.2.3. Xóa dữ liệu . 84
Bài 5. Lập trình T-SQL . 86
5.1. SQL Batch và xử lý Batch . 86
5.1.1. Khái niệm và nguồn gốc các câu lệnh Batch . 86
5.1.2. SQL Batch . 87
5.1.3. Sử dụng chú thích trong SQL . 88
5.2. Các câu lệnh điều khiển logic . 91
5.2.1. BEGIN END . 93
5.2.2. Câu lệnh GOTO và RETURN . 93
5.2.3. IF ELSE . 94
5.2.4. Vòng lặp WHILE . 95
5.2.5. Lệnh rẽ nhánh CASE . 97
5.3. Sử dụng các biến . 99
5.3.1. Các biến cục bộ và các biến toàn cục . 99
5.3.2. Sử dụng biến toàn cục . 99
5.3.3. Khai báo và khởi tạo giá trị cho các biến cục bộ . 100
5.4. Sử dụng các hàm hệ thống . 102
5.4.1. Các hàm phổ biến được SQL server hỗ trợ và các dạng phân loại các hàm này . 102
5.4.2. Hàm AGGREGATE . 103
5.4.3. Hàm CONVERSION . 104
5.4.4. Hàm DATE . 106
5.4.5. Các hàm toán học . 108
5.4.6. Các hàm hệ thống . 109
Bài 6. Khung nhìn (View) . 110
6.1. Khung nhìn (View) . 110
6.1.1. Định nghĩa . 110
6.1.2. Cách tạo ra khung nhìn . 111
6.1.3. Thêm, cập nhật, sửa, xóa trong view . 113
Bài 7. Thủ tục lƣu trữ, hàm . 115
7.1. Thủ tục lưu trữ (Stored Procedure) . 115
7.1.1. ạo thủ tục lưu trữ . 116
7.1.2. Lời gọi thủ tục . 118
7.1.3. Biến trong thủ tục lưu trữ . 118
7.1.4. Giá trị trả về trong thủ tục lưu trữ . 119
7.1.5. Tham số với giá trị mặc định . 121
7.1.6. Sửa đổi thủ tục . 122
7.1.7. Xóa thủ tục . 122
Bài 8. Bẫy lỗi (trigger) . 123
8.1. Các đặc điểm của Trigger . 123
8.2. Các trường hợp sử dụng Trigger . 123
8.3. Khả năng sau của Trigger . 124
8.4. Định nghĩa rigger . 124
8.5. Kích hoạt Trigger dựa vào sự thay đổi dữ liệu trên cột . 129
8.6. Sử dụng Trigger và thao tác (TRANSACTION) . 130
8.7. DLL Trigger . 131
Đề cương bài giảng - Hệ quản trị CSDL SQL Server
Bộ môn CNPM – Khoa CNTT - UTEHY Trang 6
8.8. Enable/Disable Trigger . 133
Tài liệu tham khảo . 135
g dữ liệu được bổ sung vào bảng gây nên sự kích hoạt đối với trigger bằng câu lệnh INSERT. Bảng DELETED trong trường hợp này không có dữ liệu. Khi câu lệnh UPDATE được thực thi trên bảng, các dòng dữ liệu cũ chịu sự tác động của câu lệnh sẽ được sao chép vào bảng DELETED, còn trong bảng INSERTED sẽ là các dòng sau khi đã được cập nhật. Hoạt động Bảng INSERTED Bảng DELETED INSERT dữ liệu được insert không có dữ liệu DELETE không có dữ liệu dữ liệu bị xóa UPDATE dữ liệu được cập nhật dữ liệu trước khi cập nhật Ví dụ 1: Ví dụ dưới đây minh họa việc trigger được kích hoạt khi thêm dữ liệu vào bảng CUSTOMERS if exists (select name from sysobjects where name = 't_CheckCustomerName' and type = 'TR') drop trigger t_CheckCustomerName go create trigger t_CheckCustomerName on customers for insert as declare @lengthOfName int select @lengthOfName = len(inserted.customername) Đề cương bài giảng - Hệ quản trị CSDL SQL Server Bộ môn CNPM – Khoa CNTT - UTEHY Trang 126 from inserted if @lengthOfName <=1 print N'Tên không hợp lệ' rollback tran go Thêm một khách hàng mới có tên là A insert into customers values('A', '5/5/1978', 'True', '35 Hung Vuong') Ví dụ 2: Ví dụ dưới đây minh họa trigger được kích hoạt khi có sự thay đổi mang tính đây chuyền giữa các bảng. Giả sử có CSDL như sau: Với dữ liệu trong từng bảng là: Giả sử có một khách hàng mua 10 đơn vị mặt hàng LAPTOP. Khi đó số lượng LAPTOP trong bảng ITEMFORSALE sẽ giảm xuống còn 90. Trigger dưới đây sẽ thực hiện công việc đó. if exists (select name from sysobjects Đề cương bài giảng - Hệ quản trị CSDL SQL Server Bộ môn CNPM – Khoa CNTT - UTEHY Trang 127 where name = 't_DecreaseQuantityOfItemForSale') drop trigger t_DecreaseQuantityOfItemForSale go create trigger t_DecreaseQuantityOfItemForSale on SALE for insert as update ITEMSFORSALE set itemsforsale.quantity = itemsforsale.quantity - inserted.salequantity from itemsforsale inner join inserted on itemsforsale.itemid = inserted.itemid go Thực hiện thêm dòng vào bảng SALE insert into sale values( 1, 10) Ví dụ 3: Ví dụ này minh họa cũng minh họa trigger được kích hoạt khi có sự thay đổi mang tính dây chuyền giữa các bảng nhưng trong trường hợp này dữ liệu thay đổi liên quan đến nhiều dòng. Giả sử người quản lý muốn thay đổi số lượng bán mặt hàng LAPTOP trong bãng SALE lên thêm 5 đơn vị. Như vậy từ kết quả ví dụ 2, ta thấy cần phải giảm số lượng LAPTOP trong bảng ITEMSFORSALE xuống 10 đơn vị. Tuy nhiên, trong thực tế khi số lượng các dòng trong bảng SALE rất lớn, khi đó phải sử dụng trigger: if exists (select name from sysobjects where name = 't_DecreaseSumQuantityOfItemForSale') drop trigger t_DecreaseSumQuantityOfItemForSale go Đề cương bài giảng - Hệ quản trị CSDL SQL Server Bộ môn CNPM – Khoa CNTT - UTEHY Trang 128 create trigger t_DecreaseSumQuantityOfItemForSale on SALE for update as if update(salequantity) update ITEMSFORSALE set itemsforsale.quantity = itemsforsale.quantity - (select sum(inserted.salequantity - deleted.salequantity) from deleted inner join inserted on deleted.saleid = inserted.saleid where inserted.itemid = itemsforsale.itemid) where itemsforsale.itemid in (select inserted.itemid from inserted) Thực hiện cập nhật cho bảng SALE: update sale set salequantity = salequantity + 10 where itemid = 1 Ví dụ 4: Ví dụ này minh họa INSTEAD OF trigger. Trigger dưới đây sẽ không cho thực hiện thao tác xóa trên bảng CUSTOMERS. create trigger t_RollbackDelete on customers Đề cương bài giảng - Hệ quản trị CSDL SQL Server Bộ môn CNPM – Khoa CNTT - UTEHY Trang 129 after delete as rollback tran 8.5. Kích hoạt Trigger dựa vào sự thay đổi dữ liệu trên cột Thay vì chỉ định một trigger được kích hoạt trên một bảng, ta có thể chỉ định trigger được kích hoạt và thực hiện những thao tác cụ thể khi việc thay đổi dữ liệu chỉ liên quan đến một số cột nhất định nào đó của cột. Trong trường hợp này, ta sử dụng mệnh đề IF UPDATE trong trigger. IF UPDATE không sử dụng được đối với câu lệnh DELETE. Trở lại ví dụ 3 trong phần định nghĩa trigger: if exists (select name from sysobjects where name = 't_DecreaseSumQuantityOfItemForSale') drop trigger t_DecreaseSumQuantityOfItemForSale go create trigger t_DecreaseSumQuantityOfItemForSale on SALE for update as if update(salequantity) update ITEMSFORSALE set itemsforsale.quantity = itemsforsale.quantity - (select sum(inserted.salequantity - deleted.salequantity) from deleted inner join inserted on deleted.saleid = inserted.saleid where inserted.itemid = itemsforsale.itemid) where itemsforsale.itemid in (select inserted.itemid from inserted) Đề cương bài giảng - Hệ quản trị CSDL SQL Server Bộ môn CNPM – Khoa CNTT - UTEHY Trang 130 Trong ví dụ này trigger sẽ được kích hoạt khi có sự thay đổi dữ liệu trong cột salequantity của bảng Sale. Nếu có sự thay đổi dữ liệu trên các cột khác thì trigger sẽ không được kích hoạt. Câu lệnh dưới đây không làm cho trigger kích hoạt. update sale set itemid = 3 where itemid = 2 Mệnh đề IF UPDATE có thể xuất hiện nhiều lần trong phần thân của trigger. Khi đó, mệnh đề IF UPDATE nào đúng thì phần câu lệnh của mệnh đề đó sẽ được thực thi khi trigger được kích hoạt. 8.6. Sử dụng Trigger và thao tác (TRANSACTION) Khi một trigger được kích hoạt, SQL Server luôn tạo ra một giao tác theo dõi những thay đổi do câu lệnh kích hoạt trigger hoặc do bản thân trigger gây ra. Sự theo dõi này cho phép. CSDL quay trở lại trạng thái trước đó. Ví dụ: Ví dụ dưới đây xây dựng trigger không cho phép nhập vào một bản ghi trong bảng SALE khi số lượng hàng bán lớn hơn số lượng hàng thực tế còn lại trong bảng ITEMSFORSALE if exists (select name from sysobjects where name = 't_CheckQuantity' and type = 'TR') drop trigger t_CheckQuantity go create trigger t_CheckQuantity on sale for insert as Đề cương bài giảng - Hệ quản trị CSDL SQL Server Bộ môn CNPM – Khoa CNTT - UTEHY Trang 131 declare @insertedQuantity decimal(18,2) declare @currentQuantity decimal(18,2) declare @itemid int select @itemid = itemid from inserted select @insertedQuantity = salequantity from inserted select @currentQuantity = quantity from itemsforsale where itemid = @itemid if(@currentquantity < @insertedquantity) print N'số lượng nhập vào lớn hơn số lượng hiện có' rollback tran Tiến hành thêm vào bảng SALE số liệu như sau: insert into sale values(2, 1000) 8.7. DLL Trigger Được giới thiệu trong SQL Server 2005, khác với DML trigger được kích hoạt khi có sự thay đổi dữ liệu trên bảng, DDL trigger được thiết kế để đáp ứng lại các sự kiện diễn ra trên server hay trên CSDL. Một DDL trigger có thể được kích hoạt khi người dùng thực hiện các lệnh CREATE TABLE hay DROP TABLE. Ở cấp độ server, DDL trigger có thể được kích hoạt khi có một tài khoản mới được tạo ra DDL trigger được lưu trữ trong CSDL mà DDL trigger được gắn vào. Với các Server DDL Trigger theo dõi các thay đổi ở cấp độ Server, được lưu trữ trong CSDL master. Đề cương bài giảng - Hệ quản trị CSDL SQL Server Bộ môn CNPM – Khoa CNTT - UTEHY Trang 132 DDL trigger được tạo ra cũng bằng câu lệnh CREATE TRIGGER với cấu trúc như sau: CREATE TRIGGER tên_trigger ON { ALL SERVER | DATABASE } FOR { loại_sự_kiện } [ ,...n ] AS { các_câu_lệnh_SQL} Trong đó: ALL SERVER | DATABASE: quy định trigger sẽ kích hoạt dựa trên các sự kiện diễn ra trên Server hay các sự kiện diễn ra trên CSDL. loại_sự_kiện: là một sự kiện đơn ở cấp độ Server hay cấp độ CSDL làm kích hoạt DDL trigger như: CREATE_TABLE, ALTER_TABLE, DROP_TABLE… Ví dụ 1: Câu lệnh dưới đây xây dựng một trigger được kích hoạt khi xảy ra các sự kiện ở cấp độ CSDL. Trigger này sẽ ngăn chặn các lệnh DROP TABLE và ALTER TABLE. create trigger t_safety on database for CREATE_TABLE, DROP_TABLE as print N'Phải xóa trigger t_safety trước khi ALTER hay DROP bảng' rollback tran Tiến hành xóa bảng ORDERDETAIL drop table orderdetail Ví dụ 2: Câu lệnh dưới đây xây dựng một trigger được kích hoạt khi xảy ra các sự kiện ở cấp độ Server. Trigger này sẽ ngăn chặn việc tạo ra một account login mới Đề cương bài giảng - Hệ quản trị CSDL SQL Server Bộ môn CNPM – Khoa CNTT - UTEHY Trang 133 IF EXISTS (SELECT * FROM sys.server_triggers WHERE name = 't_DoNotAllowCreateNewLogin') DROP TRIGGER t_DoNotAllowCreateNewLogin ON ALL SERVER GO CREATE TRIGGER t_DoNotAllowCreateNewLogin ON ALL SERVER FOR CREATE_LOGIN AS PRINT N'Phải DROP trigger t_DoNotAllowCreateNewLogin trước khi tạo account' rollback GO Tiến hành tạo một account login mới: create login test with password = '123456' 8.8. Enable/Disable Trigger Trigger cần bị vô hiệu hóa trong một số trường hợp: Trigger gây ra lỗi trong quá trình xử lý CSDL Quá trình nhập hay khôi phục những dữ liệu không thỏa trigger. Vô hiệu hóa trigger bằng lệnh DISABLE TRIGGER có cấu trúc như sau: DISABLE TRIGGER tên_trigger ON { tên_đối_tượng | DATABASE | SERVER } Đề cương bài giảng - Hệ quản trị CSDL SQL Server Bộ môn CNPM – Khoa CNTT - UTEHY Trang 134 Ví dụ 1: Ví dụ này sẽ vô hiệu hóa trigger t_DoNotAllowCreateNewLogin disable trigger t_DoNotAllowCreateNewLogin on all server Tiến hành tạo một account login mới: create login newLogin with password = '12345' Ví dụ 2: Ví dụ này sẽ khôi phục lại trigger t_ DoNotAllowCreateNewLogin enable trigger t_DoNotAllowCreateNewLogin on all server Tiến hành tạo một account login mới: create login newLogin1 with password = '12345' Đề cương bài giảng - Hệ quản trị CSDL SQL Server Bộ môn CNPM – Khoa CNTT - UTEHY Trang 135 Tài liệu tham khảo 1. Giáo trình hệ quản trị cơ sở dữ liệu SQL Server, Khoa CNTT, Đại học Huế. 2. SQL Server 2005, T-SQL Recipes: Problem, Solution, Approach – Appress Publisher. 3. Sams Teach yourself Microsoft SQL Server 2005 Express in 24 hours
File đính kèm:
- Đề cương môn học Hệ quản trị CSDL SQL Server.pdf