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

