Đề 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

pdf135 trang | Chuyên mục: SQL Server | Chia sẻ: dkS00TYs | Lượt xem: 2929 | Lượt tải: 1download
Tóm tắt nội dung Đề cương môn học Hệ quản trị CSDL SQL Server, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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:

  • pdfĐề cương môn học Hệ quản trị CSDL SQL Server.pdf
Tài liệu liên quan