Nội dung được tác giả trình bày cô động, dễ hiểu kèm theo các bước hướng dẫn thực hành chi tiết theo nguyên tắc quan tâm đến kết quả đầu ra, khả năng tự học và kỹ năng cần thiết để HSSV [r]
(1)UBND TỈNH BÀ RỊA – VŨNG TÀU
TRƯỜNG CAO ĐẲNG KỸ THUẬT CÔNG NGHỆ
GIÁO TRÌNH
MƠ ĐUN HỆ QUẢN TRỊ CSDL MS SQL SERVER NGHỀ: CƠNG NGHỆ THƠNG TIN
TRÌNH ĐỘ: TRUNG CẤP
(Ban hành kèm theo Quyết định số: ……/QĐ-CĐKTCN, ngày … tháng … năm 20…… Hiệu trưởng Trường Cao đẳng Kỹ thuật Công nghệ BR-VT)
(2)TUYÊN BỐ BẢN QUYỀN
Nhằm đáp ứng nhu cầu học tập nghiên cứu cho giảng viên sinh viên nghề Công nghệ Thông tin trường Cao đẳng Kỹ thuật Công nghệ Bà Rịa – Vũng Tàu, thực biên soạn tài liệu Hệ quản trị CSDL MS SQL Server
Tài liệu biên soạn thuộc loại giáo trình phục vụ giảng dạy học tập, lưu hành nội Nhà trường nên nguồn thơng tin phép dùng nguyên trích dùng cho mục đích đào tạo tham khảo
(3)LỜI GIỚI THIỆU
Giáo trình “Hệ quản trị CSDL MS SQL Server” biên soạn dựa khung chương trình đào tạo Trung cấp nghề Cơng nghệ Thơng tin Trường Cao đẳng Kỹ thuật Công nghê Bà Rịa – Vũng Tàu phê duyệt
Tác giả nghiên cứu số tài liệu, công nghệ đại kết hợp với kinh nghiệm làm việc thực tế để viết nên giáo trình Nội dung tác giả trình bày động, dễ hiểu kèm theo bước hướng dẫn thực hành chi tiết theo nguyên tắc quan tâm đến kết đầu ra, khả tự học kỹ cần thiết để HSSV sử dụng phát biểu T-SQL: tạo CSDL, tạo user, truy vấn liệu… thực thành thạo thao tác quản trị tài khoản người dùng tài khoản nhóm hệ thống MS SQL Server, đáp ứng nhu cầu thực tế doanh nghiệp
Nội dung giáo trình chia thành 11 bài, đó: Bài 1: Tổng quan mơ hình Client/Server
Bài 2: Hệ quản trị sở liệu Microsoft SQL Server Bài 3: Ngôn ngữ định nghĩa thao tác liệu (T-SQL) Bài 4: Thủ tục lưu trữ
Bài 5: Quản lý giao tác
Bài 6: Bảo mật SQL Server
Trong trình biên soạn, chắn giáo trình cịn nhiều thiếu sót Tác giả mong nhận ý kiến đóng góp q thầy/cơ em học sinh, sinh viên để tiếp tục hoàn thiện
Xin chân thành cảm ơn quý đồng nghiệp, bạn bè có ý kiến đóng góp trình biên soạn giáo trình
Bà Rịa – Vũng Tàu, ngày …… tháng …… năm ……… Tham gia biên soạn
(4)MỤC LỤC
LỜI GIỚI THIỆU
MỤC LỤC
BÀI 1: TỔNG QUAN VỀ MƠ HÌNH CLIENT/SERVER 11
1 Các kiến thức tổng quan CSDL 19
1.1 Mô hình liệu quan hệ 19
1.2 Bảng 19
1.3 Khóa bảng 20
1.4 Mối quan hệ khóa ngồi 20
2 Các giai đoạn phát triển hệ quản trị CSDL 21
3 Giới thiệu mơ hình Client Server hệ QTCSDL phục vụ cho mơ hình Client Server 22
4 Các đặc trưng mơ hình Client Server 22
5 Tổng quan cấu trúc Client /Server 23
6 Các mơ hình liệu hệ thống Client /Server 23
6.1 Mơ hình CSDL tập trung 23
6.2.Mơ hình CSDL theo kiểu file - server 24
6.3 Mơ hình xử lý phần CSDL 24
6.4 Mơ hình CSDL Client Server 25
CÂU HỎI, BÀI TẬP 26
BÀI 2: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MS SQLServer 27
1 Giới thiệu hệ QTCSDL MS SQL Server 27
1.1 SQL ngôn ngữ CSDL quan hệ 27
1.2 Vai trò SQL 28
2 Cài đặt MS SQL Server 29 BM/QT08/P.ĐT/02/06
(5)2.1 Link download để cài đặt 29
2.2 Các phiên SQL 29
2.2.3 Các bước cài đặt 30
3 Các công cụ MS SQL Server 33
4 Làm việc với công cụ Enterprise Manager 34
4.1 Tạo CSDL 27
4.2 Tạo bảng 35
4.3 Tạo mối quan hệ bảng 37
4.4 Nhập liệu cho bảng 37
5 Các dịch vụ SQL 38
5.1 Khởi động dịch vụ MS SQL Server 38
5.2 Khởi động dịch vụ MS SQL Server 40
CÂU HỎI, BÀI TẬP 40
BÀI 3: NGÔN NGỮ ĐỊNH NGHĨA VÀ THAO TÁC DỮ LIỆU 43
1 Tạo sở liệu 43
2 Tạo bảng 43
2.1 Kiểu liệu 44
2.2 Kiểu liệu NULL 46
3 Sửa bảng 47
4 Toàn vẹn liệu 49
4.1 Ràng buộc PRIMARY KEY 50
4.2 Ràng buộc UNIQUE 52
4.3 Ràng buộc FOREIGN KEY 53
5 Thêm liệu 56
5.1 Bổ sung dòng liệu với lệnh insert 56
(6)6 Xóa 58
6.1 Xóa liệu bảng 58
6.2 Xóa liệu điều kiện liên quan đến nhiều bảng 58
6.3 Sử dụng truy vấn câu lệnh Delete 59
6.4 Xóa tồn liệu bảng 59
7 Cập nhật (Update) 59
7.1 Sử dụng cấu trúc CASE câu lệnh UPDATE 60
7.2 Điều kiện cập nhật liệu liên quan đến nhiều bảng 61
7.3 Câu lệnh UPDATE với truy vấn 61
8 Chọn lọc (SELECT) 62
8.1 Mệnh đề FROM 63
8.2 Danh sách chọn câu lệnh SELECT 64
8.3 Chỉ định điều kiện truy vấn liệu 70
8.4 Tạo bảng liệu từ kết câu lệnh SELECT 74
8.5 Sắp xếp kết truy vấn 74
8.6 Phép hợp 76
8.7 Phép nối 78
CÂU HỎI, BÀI TẬP 87
BÀI 4: THỦ TỤC LƯU TRỮ 93
1 Khái niệm thủ tục lưu trữ 93
2 Tạo thủ tục lưu trữ: 94
3 Lời gọi thủ tục 96
4 Sử dụng biến thủ tục 97
5 Giá trị trả tham số thủ tục lưu trữ 98
6 Sửa đổi thủ tục 99
(7)CÂU HỎI, BÀI TẬP 101
BÀI 5: QUẢN LÝ GIAO TÁC 102
1 Định nghĩa TRIGGER 102
2 Sử dụng mệnh đề IF UPDATE TRIGGER 104
3 ROLLBACK TRANSACTION 106
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 108
4.1 Sử dụng truy vấn 108
4.2 Sử dụng biến trỏ 111
CÂU HỎI, BÀI TẬP 113
BÀI 6: BẢO MẬT TRONG SQL SERVER 115
1 Cơ chế an toàn liệu 115
2 Khung nhìn (VIEW) chế bảo vệ liệu 117
2.1 Tạo VIEW SQL 117
2.2 Xóa VIEW SQL upload.123doc.net Tạo quản lý người dùng (USER) upload.123doc.net Tạo ROLES sử dụng loại ROLES 120
4.1 Bảo mật cấp Database Engine 121
4.2 Bảo mật chi tiết cấp Database 123
5 Tạo USER : cấp quyền, thu quyền SERVER, DB OBJECT 124
5.1 Cấp quyền 124
5.2 Thu quyền 129
CÂU HỎI, BÀI TẬP 133
(8)CHƯƠNG TRÌNH MƠ ĐUN
(Ban hànhkèm theo Quyết định số /QĐ–CĐKTCN ngày tháng năm Hiệu trưởng Trường Cao đẳng Kỹ thuật Công nghệ Bà Rịa – Vũng Tàu)
Tên mô đun: Hệ quản trị CSDL MS SQL Server Mã mô đun: MD15
Thời gian thực mô đun: 90 giờ; (Lý thuyết: 27 giờ; Thực hành, thí nghiệm, thảo luận, tập: 55giờ; Kiểm tra: giờ)
Vị trí, tính chất mơ đun:
- Vị trí: giảng dạy sau học xong module Cơ sở liệu, Quản trị Cơ sở liệu Access, Quản trị mạng
- Tính chất: Là mơ đun chun ngành nghề cơng nghệ thơng tin, trình bày kiến trúc hệ quản trị sở liệu MS SQL Server, cách làm việc tương tác thành phần kiến trúc hệ thống Kết nối hệ thống mạng để sử dụng hệ thống sở liệu
Mục tiêu mô đun: - Về kiến thức:
+ Trình bày mơ hình sở liệu Client/Server + Nêu đặc trưng mô hình Client/Server
+ Trình bày cú pháp cơng dụng phát biểu T-SQL: tạo CSDL, tạo user
+ Thực ràng buộc liệu: Check, primary
+ Trình bày cú pháp ngơn ngữ lập trình SQL để định nghĩa hàm + Phân tích trigger, nguyên lý quản lý giao tác cho CSDL
+ Biết chọn giải pháp chế an toàn liệu - Về kỹ năng:
(9)+ Thực thành thạo thao tác quản trị tài khoản người dùng tài khoản nhóm hệ thống MS SQL Server
+ Thiết lập cấu hình giải vấn đề thường xảy mạng sử dụng truy cập sở liệu
+ Bảo vệ tài nguyên liệu hệ thống MS SQL Server
+ Sao lưu phục hồi đồng thời lập lịch lưu tự động HQTCSDL SQL Server
- Về lực tự chủ trách nhiệm:
+ Có tinh thần trách nhiệm, ý thức tổ chức kỷ luật, tác phong công nghiệp, tinh thần hợp tác công việc
+ Có ý chủ động, độc lập công việc, tự học cập nhật kiến thức, nâng cao trình độ chun mơn
+ Có khả tổ chức điều hành nhóm, đánh giá thành viên nhóm
+ Rèn luyện tính cẩn thận, kiên trì, sáng tạo, độc lập hoạt động nhóm + Bảo đảm an tồn vệ sinh cho người thiết bị phịng máy Nội dung mơ đun:
Số
TT Tên mô đun
Thời gian (giờ) Tổng
số
Lý thuyết
Thực hành, thí nghiệm, thảo
luận, tập
Kiểm tra Bài 1: Tổng quan mơ hình
Client/Server
4 1 3 0
1 Các kiến thức tổng quan sở liệu
0.4 0.2 0.2
2 Các giai đoạn phát triển hệ quản trị sở liệu
0.3 0.1 0.2
3 Các đặc trưng mơ hình Client/server
0.8 0.2 0.6
(10)Client/Server
5 Các mơ hình liệu hệ thống Client/Server
1.3 0.3 1.0
2 Bài 2: Hệ quản trị sở liệu Microsoft SQL Server
10 4 6 0
1 Giới thiệu hệ quản trị sở liệu MS SQL Server
0.7 0.2 0.5
2 Cài đặt MS SQL Server 1.0 0.5 0.5
3 Các công cụ MS SQL Server 1.3 0.3 Làm việc với công cụ Enterprise
Manager
4.0 2.0
5 Các dịch vụ SQL 1.0
3 Bài 3: Ngôn ngữ định nghĩa thao tác liệu (T-SQL)
24 9 13 2
1 Create Database 1.5 0.5
2 Create Table 2.5 1.5
3 Alter Table 1.0
4 Toàn vẹn liệu 3.5 1.5
5 Insert 3.0
6 Delete 1.5 0.5
7 Update 1.0
8 Select
Kiểm tra 0
4 Bài 4: Thủ tục lưu trữ 19 6 11 2
1 Khái niệm thủ tục lưu trữ 1.5 0.5
2 Tạo thủ lư trữ 4.5 1.5
3 Lời gọi thủ tục 1.5 0.5
4 Sử dụng biến thủ tục 3 1.0 2 0
5 Giá trị trả tham số thủ tục lưu trữ
3 1.0
6 Sửa đổi thủ tục 2.5 1.0 1.5
7 Xóa thủ tục 0.5 0.5
(11)5 Bài 5: Quản lý giao tác 16 6 7 3
1 Định nghĩa Trigger 1.5 0.5
2 Sử dụng mệnh đề IF UPDATE Trigger
3.5 1.5 2.0
3 ROLLBACK TRANSACTION 3.5 1.5 2.0
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
4.5 2.5 2.0
Kiểm tra 0
6 Bài 6: Bảo mật SQL Server 17 4 10 3
1 Cơ chế an toàn liệu 1.5 0.5
2 Khung nhìn (view) chế bảo vệ liệu
2.5 0.5
3 Tạo quản lý User 2.0 0.5 1.5
4 Tạo roles sử dụng loại roles server, DB Object
4.5 1.5
5 Tạo User: cấp quyền, thu quyền server, DB Object
3.5 1.0 2.5
Kiểm tra 0
Cộng 90 30 50 10
2 Nội dung chi tiết
Bài 1: Tổng quan mơ hình Client/Server Thời gian: 04giờ
Mục tiêu:
- Hiểu rõ mơ hình sở liệu Client/Server
- Nắm vững đặc trưng mơ hình Client/Server - Nghiêm túc, tự giác học tập
Nội dung:
1 Các kiến thức tổng quan sở liệu
(12)3 Giới thiệu mơ hình Client server hệ quản trị sở liệu phục vụ cho mơ hình Client/Server
4 Các đặc trưng mơ hình Client/server Tổng quan cấu trúc Client/Server
6 Các mơ hình liệu hệ thống Client/Server
Bài 2: Hệ quản trị sở liệu Microsoft SQL Server Thời gian: 10
Mục tiêu:
- Trình bày lịch sử phát triển hệ quản trị sở liệu MS SQL Server - Cài đặt phần mềm hệ quản trị sở liệu MS SQL Server
- Sử dụng công cụ hổ trợ hệ quản trị sở liệu MS SQL Server
- Cấu hình hệ thống quản trị sở liệu Server nội - Nghiêm túc, tự giác học tập
- Đảm bảo an toàn cho nguời thiết bị Nội dung:
1 Giới thiệu hệ quản trị sở liệu MS SQL Server Cài đặt MS SQL Server
3 Các công cụ MS SQL Server
4 Làm việc với công cụ Enterprise Manager 4.1.Tạo CSDL
4.2.Tạo bảng
4.3.Tạo mối quan hệ bảng 4.4.Nhập liệu cho bảng
(13)Bài 3: Ngôn ngữ định nghĩa thao tác liệu (T-SQL) Thời gian: 24
Mục tiêu:
⁻ Trình bày cú pháp công dụng phát biểu
⁻ Thực việc truy vấn liệu câu lệnh T-SQL yêu cầu ⁻ Tạo loại khóa: Khóa chính, khóa phụ, khóa ngồi;
⁻ Các ràng buộc liệu: Check, primary,
⁻ Thực thao tác an tồn với máy tính ⁻ Nghiêm túc, tự giác học tập
⁻ Đảm bảo an toàn cho nguời thiết bị Nội dung:
1 Tạo sở liệu (Create Database) Tạo bảng (Create Table)
3 Sửa bảng (Alter Table) Toàn vẹn liệu (Contrains) Thêm liệu (Insert)
6 Xóa (Delete) Cập nhật (Update) Chọn lọc (Select)
Bài 4: Thủ tục lưu trữ Thời gian: 19giờ Mục tiêu:
- Sử dụng ngôn ngữ lập trình SQL để định nghĩa hàm - Cài đặt thủ tục nội
- Bẫy lỗi, cách dùng trỏ xử lý liệu - Thực thao tác an toàn với máy tính Nội dung:
(14)2 Tạo thủ lư trữ Lời gọi thủ tục
4 Sử dụng biến thủ tục
5 Giá trị trả tham số thủ tục lưu trữ Sửa đổi thủ tục
7 Xóa thủ tục
Bài 5: Quản lý giao tác Thời gian: 19giờ Mục tiêu:
⁻ Hiểu trigger
⁻ Hiểu nguyên lý quản lý giao tác
⁻ Quản lý truy xuất cạnh tranh, phục hồi sau cố ⁻ Thực thao tác an toàn với máy tính Nội dung:
1 Định nghĩa Trigger
2 Sử dụng mệnh đề IF UPDATE Trigger ROLLBACK TRANSACTION
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
Bài 6: Bảo mật SQL Server Thời gian: 17giờ Mục tiêu:
⁻ Sử dụng lệnh tạo user
⁻ Sử dụng lệnh cấp phát, thu hồi từ chối quyền người sử dụng
⁻ Thực thao tác an tồn với máy tính Nội dung:
(15)2 Khung nhìn (view) chế bảo vệ liệu Tạo quản lý User
4 Tạo roles sử dụng loại roles server, DB Object Tạo User: cấp quyền, thu quyền server, DB Object IV Điều kiện thực mơ đun
1 Phịng học chun mơn hóa/nhà xưởng: máy tính kết nối mạng, 1hv/máy Máy tính cài đặt MS SQL Server 2012, RAM tối thiểu 4GB, ổ cứng trống tối thiểu 525 MB
2 Trang thiết bị máy móc: máy chiếu, bảng viết Học liệu, dụng cụ, nguyên vật liệu:
4 Các điều kiện khác:
V Nội dung phương pháp đánh giá Nội dung:
- Kiến thức:
+ Đánh giá thông qua kiểm tra viết đạt yêu cầu sau: + Định nghĩa Database, table ràn buộc liệu
+ Mô tả kiểu liệu SQL Server
+ Trình bày cú pháp câu lệnh Select, Insert, Update, Delete + Sao lưu, phục hồi liệu database
+ Export /inport liệu từ SQL sang ứng dụng khác + Thêm user , gán quyền thu hồi quyền
- Kỹ năng:
+ Đánh giá thông qua kiểm tra thực hành kỹ thao tác, quản trị sở liệu công cụ Enterprise Manager
+ Phân biệt kiểu liệu thiết kế bảng
(16)+ Cài đặt sở liệu SQL Server máy đơn máy mạng + Đăng nhập vào SQL Server
+ Tạo sở liệu thành phần sở liệu Client/Server - Năng lực tự chủ trách nhiệm:
+ Có tinh thần trách nhiệm, ý thức tổ chức kỷ luật, tác phong công nghiệp, tinh thần hợp tác cơng việc
+ Có ý chủ động, độc lập công việc, tự học cập nhật kiến thức, nâng cao trình độ chun mơn
+ Có khả tổ chức điều hành nhóm, đánh giá thành viên nhóm
+ Rèn luyện tính cẩn thận, kiên trì, sáng tạo, độc lập hoạt động nhóm + Bảo đảm an toàn vệ sinh cho người thiết bị phòng máy Phương pháp:
- Đánh giá kiến thức: tự luận đáp
- Đánh giá kỹ năng: Quan sát thao tác thực hành máy tính thơng qua
chất lượng sản phẩm
- Đánh giá lực tự chủ trách nhiệm: Thông qua kết đánh giá kiến
thức, kỹ thái độ
VI Hướng dẫn thực mô đun
1 Phạm vi áp dụng mơ đun: Chương trình mơ đun sử dụng để giảng dạy cho trình độ trung cấp, cao đẳng
2 Hướng dẫn phương pháp giảng dạy, học tập mô đun: - Đối với giáo viên, giảng viên:
+ Chuẩn bị điều kiện cần thiết trước
(17)+ Thao tác mẫu hướng dẫn chi tiết để hoàn thiện kỹ cho học sinh
+ Có thể chia nhóm học sinh để thực tập - Đối với người học:
Làm tập thực hành máy tính
Trao đổi với nhau, thực thực hành theo nhóm Những trọng tâm cần ý:
⁻ Hiểu rõ đặc trưng mơ hình Client/Server
⁻ Trình bày cú pháp công dụng phát biểu T-SQL: tạo CSDL, tạo user
⁻ Sử dụng ràng buộc liệu: Check, primary
⁻ Trình bày cú pháp ngơn ngữ lập trình SQL để định nghĩa hàm ⁻ Thực nguyên lý quản lý giao tác, chế an toàn liệu
⁻ Thiết lập cấu hình giải vấn đề thường xảy mạng sử dụng truy cập sở liệu
⁻ Sao lưu phục hồi đồng thời lập lịch lưu tự động HQTCSDL SQL Server
⁻ Giới thiệu lỗi thường gặp cách khắc phục
⁻ Đảm bảo biện pháp an tồn cho máy tính, vệ sinh cơng nghiệp
4 Tài liệu tham khảo:
[1] Database Management System, simply easy learning, 2015 (free book) https://www.tutorialspoint.com/dbms/
[2] Beginning Microsoft SQL Server 2012 Programming, Paul Atkinson, Robert Vieira, All Rights Reserved A Division of John Wiley & Sons, Inc, 2012
(18)BÀI 1:TỔNG QUAN VỀ MÔ HÌNH CLIENT/SERVER Mã bài: 15.1
Giới thiệu:
SQL hệ quản trị CSDL nhiều người dùng kiểu Client/Server Đây hệ thống dùng lưu trữ liệu cho hầu hết ứng dụng lớn Mơ hình Client/Server SQL sử dụng để điều khiển tất chức mà hệ quản trị CSDL cung cấp cho người dùng khả năng: định nghĩa liệu, truy xuất thao tác liệu, điều khiển truy cập, đảm bảo toàn vẹn liệu
Mục tiêu:
- Hiểu rõ mô hình sở liệu Client/Server
- Nắm vững đặc trưng mơ hình Client/Server - Nghiêm túc, tự giác học tập
Nội dung chính:
1 Các kiến thức tổng quan sở liệu 1.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)
1.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: dòng bảng biểu diễn cho thực thể
Tên bảng: sử dụng để xác định bảng sở liệu
(19)xác định tên cột phải có kiểu liệu 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 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 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ố
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 khoá phụ khoá dự tuyển (candidate key/unique key).
1.4 Mối quan hệ khố ngồi
(20)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.1, cột MAKHOA bảng LOP gọi khoá ngồi bảng này, khố ngồi tham chiếu đến khố bảng KHOA cột MAKHOA
2 Các giai đoạn phát triển hệ quản trị sở liệu.
Những năm 1975-1976, IBM lần đưa hệ quản trị CSDL kiểu quan hệ mang tên SYSTEM-R với ngôn ngữ giao tiếp CSDL SEQUEL (Structured English QUEry Language), ngơn ngữ để thao tác với CSDL
Năm 1976 ngôn ngữ SEQUEL cải tiến thành SEQUEL2 Khoảng năm 1978-1979 SEQUEL2 cải tiến đổi tên thành Ngôn ngữ truy vấn có cấu trúc (Structured Query Language - SQL) cuối năm 1979 cải tiến thành SYSTEM-R
Năm 1986 Viện Tiêu Chuẩn Quốc Gia Mỹ (American National Standards Institute - ANSI) cơng nhận chuẩn hóa ngơn ngữ SQL, sau Tổ chức Tiêu chuẩn Thế giới (International Standards Organization - ISO) công nhận ngơn ngữ Đó chuẩn SQL-86
(21)Tới SQL qua lần chuẩn hóa lại (1989, 1992, 1996) để mở rộng phép tốn tăng cường khả bảo mật tính tồn vẹn liệu
Ngơn ngữ CSDL cài đặt khác đối tùy theo hệ quản trị CSDL khác nhau, nhiên phải theo chuẩn (Standard) định Hiện nay, đa phần ngôn ngữ truy vấn CSDL dựa chuẩn SQL-92
3 Giới thiệu mơ hình Client server hệ quản trị sở liệu phục vụ cho mơ hình Client/Server
SQL hệ quản trị CSDL nhiều người dùng kiểu Client/Server Đây hệ thống dùng lưu trữ liệu cho hầu hết ứng dụng lớn Mơ hình Client/Server SQL sử dụng để điều khiển tất chức mà hệ quản trị CSDL cung cấp cho người dùng khả năng:
⁻ Định nghĩa liệu
⁻ Truy xuất thao tác liệu ⁻ Điều khiển truy cập
⁻ Đảm bảo toàn vẹn liệu 4 Các đặc trưng mơ hình Client/server
Một ứng dụng kiểu Client/Server bao gồm phần: Một phần chạy Server (máy chủ) phần khác chạy Workstations (máy trạm)
Hình 1.2: Mơ hình Client/Server SQL Server
(22)Phần Client (Máy khách): Là phần mềm chạy máy trạm cho phép người sử dụng giao tiếp CSDL Server
Hệ thống máy tính Client/Server có mơ hình kiến trúc dựa cấu hình phân tán truy nhập liệu, gồm:
- Mơ hình CSDL tập trung (Centralized database model)
- Mơ hình CSDL theo kiểu file - server (File - server database model)
- Mơ hình xử lý phần CSDL (Database extract proceSQL Servering model) - Mơ hình CSDL Client/Server (Client/Server database model)
- Mơ hình CSDL phân tán (Distributed database model) 5 Tổng quan cấu trúc Client/Server
Một CSDL phải đảm bảo tính độc lập liệu chương trình ứng dụng Vì vậy, mơ hình CSDL Client/Server, hệ thống Server lưu trữ CSDL máy A, hệ thống Client chạy chương trình ứng dụng phải máy khác
Trong mơ hình này, thành phần xử lý ứng dụng hệ thống Client đưa yêu cầu cho phần mềm CSDL máy Client, phần mềm kết nối với phần mềm CSDL chạy Server Phần mềm CSDL Server truy nhập vào CSDL gửi trả kết cho máy Client
6 Các mơ hình liệu hệ thống Client/Server 6.1.Mơ hình CSDL tập trung (Centralized database model)
Trong mơ hình này, thành phần xử lý ứng dụng, phần mềm CSDL thân CSDL xử lý
Ví dụ: Người dùng máy tính cá nhân chạy chương trình ứng dụng có sử dụng phần mềm CSDL Oracle để truy nhập tới CSDL nằm đĩa cứng máy tính cá nhân Từ thành phần ứng dụng, phần mềm CSDL thân CSDL nằm máy tính ứng dụng thích hợp với mơ hình tập trung
(23)phần mềm CSDL IMS DB2 IBM cung cấp cho trạm làm việc vị trí phân tán truy nhập nhanh chóng tới CSDL trung tâm Tuy nhiên nhiều hệ thống vậy, thành phần ứng dụng CSDL thực máy mainframe cấu hình thích hợp với mơ hình tập trung
6.2.Mơ hình CSDL theo kiểu file - server (File - server databasemodel)
Trong mơ hình CSDL theo kiểu file - server thành phần ứng dụng phần mềm CSDL hệ thống máy tính file vật lý tạo nên CSDL nằm hệ thống máy tính khác Một cấu thường dùng mơi trường cục bộ, nhiều hệ thống máy tính đóng vai trị server, lưu trữ file liệu cho hệ thống máy tính khác thâm nhập tới Trong môi trường file - server, phần mềm mạng thi hành làm cho phần mềm ứng dụng phần mềm CSDL chạy hệ thống người dùng cuối coi file CSDL file server thực máy tính người họ
Mơ hình file server giống với mơ hình tập trung Các file CSDL nằm máy khác với thành phần ứng dụng phần mềm CSDL; nhiên thành phần ứng dụng phần mềm CSDL có thiết kế để vận hành môi trường tập trung
6.3.Mô hình xử lý phần CSDL (Database extract proceSQL Servering model)
Một CSDL xa truy nhập phần mềm CSDL, gọi xử lý liệu phần Với mơ hình này, người sử dụng máy tính cá nhân kết nối với hệ thống máy tính xa nơi có liệu mong muốn Người sử dụng tác động trực tiếp đến phần mềm chạy máy xa tạo yêu cầu để lấy liệu từ CSDL Người sử dụng chuyển liệu từ máy tính xa máy tính vào đĩa cứng thực việc chép phần mềm CSDL máy cá nhân
(24)CSDL chạy hai máy không cần biết việc xử lý CSDL từ xa diễn người sử dụng tác động tới chúng cách độc lập
6.4.Mơ hình CSDL Client/Server (Client/Server database model)
Mơ hình CSDL Client/Server gần giống mơ hình file - server, nhiên mơ hình Client/Server có nhiều thuận lợi mơ hình file - server
Xét ví dụ sau đây: Một người dùng cuối muốn tạo vấn tin để lấy liệu tổng số, yêu cầu đòi hỏi lấy liệu từ 1000 ghi
Với cách tiếp cận File-Server nội dung tất 1000 ghi phải đưa lên mạng, phần mềm CSDL chạy máy người sử dụng phải truy nhập ghi để thoả mãn yêu cầu người sử dụng
Với cách tiếp cận CSDL Client/Server, có lời vấn tin khởi động ban đầu kết cuối cần đưa lên mạng Phần mềm CSDL chạy máy lưu giữ CSDL truy nhập ghi cần thiết, xử lý chúng gọi thủ tục cần thiết để đưa kết cuối
Front-end software
Trong mơ hình CSDL Client/Server, thường nói đến phần mềm front-end software back-front-end software Front-front-end software chạy máy tính cá nhân workstation đáp ứng yêu cầu đơn lẻ riêng biệt, phần mềm đóng vai trị Client ứng dụng CSDL Client/Server thực chức hướng tới nhu cầu người dùng cuối cùng, phần mềm Front-end software thường chia thành loại sau:
- End user database software: Được thực người sử dụng cuối hệ thống họ để truy nhập CSDL cục nhỏ kết nối với CSDL lớn CSDL Server
- Simple query and reporting software: Được thiết kế để cung cấp công cụ dễ dùng việc lấy liệu từ CSDL tạo báo cáo đơn giản từ liệu có
- Data analysis software: Cung cấp hàm tìm kiếm, khơi phục, chúng cung cấp phân tích phức tạp cho người dùng
(25)nhân viên hệ thống thông tin chuyên nghiệp sử dụng để xây dựng ứng dụng CSDL
- Database administration Tools: Các công cụ cho phép người quản trị CSDL sử dụng máy tính cá nhân trạm làm việc để thực việc quản trị CSDL định nghĩa CSDL, thực lưu trữ hay phục hồi
Back-end software
Phần mềm bao gồm phần mềm CSDL Client/Server phần mềm mạng chạy máy đóng vai trị Server CSDL
6.5.Mơ hình CSDL phân tán (Distributed database model)
Cả hai mơ hình File - Server Client/Server giả định liệu nằm xử lý chương trình ứng dụng truy nhập liệu nằm xử lý khác, cịn mơ hình CSDL phân tán lại giả định thân CSDL có nhiều máy khác
CÂU HỎI, BÀI TẬP
Câu 1: Phân biệt khái niệm CSDL, hệ quản trị CSDL, hệ CSDL, SQL, T-SQL Câu 2: Cho ví dụ số hệ quản trị CSDL theo mô hình Client/Server ?
Câu 3: Hãy trình bày đặt trưng mơ hình Client/Server?
Câu 4: Hãy so sánh mơ hình liệu tập trung mơ hình liệu phân tán ?
(26)BÀI 2: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MS SQL SERVER Mã bài: 15.2
Giới thiệu:
SQL Server hệ quản trị sở liệu quan hệ (Relational Database Management System (RDBMS) ) sử dụng câu lệnh SQL (Transact-SQL) để trao đổi liệu máy Client máy cài SQL Server
Mục tiêu:
- Trình bày lịch sử phát triển hệ quản trị sở liệu MS SQL Server - Cài đặt phần mềm hệ quản trị sở liệu MS SQL Server
- Sử dụng công cụ hổ trợ hệ quản trị sở liệu MS SQL Server
- Cấu hình hệ thống quản trị sở liệu Server nội - Nghiêm túc, tự giác học tập
- Đảm bảo an toàn cho nguời thiết bị Nội dung chính:
1 Giới thiệu hệ quản trị sở liệu MS SQL Server
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ệ
(27)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 hiện 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 các thao tác người sử dụng liệu, đảm bảo an toàn cho sở liệu
Đảm bảo toàn vẹn liệu: SQL định nghĩa ràng buộc tồn vẹn cơ 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
(28)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 yê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ác 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ị cơ 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 các 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ở dữ 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
SQL ngôn ngữ sử dụng cho cổng giao tiếp sở liệu: Trong một 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
2 Cài đặt MS SQL Server 2.1 Link download để cài đặt:
https://www.microsoft.com/en-us/sql-server/sql-server-downloads 2.2 Các phiên SQL Swrer:
(29) Standard - tính Enterprise, sử dụng không cần dùng tới
tính nâng cao
Workgroup - phù hợp cho công ty lớn với nhiều văn phòng làm việc từ
xa
Web - thiết kế riêng cho ứng dụng web
Developer - tương tự Enterprise cấp quyền cho người
dùng để phát triển, thử nghiệm, demo Có thể dễ dàng nâng cấp lên Enterprise mà không cần cài lại
Express - dùng mức độ đơn giản, tối đa CPU nhớ 1GB,
kích thước tối đa sở liệu 10GB
Compact - nhúng miễn phí vào mơi trường phát triển ứng dụng web
Kích thước tối đa sở liệu 4GB
Datacenter - thay đổi lớn SQL Server 2008 R2 Datacenter
Edition Khơng giới hạn nhớ hỗ trợ 25 cài
Business Intelligence - Business Intelligence Edition giới thiệu
trên SQL Server 2012 Phiên có tính Standard hỗ trợ số tính nâng cao BI Power View PowerPivot khơng hỗ trợ tính nâng cao mức độ sẵn sàng AlwaysOn Availability Groups…
Enterprise Evaluation - SQL Server Evaluation Edition lựa chọn tuyệt
vời để dùng tính có cài miễn phí SQL Server để học tập phát triển Phiên có thời gian hết hạn tháng từ ngày cài
2.3 Các bước cài đặt
(30)Hình 2.1: Nhấp đúp vào biểu tượng tải về
(31)Hình 2.2: Bước cài đặt MS SQL Server Bước 4: Chọn Accept
Bước 5: Chọn Install
Bước 6: Sau chạy cài đặt xong, chương trình giao diện bên dưới,
click “Install SSMS”
Hình 2.3: Bước cài đặt MS SQL Server
Bước 7: Chương trình dẫn đến trang download SSMS ( SQL Server Management Studio)
(32)Hình 2.4: Bước cài đặt MS SQL Server Bước 8: Kích đúp vào file vừa tải chọn yes
Hình 2.5: Bước cài đặt MS SQL Server Bước 9: Hiển thị hình chọn “Install”
Hình 2.6: Bước cài đặt MS SQL Server Bước 10: Thơng báo hồn thành cài đặt SSMS, chọn Close 3 Các công cụ MS SQL Server
(33)Kế đến Query Analyzer Ðối với DBA giỏi cần cơng cụ quản lý hệ thống database mà không cần đến thứ khác Ðây mơi trường làm việc tốt ta đánh câu lệnh SQL chạy đặc biệt giúp cho ta debug stored procedure dễ dàng
Công cụ thứ ba cần phải kể đến SQL Profiler Nó có khả "chụp" (capture) tất kiện hay hoạt động diễn SQL server lưu lại dạng text file hữu dụng việc kiểm sốt hoạt động SQL Server
Ngồi số công cụ trực quan thường hay dùng osql bcp (bulk copy) command prompt
4 Làm việc với công cụ Enterprise Manager (EMS SQL Manager)
Ðây công cụ cho ta thấy toàn cảnh hệ thống CSDL cách trực quan Nó cho phép người dùng tạo chỉnh sửa đối tượng sở liệu SQL Server tạo, sửa đổi, thực lưu truy vấn SQL
Ðường link download công cụ :
https://www.sqlmanager.net/en/products/mssql/manager/download 4.1 Tạo CSDL
Tạo CSDL SQL Server Management Studio
Mở SMSS, kết nối tới cài SQL Server click chuột phải vào Databases > New Database:
(34)Sau đặt tên CSDL khung Database Name
Hình 2.8: Đặt tên tập tin CSDL 4.2 Tạo bảng
Để tạo bảng cho môt CSDL ta nhắp chuột vào dấu cộng (+) bên trái CSDL tương ứng, ta có danh sách thành phần CSDL, nhắp phải vào Table chọn New Table
Hình 2.9: Đặt tên bảng liệu
Sau nhập tên bảng nhấn OK để xác nhận, muốn bỏ qua thao tác tạo bảng nhấn nút Cancel
(35)Hình 2.10: Đặt tên trường cho bảng liệu
Muốn tạo khóa cho trường chọn dịng tương ứng sau nhắp vào biểu tượng chìa khóa cơng cụ Có thể kết hợp với phím Shift Ctrl muốn chọn nhiều dịng
Hình 2.11: Tạo khóa chính, khóa ngoại cho bảng liệu
4.3 Tạo mối quan hệ bảng
(36)tạo -> Click phải vào Database Diagrams -> Chọn New Database Diagram
Hình 2.12: Tạo sơ đồ (Diagrams)
Khi ta chọn OK table xuất kết nối bảng liệu
Hình 2.13: Mối quan hệ bảng thiết lập
Trong cách, bạn tạo mối quan hệ khác Khi bạn hồn tất, bạn lưu đóng diagram
4.4 Nhập liệu cho bảng
Bước 1: Nhấp đôi chuột vào tên bảng cần nhập liệu Bước 2: Nhập cột liệu cho dòng
(37)MS SQL Server mang tới dịch vụ để tạo trì sở liệu (CSDL) Ngồi cịn có dịch vụ bổ sung phục vụ mục đích khác
Hai dịch vụ MS SQL Server gồm: SQL Server
SQL Server Agent
Các dịch vụ bổ sung MS SQL Server gồm: SQL Server Browser
SQL Server FulL Text Search SQL Server Integration Services SQL Server Reporting Services SQL Server Analysis Services
Bắt đầu tạm ngưng sử dụng dịch vụ nói cách
5.1 Khởi động dịch vụ MS SQL Server
Để khởi động dịch vụ MS SQL Server, bạn dùng cách
Cách 1: Sử dụng Services.msc
Bước 1: Đi tới hộp thoại Run, gõ services.msc click OK Màn hình
(38)Hình 2.14: Màn hình hiển thị sau thực bước 1
Hình 2.15: Màn hình hiển thị sau thực bước 2 Cách 2: Dùng SQL Server Configuration Manager
Bước 1: Mở trình quản lý bước Start > All Programs > MS SQL Server 2017> Configuration Tools > SQL Server Configuration Manager.
(39)Bước 2: Chọn tên dịch vụ, click chuột phải chọn Start Dịch vụ khởi động thành công hình bên
Hình 2.17: Khởi động thành cơng dịch vụ MS SQL Server 5.2 Dừng dịch vụ MS SQL Server
Cách 1: Dùng Services.msc
Bước 1: Đi tới hộp thoại Run, gõ services.msc click OK Bước - cách khởi động dịch vụ
Bước 2: Để dừng dịch vụ, click chuột phải chọn Stop Dịch vụ vừa chọn dừng lại hình bên
Cách 2: Dùng SQL Server Configuration Manager
Bước 1: Mở Configuration Manager bước bước - cách khởi động dịch vụ
Bước 2: Chọn dịch vụ cần dừng, click chuột phải chọn Stop Dịch vụ chọn dừng lại
(40)(41)Câu 2: Thiết lập mối quan hệ (Relationships), ràn buộc cho bảng sau:
(42)BÀI 3: NGÔN NGỮ ĐỊNH NGHĨA VÀ THAO TÁC DỮ LIỆU Mã bài: 15.3
Giới thiệu câu lệnh T-SQL:
SQL chuẩn bao gồm khoảng 40 câu lệnh Trong hệ quản trị sở liệu khác nhau, câu lệnh có dạng mục đích sử dụng song hệ quản trị sở liệu có số thay đổi Điều đơi dẫn đến cú pháp chi tiết câu lệnh khác hệ quản trị cơ sở liệu khác
Mục tiêu:
⁻ Trình bày cú pháp công dụng phát biểu
⁻ Thực việc truy vấn liệu câu lệnh T-SQL yêu cầu ⁻ Tạo loại khóa: Khóa chính, khóa phụ, khóa ngồi;
⁻ Các ràng buộc liệu: Check, primary,
⁻ Thực thao tác an tồn với máy tính ⁻ Nghiêm túc, tự giác học tập
⁻ Đảm bảo an toàn cho nguời thiết bị Nội dung chính:
1 Tạo sở liệu (Create Database) Mở giao diện Query Analyzer
Gõ cú pháp lệnh: CREATE DATABASE <tên CSDL> Sau bơi đen, bấm F5 để thực thi câu lệnh
Ví dụ:
Create Database QLHocsinh CREATE DATABASE QLBanHang Dùng cú pháp DROP DATABASE <tên CSDL> để xóa CSDL 2 Tạo bảng (Create Table)
(43)USE Northwind
CREATE TABLE Importers(
CompanyID int NOT NULL,
CompanyName varchar(40) NOT NULL, Contact varchar(40) NOT NULL
)
Lệnh Drop sau hồn tồn xóa table khỏi database nghĩa định nghĩa table data bên table biến (khác với lệnh Delete xóa data table tồn tại)
USE Northwind
DROP TABLE Importers 2.1 Kiểu liệu
Chuẩn ANSI/ISO SQL cung cấp kiểu liệu khác để sử dụng sở liệu dựa SQL ngôn ngữ SQL Dựa sở kiểu liệu chuẩn ANSI/ISO SQL cung cấp, hệ quản trị sở liệu thương mại sử dụng dạng liệu khác sản phẩm
Bảng liệt kê số kiểu liệu thông dụng sử dụng SQL
Tên kiểu Mô tả
CHAR (n) Kiểu chuỗi với độ dài cố định
NCHAR (n) Kiếu chuỗi với độ dài cố định hỗ trợ UNICODE VARCHAR (n) Kiểu chuỗi với độ dài xác
NVARCHAR (n) Kiểu chuỗi với độ dài xác hỗ trợ UNICODE INTEGER Số nguyên có giá trị từ -231đến 231 -
INT Như kiểu Integer
(44)BIGINT Số nguyên có giá trị từ - 263đến 263-1 NUMERIC (p,s) Kiểu số với độ xác cố định DECIMAL (p,s) Tương tự kiểu Numeric
FLOAT Số thực có giá trị từ -1.79E+308 đến 1.79E+308 REAL Số thực có giá trị từ -3.40E + 38 đến 3.40E + 38
MONEY Kiểu tiền tệ
BIT Kiểu bit (có giá trị 1)
DATETIME Kiểu ngày (chính xác đến phần trăm giây) SMALLDATETIME Kiểu ngày (chính xác đến phút)
BINARY Dữ liệu nhị phân với độ dài cố định (tối đa 8000 bytes) VARBINARY Dữ liệu nhị phân với độ dài xác (tối đa 8000 bytes) IMAGE Dữ liệu nhị phân với độ dài xác (tối đa 2,147,483,647
bytes)
TEXT Dữ liệu kiếu chuỗi với độ dài lớn (tối đa 2,147,483,647 ký tự)
NTEXT Dữ liệu kiếu chuỗi với độ dài lớn hỗ trợ UNICODE (tối đa 1,073,741,823 ký tự)
Ví dụ : Câu lệnh định nghĩa bảng với kiểu liệu qui định cho cột bảng
CREATE TABLE NHANVIEN
(MANV NVARCHAR(10)NOT NULL, HOTEN NVARCHAR(30)NOT NULL, GIOITINH BIT,
NGAYSINH SMALLDATETIME, NOISINH NCHAR(50),
HSLUONG DECIMAL(4,2), MADV INT)
(45)Một sở liệu phản ánh hệ thống giới thực, giá trị liệu tồn sở liệu khơng xác định Một giá trị không xác định xuất sở liệu số nguyên nhân sau:
Giá trị có tồn
Không xác định giá trị có tồn hay khơng
Tại thời điểm giá trị chưa có có Giá trị bị lỗi tính tốn (tràn số, chia cho khơng, )
Những giá trị không xác định biểu diễn sở liệu quan hệ giá trị NULL Đây giá trị đặc biệt không nên nhầm lẫn với chuỗi rỗng (đối với liệu kiểu chuỗi) hay giá trị không (đối với giá trị kiểu số) Giá trị NULL đóng vai trị quan trọng sở liệu hầu hết hệ quản trị sở liệu quan hệ hỗ trợ việc sử dụng giá trị
Ví dụ 2:
Câu lệnh định nghĩa bảng NHANVIEN với trường MANV (mã nhân viên), HOTEN (họ tên), NGAYSINH (ngày sinh nhân viên), DIENTHOAI (điện thoại) HSLUONG (hệ số lương)
CREATE TABLE nhanvien (
manv NVARCHAR(10) NOT NULL, hoten NVARCHAR(50) NOT NULL, ngaysinh DATETIME NULL
dienthoai NVARCHAR(10) NULL,
hsluong DECIMAL(3,2) DEFAULT (1.92) )
Trong câu lệnh trên, trường MANV HOTEN bảng NHANVIEN không NULL (tức bắt buộc phải có liệu), trường NGAYSINH DIENTHOAI nhận giá trị NULL ta không nhập liệu cho chúng trường HSLUONG nhận giá trị mặc định 1.92 không nhập liệu
3 Sửa bảng (Alter Table)
(46)được sửa đổi thông qua câu lệnh ALTER TABLE Câu lệnh cho phép thực thao tác sau:
Bổ sung cột vào bảng Xoá cột khỏi bảng
Thay đổi định nghĩa cột bảng Xoá bỏ bổ sung ràng buộc cho bảng Cú pháp câu lệnh ALTER TABLE sau:
ALTER TABLE tên_bảng
ADD định_nghĩa_cột |
ALTER COLUMN tên_cột kiểu_dữ_liêu [NULL | NOT NULL]
|
DROP COLUMN tên_cột |
ADD CONSTRAINT tên_ràng_buộc định_nghĩa_ràng_buộc |
DROP CONSTRAINT tên_ràng_buộc
Ví dụ 3:
Các ví dụ minh hoạ cho ta cách sử dụng câu lệnh ALTER TABLE trường hợp
Giả sử ta có hai bảng DONVI NHANVIEN với định nghĩa sau:
CREATE TABLE donvi (
madv INT NOT NULL PRIMARY KEY, tendv NVARCHAR(30) NOT NULL )
CREATE TABLE nhanvien (
manv NVARCHAR(10) NOT NULL, hoten NVARCHAR(30) NOT NULL, ngaysinh DATETIME,
diachi CHAR(30) NOT NULL )
(47)nhằm qui định điện thoại nhân viên chuỗi chữ số: ALTER TABLE nhanvien
ADD
dienthoai NVARCHAR(6)
CONSTRAINT chk_nhanvien_dienthoai
CHECK (dienthoai LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]')
Bổ sung thêm cột MADV vào bảng NHANVIEN: ALTER TABLE nhanvien
ADD
madv INT NULL
Định nghĩa lại kiểu liệu cột DIACHI bảng NHANVIEN cho phép cột chấp nhận giá trị NULL:
ALTER TABLE nhanvien
ALTER COLUMN diachi NVARCHAR(100) NULL Xoá cột ngày sinh khỏi bảng NHANVIEN:
ALTER TABLE nhanvien DROP COLUMN ngaysinh
Định nghĩa khố (ràng buộc PRIMARY KEY) cho bảng NHANVIEN cột MANV:
ALTER TABLE nhanvien ADD
CONSTRAINT pk_nhanvien PRIMARY KEY(manv)
Định nghĩa khố ngồi cho bảng NHANVIEN cột MADV tham chiếu đến cột MADV bảng DONVI:
ALTER TABLE nhanvien ADD
CONSTRAINT fk_nhanvien_madv
FOREIGN KEY(madv) REFERENCES donvi(madv) ON DELETE CASCADE
ON UPDATE CASCADE
Xoá bỏ ràng buộc kiểm tra số điện thoại nhân viên ALTER TABLE nhanvien
(48)Lưu ý:
Nếu bổ sung thêm cột vào bảng bảng có ghi cột cần bổ sung phải cho phép chấp nhận giá trị NULL phải có giá trị mặc định
Muốn xoá cột ràng buộc ràng buộc tham chiếu khố ngồi, ta phải xố ràng buộc khố ngồi trước cho cột khơng cịn ràng buộc khơng cịn tham chiếu khố
Nếu bổ sung thêm ràng buộc cho bảng có liệu ràng buộc cần bổ sung không thoả mãn ghi có bảng câu lệnh ALTER TABLE khơng thực
4 Tồn vẹn liệu (Contrains)
Ràng buộc CHECK sử dụng nhằm định điều kiện hợp lệ liệu Mỗi có thay đổi liệu bảng (INSERT, UPDATE), ràng buộc sử dụng nhằm kiểm tra xem liệu có hợp lệ hay không
Ràng buộc CHECK khai báo theo cú pháp sau: [CONSTRAINT tên_ràng_buộc]
CHECK (điều_kiện)
Trong đó, điều_kiện biểu thức logic tác động lên cột nhằm qui định giá trị khuôn dạng liệu cho phép Trên bảng cột có nhiều ràng buộc CHECK
Ví dụ 4:
Câu lệnh tạo bảng DIEMTOTNGHIEP qui định giá trị cột DIEMVAN DIEMTOAN phải lớn nhỏ 10
CREATE TABLE diemtotnghiep (
hoten NVARCHAR(30) NOT NULL, ngaysinh DATETIME,
(49)CHECK(diemvan>=0 AND diemvan<=10), diemtoan DECIMAL(4,2)
CONSTRAINT chk_diemtoan
CHECK(diemtoan>=0 AND diemtoan<=10), )
Như vậy, với định nghĩa bảng DIEMTOTNGHIEP câu lệnh hợp lệ:
INSERT INTO diemtotnghiep(hoten,diemvan,diemtoan) VALUES('Le Thanh Hoang',9.5,2.5)
INSERT INTO diemtotnghiep(hoten,diemvan) VALUES('Hoang Thi Mai',2.5)
Cịn câu lệnh khơng hợp lệ:
INSERT INTO diemtotnghiep(hoten,diemvan,diemtoan) VALUES('Tran Van Hanh',6,10.5)
do cột DIEMTOAN nhận giá trị 10.5 không thoả mãn điều kiện ràng buộc
Trong ví dụ trên, ràng bc định phần khai báo cột Thay định ràng buộc cột, ta định ràng buộc mức bảng cách khai báo ràng buộc sau khai báo xong cột bảng
4.1 Ràng buộc PRIMARY KEY
Ràng buộc PRIMARY KEY sử dụng để định nghĩa khố bảng Khố bảng một tập nhiều cột mà giá trị chúng bảng Hay nói cách khác, giá trị khố giúp cho ta xác định dòng (bản ghi) bảng liệu Mỗi bảng có khố thân khố khơng chấp nhận giá trị NULL Ràng buộc PRIMARY KEY sở cho việc đảm bảo tính tồn vẹn thực thể tồn vẹn tham chiếu
Để khai báo ràng buộc PRIMARY KEY, ta sử dụng cú pháp sau:
[CONSTRAINT tên_ràng_buộc]
(50)Nếu khố bảng bao gồmđúng cột ràng buộc PRIMARY KEY định mức cột, ta không cần thiết phải định danh sách cột sau từ khoá PRIMARY KEY Tuy nhiên, việc khai báo khố tiến hành mức bảng (sử dụng số lượng cột tham gia vào khoá từ hai trở lên) bắt buộc phải định danh sách cột sau từ khóa PRIMARY KEY tên cột phân cách dấu phẩy
Ví dụ 5:
Câu lệnh định nghĩa bảng SINHVIEN với khố MASV CREATE TABLE sinhvien
(
Masv NVARCHAR(10) CONSTRAINT pk_sinhvien_masv PRIMARY KEY,
hodem NVARCHAR(25) NOT NULL , ten NVARCHAR(10) NOT NULL , ngaysinh DATETIME,
gioitinh BIT,
noisinh NVARCHAR(255), malop NVARCHAR(10) )
Với bảng vừa tạo câu lệnh trên, ta thực câu lệnh: INSERT INTO sinhvien(masv,hodem,ten,gioitinh,malop) VALUES('0261010001','Lê Hoàng Phương','Anh',0,'C26101')
Một ghi bổ sung vào bảng Nhưng ta thực tiếp câu lệnh:
INSERT INTO sinhvien(masv,hodem,ten,gioitinh,malop) VALUES('0261010001','Lê Huy','Đan',1,'C26101')
thì câu lệnh bị lỗi trùng giá trị khoá với ghi có Ví dụ 6:
Câu lệnh tạo bảng DIEMTHI với khố tập bao gồm hai cột MAMONHOC MASV
CREATE TABLE diemthi (
(51)diemlan1 NUMERIC(4, 2), diemlan2 NUMERIC(4, 2),
CONSTRAINT pk_diemthi PRIMARY KEY(mamonhoc,masv) )
Lưu ý:
Mỗi bảng có nhiều ràng buộc PRIMARY KEY Một khố bao gồm nhiều cột không vượt 16 cột 4.2 Ràng buộc UNIQUE
Trên bảng có nhiều khóa có nhiều cột tập cột có tính chất khố chính, tức giá trị chúng bảng Tập nhiều cột có giá trị khơng chọn làm khố gọi khố phụ (khoá dự tuyển) bảng Như vậy, bảng có nhiều khố có nhiều khố phụ
Ràng buộc UNIQUE sử dụng câu lệnh CREATE TABLE để định nghĩa khoá phụ cho bảng khai báo theo cú pháp sau đây:
[CONSTRAINT tên_ràng_buộc]
UNIQUE [(danh_sách_cột)] Ví dụ 7:
Giả sử ta cần định nghĩa bảng LOP với khố cột MALOP đồng thời lại không cho phép lớp khác trùng tên lớp với nhau, ta sử dụng câu lệnh sau:
CREATE TABLE lop (
malop NVARCHAR(10) NOT NULL, tenlop NVARCHAR(30) NOT NULL, khoa SMALLINT NULL,
hedaotao NVARCHAR(25) NULL, namnhaphoc INT
makhoa NVARCHAR(5),
CONSTRAINT pk_lop PRIMARY KEY (malop),
CONSTRAINT unique_lop_tenlop UNIQUE(tenlop) )
(52)Các bảng sở liệu có mối quan hệ với Những mối quan hệ biểu diễn cho quan hệ đối tượng giới thực Về mặt liệu, mối quan hệ đảm bảo thông qua việc địi hỏi có mặt giá trị liệu bảng phải phụ thuộc vào tồn giá trị liệu bảng khác
Ràng buộc FOREIGN KEY sử dụng định nghĩa bảng liệu nhằm tạo nên mối quan hệ bảng sở liệu Một hay tập cột bảng gọi khố ngoại, tức có ràng buộc FOREIGN KEY, giá trị xác định từ khố (PRIMARY KEY) khố phụ (UNIQUE) bảng liệu khác
Hình cho ta thấy mối quan hệ bảng DIEMTHI, SINHVIEN MONHOC Trong bảng DIEMTHI, MASV khoá tham chiếu đến cột MASV bảng SINHVIEN MAMONHOC khố ngồi tham chiếu đến cột MAMONHOC bảng MONHOC
Hình 3.1: mối quan hệ bảng DIEMTHI, SINHVIEN MONHOC
(53)của bảng SINHVIEN giá trị cột MAMONHOC phải tồn ghi bảng MONHOC
Ràng buộc FOREIGN KEY định nghĩa theo cú pháp đây:
[CONSTRAINT tên_ràng_buộc] FOREIGN KEY [(danh_sách_cột)] REFERENCES
tên_bảng_tham_chiếu(danh_sách_cột_tham_chiếu) [ON DELETE CASCADE | NO ACTION | SET NULL | SET DEFAULT]
[ON UPDATE CASCADE | NO ACTION | SET NULL | SET DEFAULT]
Việc định nghĩa ràng buộc FOREIGN KEY bao gồm yếu tố sau:
Tên cột danh sách cột bảng định nghĩa tham gia vào khố ngồi
Tên bảng tham chiếu khố ngồi danh sách cột tham chiếu đến bảng tham chiếu
Cách thức xử lý ghi bảng định nghĩa trường hợp ghi tham chiếu bảng tham chiếu bị xoá (ON DELETE) hay cập nhật (ON UPDATE) SQL chuẩn đưa cách xử lý:
- CASCADE: Tự động xoá (cập nhật) ghi tham chiếu bị xoá (cập nhật)
- NO ACTION: (Mặc định) Nếu ghi bảng tham chiếu tham chiếu ghi bảng định nghĩa bàn ghi khơng phép xố cập nhật (đối với cột tham chiếu)
- SET NULL: Cập nhật lại khố ngồi ghi thành giá trị NULL (nếu cột cho phép nhận giá trị NULL)
- SET DEFAULT: Cập nhật lại khố ngồi ghi nhận giá trị mặc định (nếu cột có qui định giá trị mặc định)
Ví dụ 8:
(54)CREATE TABLE diemthi (
mamonhoc NVARCHAR(10) NOT NULL , masv NVARCHAR(10) NOT NULL , diemlan1 NUMERIC(4, 2),
diemlan2 NUMERIC(4, 2),
CONSTRAINT pk_diemthi PRIMARY KEY(mamonhoc,masv), CONSTRAINT fk_diemthi_mamonhoc
FOREIGN KEY(mamonhoc)
REFERENCES monhoc(mamonhoc) ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT fk_diemthi_masv FOREIGN KEY(masv)
REFERENCES sinhvien(masv) ON DELETE CASCADE
ON UPDATE CASCADE )
Lưu ý:
Cột tham chiếu bảng tham chiếu phải khố (hoặc khoá phụ)
Cột tham chiếu phải có kiểu liệu độ dài với cột tương ứng khóa ngồi
Bảng tham chiếu phải định nghĩa trước Do đó, bảng có mối quan hệ vịng, ta khơng thể định nghĩa ràng buộc FOREIGN KEY câu lệnh CREATE TABLE mà phải định nghĩa thông qua lệnh ALTER TABLE
5 Thêm liệu (Insert)
Dữ liệu bảng thể dạng dòng (bản ghi) Để bổ sung thêm dòng liệu vào bảng, ta sử dụng câu lệnh INSERT Hầu hết hệ quản trị CSDL dựa SQL cung cấp cách để thực thao tác bổ sung liệu cho bảng:
(55) Bổ sung nhiều dòng liệu cách truy xuất liệu từ bảng liệu khác
5.1 Bổ sung dòng liệu với lệnh INSERT
Để bổ sung dòng liệu vào bảng, ta sử dụng câu lệnh INSERT với cú pháp sau:
INSERT INTO tên_bảng[(danh_sách_cột)]
VALUES(danh_sách_trị)
Trong câu lệnh INSERT, danh sách cột sau tên bảng không cần thiết phải định giá trị trường ghi định đầy đủ danh sách trị
Trong trường hợp này, thứ tự giá trị danh sách trị phải với số lượng trường bảng cần bổ sung liệu phải tuân theo thứ tự trường bảng định nghĩa
Ví dụ 9:
Câu lệnh bổ sung thêm dòng liệu vào bảng KHOA INSERT INTO khoa
VALUES(‘DHT10’,’Khoa Luật’,’054821135’)
Trong trường hợp nhập giá trị cho số cột bảng, ta phải định danh sách cột cần nhập liệu sau tên bảng Khi đó, cột khơng nhập liệu nhận giá trị mặc định (nếu có) nhận giá trị NULL (nếu cột cho phép chấp nhận giá trị NULL) Nếu cột giá trị mặc định khơng chấp nhận giá trị NULL mà không đuợc nhập liệu, câu lệnh bị lỗi
Ví dụ 10:
Câu lệnh bổ sung ghi cho bảng SINHVIEN
INSERT INTO sinhvien(masv,hodem,ten,gioitinh,malop) VALUES(‘0241020008’,‘Nguyễn Cơng’,’Chính’,1,’C24102’) Câu lệnh cịn viết sau:
INSERT INTO sinhvien
(56)NULL,1,NULL,’C24102’)
5.2 Bổ sung nhiều dòng liệu từ bảng khác
Một cách sử dụng khác câu lệnh INSERT sử dụng để bổ sung nhiều dòng liệu vào bảng, dòng liệu lấy từ bảng khác thông qua câu lệnh SELECT Ở cách này, giá trị liệu bổ sung vào bảng khơng định tường minh mà thay vào câu lệnh SELECT truy vấn liệu từ bảng khác
Cú pháp câu lệnh INSERT có dạng sau:
INSERT INTO tên_bảng[(danh_sách_cột)]
câu_lệnh_SELECT Ví dụ 11:
Giả sử ta có bảng LUUSINHVIEN bao gồm trường HODEM, TEN, NGAYSINH Câu lệnh bổ sung vào bảng LUUSINHVIEN dịng liệu có từ câu truy vấn SELECT:
INSERT INTO luusinhvien
SELECT hodem,ten,ngaysinh FROM sinhvien
WHERE noisinh like ‘%Huế%’
Khi bổ sung liệu theo cách cần lưu ý số điểm sau:
Kết câu lệnh SELECT phải có số cột với số cột định bảng đích phải tương thích kiểu liệu
Trong câu lệnh SELECT sử dụng mệnh đề COMPUTE BY 6 Xóa (Delete)
6.1 Xố liệu bảng
Câu lệnh DELETE Cú pháp câu lệnh sau: DELETE FROM tên_bảng
[FROM danh_sách_bảng]
(57)Trong câu lệnh này, tên bảng cần xoá liệu định sau DELETE FROM
Mệnh đề WHERE câu lệnh sử dụng để định điều kiện dòng liệu cần xố Nếu câu lệnh DELETE khơng có mệnh đề WHERE tồn dịng liệu bảng bị xố
Ví dụ 12:
Câu lệnh xoá khỏi bảng SINHVIEN sinh viên sinh Huế DELETE FROM sinhvien
WHERE noisinh LIKE ‘%Huế%’
6.2 Xoá liệu điều kiện liên quan đến nhiều bảng
Nếu điều kiện câu lệnh DELETE liên quan đến bảng bảng cần xóa liệu, ta phải sử dụng thêm mệnh đề FROM sau danh sách tên bảng Trong trường hợp này, mệnh đề WHERE ta định thêm điều kiện nối bảng
Ví dụ 13:
Câu lệnh xoá khỏi bảng SINHVIEN sinh viên lớp Tin K24 DELETE FROM sinhvien
FROM lop
WHERE lop.malop=sinhvien.malop AND tenlop='Tin K24' 6.3 Sử dụng truy vấn câu lệnh DELETE
Một câu lệnh SELECT lồng vào mệnh đề WHERE câu lệnh DELETE để làm điều kiện cho câu lệnh tương tự câu lệnh UPDATE
Ví dụ 14:
Câu lệnh xố khỏi bảng LOP lớp khơng có sinh viên học DELETE FROM lop
WHERE malop NOT IN (SELECT DISTINCT malop FROM sinhvien)
(58)Câu lệnh DELETE không định điều kiện dịng liệu cần xố mệnh đề WHERE xố tồn liệu bảng Thay sử dụng câu lệnh DELETE trường hợp này, ta sử dụng câu lệnh TRUNCATE có cú pháp sau:
TRUNCATE TABLE tên_bảng Ví dụ 15:
Câu lệnh sau xố tồn liệu bảng diemthi:
DELETE FROM diemthi có tác dụng tương tự với câu lệnh
TRUNCATE TABLE diemthi 7 Cập nhật (Update)
Câu lệnh UPDATE SQL sử dụng để cập nhật liệu bảng
Câu lệnh có cú pháp sau: UPDATE tên_bảng
SET tên_cột = biểu_thức
[, , tên_cột_k = biểu_thức_k] [FROM danh_sách_bảng]
[WHERE điều_kiện]
Sau UPDATE tên bảng cần cập nhật liệu Một câu lệnh UPDATE cập nhật liệu cho nhiều cột cách định danh sách tên cột biểu thức tương ứng sau từ khoá SET Mệnh đề WHERE câu lệnh UPDATE thường sử dụng để định dòng liệu chịu tác động câu lệnh (nếu không định, phạm vi tác động câu lệnh hiểu toàn dịng bảng)
Ví dụ 16:
(59)UPDATE monhoc SET sodvht = WHERE sodvht = 7.1 Sử dụng cấu trúc CASE câu lệnh UPDATE
Cấu trúc CASE sử dụng biểu thức cần phải đưa định khác giá trị biểu thức
Ví dụ 17:
Giả sử ta có bảng NHATKYPHONG sau
Sau thực câu lệnh:
UPDATE nhatkyphong
SET tienphong=songay*CASE WHEN loaiphong='A' THEN 100 WHEN loaiphong='B' THEN 70
ELSE 50 END
Dữ liệu bảng là:
7.2 Điều kiện cập nhật liệu liên quan đến nhiều bảng
(60)các bảng
Ví dụ 18: Giả sử ta có hai bảng MATHANG NHATKYBANHANG sau:
Câu lệnh cập nhật giá trị trường THANHTIEN bảng NHATKYBANHANG theo công thức THANHTIEN = SOLUONG × GIA
UPDATE nhatkybanhang
SET thanhtien = soluong*gia FROM mathang
WHERE nhatkybanhang.mahang = mathang.mahang 7.3 Câu lệnh UPDATE với truy vấn
Tương tự câu lệnh SELECT, truy vấn sử dụng mệnh đề WHERE câu lệnh UPDATE nhằm định điều kiện dòng liệu cần cập nhật liệu
Ví dụ 19: Câu lệnh viết sau:
UPDATE nhatkybanhang
SET thanhtien = soluong*gia FROM mathang
WHERE mathang.mahang =(SELECT mathang.mahang FROM mathang
WHERE mathang.mahang=nhatkybanhang.mahang) 8 Chọn lọc (Select)
(61)này cung cấp khả thực thao tác truy vấn thống kê liệu phức tạp khác
Cú pháp chung câu lệnh SELECT có dạng:
SELECT [ALL | DISTINCT][TOP n] danh_sách_chọn [INTO tên_bảng_mới]
FROM danh_sách_bảng/khung_nhìn [WHEREđiều_kiện]
[GROUP BY danh_sách_cột] [HAVING điều_kiện]
[ORDER BY cột_sắp_xếp]
[COMPUTE danh_sách_hàm_gộp [BY danh_sách_cột]]
Điều cần lưu ý câu lệnh thành phần câu lệnh SELECT sử dụng phải tuân theo thứ tự cú pháp Nếu không, câu lệnh xem không hợp lệ
Câu lệnh SELECT sử dụng để tác động lên bảng liệu kết câu lệnh hiển thị dạng bảng, tức tập hợp dòng cột (ngoại trừ trường hợp sử dụng câu lệnh SELECT với mệnh đề COMPUTE) Ví dụ 20:
Kết câu lệnh sau cho biết mã lớp, tên lớp hệ đào tạo lớp có
SELECT malop,tenlop,hedaotao FROM lop
(62)Mệnh đề FROM câu lệnh SELECT sử dung nhằm định bảng khung nhìn cần truy xuất liệu Sau FROM danh sách tên bảng khung nhìn tham gia vào truy vấn, tên bảng khung nhìn phân cách dấu phẩy
Ví dụ 21:
Câu lệnh hiển thị danh sách khoa trường
SELECT * FROM khoa Kết câu lệnh sau:
Ta sử dụng bí danh cho bảng hay khung nhìn câu lệnh SELECT Bí danh gán mệnh đề FROM cách định bí danh sau tên bảng
Ví dụ 22:câu lệnh sau gán bí danh a cho bảng khoa
SELECT * FROM khoa a
8.2 Danh sách chọn câu lệnh SELECT Danh sách chọn câu
(63)câu lệnh SELECT bao gồm trường hợp sau: a Chọn tất cột bảng
Khi cần hiển thị tất trường bảng, sử dụng ký tự * danh sách chọn thay phải liệt kê danh sách tất cột Trong trường hợp này, cột hiển thị kết truy vấn tuân theo thứ tự mà chúng tạo bảng định nghĩa
Ví dụ 23:Câu lệnh
SELECT * FROM lop Kết câu lệnh sau:
b Tên cột danh sách chọn
Trong trường hợp cần định cụ thể cột cần hiển thị kết truy vấn, ta định danh sách tên cột danh sách chọn Thứ tự cột kết truy vấn tuân theo thứ tự trường danh sách chọn
Ví dụ 24: Câu lệnh
SELECT malop,tenlop,namnhaphoc,khoa FROM lop
(64)Lưu ý: Nếu truy vấn thực nhiều bảng/khung nhìn các bảng/khung nhìn có trường trùng tên tên trường xuất danh sách chọn phải viết dạng: tên_bảng.tên_trường
Ví dụ 25:
SELECT malop, tenlop, lop.makhoa, tenkhoa FROM lop, khoa
WHERE lop.malop = khoa.makhoa c Thay đổi tiêu đề cột
Trong kết truy vấn, tiêu đề cột mặc định tên trường tương ứng bảng Tuy nhiên, để tiêu đề trở nên thân thiện hơn, ta đổi tên tiêu đề cột Để đặt tiêu đề cho cột đó, ta sử dụng cách viết:
tiêu_đề_cột = tên_trường
hoặc tên_trường AS tiêu_đề_cột
hoặc tên_trường tiêu_đề_cột
Ví dụ 26:
SELECT 'Mã lớp'= malop,tenlop 'Tên lớp',khoa AS 'Khoá' FROM lop
(65)d.Sử dụng cấu trúc CASE danh sách chọn
Cấu trúc CASE sử dụng danh sách chọn nhằm thay đổi kết truy vấn tuỳ thuộc vào trường hợp khác Cấu trúc có cú pháp sau:
CASE biểu_thức
WHEN biểu_thức_kiểm_tra THEN kết_quả [ ]
[ELSE kết_quả_của_else] END
hoặc: CASE
WHEN điều_kiện THEN kết_quả
[ ]
[ELSE kết_quả_của_else] END
Ví dụ 27:
Để hiển thị mã, họ tên giới tính (nam nữ) sinh viên, ta sử dụng câu lệnh
SELECT masv,hodem,ten, CASE gioitinh
WHEN THEN 'Nam' ELSE 'Nữ'
(66)SELECT masv,hodem,ten, CASE
WHEN gioitinh=1 THEN 'Nam' ELSE 'Nữ'
END AS gioitinh FROM sinhvien
Kết hai câu lệnh có dạng sau:
e Hằng biểu thức danh sách chọn
Ngoài danh sách trường, danh sách chọn câu lệnh SELECT cịn sử dụng biểu thức Mỗi biểu thức danh sách chọn trở thành cột kết truy vấn
Ví dụ 28: Câu lệnh cho biết tên số tiết môn học SELECT tenmonhoc,sodvht*15 AS sotiet
(67)Nếu danh sách chọn có xuất giá trị giá trị xuất cột kết truy vấn tất dòng
Ví dụ 29: Câu lệnh
SELECT tenmonhoc,'Số tiết: ',sodvht*15 AS sotiet FROM monhoc
Kết hai câu lệnh sau:
f Loại bỏ dòng liệu trùng kết truy vấn
(68)Ví dụ 30: Hai câu lệnh SELECT khoa FROM lop và:
SELECT DISTINCT khoa FROM lop Kết hai câu lệnh sau:
g.Giới hạn số lượng dòng kết truy vấn
Kết truy vấn hiển thị thường tất dòng liệu truy vấn Trong trường hợp cần hạn chế số lượng dòng xuất kết truy vấn, ta định thêm mệnh đề TOP trước danh sách chọn câu lệnh SELECT
Ví dụ 31:
Câu lệnh hiển thị họ tên ngày sinh sinh viên danh sách
SELECT TOP hodem,ten,ngaysinh FROM sinhvien
Ngồi cách định cụ số lượng dịng cần hiển thị kết truy vấn, ta định số lượng dòng cần hiển thị theo tỷ lệ phần trăm cách sử dụng thêm từ khoá PERCENT ví dụ
(69)Câu lệnh hiển thị họ tên ngày sinh 10% số lượng sinh viên có bảng SINHVIEN
SELECT TOP 10 PERCENT hodem,ten,ngaysinh FROM sinhvien
8.3. Chỉ định điều kiện truy vấn liệu
Mệnh đề WHERE câu lệnh SELECT sử dụng nhằm xác định điều kiện việc truy xuất liệu Sau mệnh đề WHERE biểu thức logic dòng liệu thoả mãn điều kiện định hiển thị kết truy vấn
Ví dụ 32:
Câu lệnh hiển thị danh sách mơn học có số đơn vị học trình lớn SELECT * FROM monhoc
WHERE sodvht>3
Kết hai câu lệnh sau:
Trong mệnh đề WHERE thường sử dụng:
Các toán tử kết hợp điều kiện (AND, OR) Các toán tử so sánh
Kiểm tra giới hạn liệu (BETWEEN/ NOT BETWEEN) Danh sách
Kiểm tra khuôn dạng liệu Các giá trị NULL
a. Các toán tử so sánh
Toán tử Ý nghĩa
(70)> Lớn
< Nhỏ
>= Lớn <= Nhỏ <> Khác
!> Khơng lớn !< Khơng nhỏ Ví dụ 33: Câu lệnh
SELECT masv,hodem,ten,ngaysinh FROM sinhvien
WHERE (ten='Anh')
AND (YEAR(GETDATE())-YEAR(ngaysinh)<=20)
Cho biết mã, họ tên ngày sinh sinh viên có tên Anh có tuổi nhỏ 20
b.Kiểm tra giới hạn liệu
Để kiểm tra xem giá trị liệu nằm (ngoài) khoảng đó, ta sử dụng tốn tử BETWEEN (NOT BETWEEN) sau:
Cách sử dụng Ý nghĩa
giá_trị BETWEEN a AND b a ≤ giá_trị ≤ b giá_trị NOT BETWEEN a AND
b
(giá_trị < a) AND (giá_trị>b) Ví dụ 34:
Câu lệnh cho biết họ tên tuổi sinh viên có tên Bình có tuổi nằm khoảng từ 20 đến 22
SELECT hodem,ten,year(getdate())-year(ngaysinh) AS tuoi FROM sinhvien
(71)c Danh sách (IN NOT IN)
Từ khoá IN sử dụng ta cần định điều kiện tìm kiếm liệu cho câu lệnh SELECT danh sách giá trị Sau IN (hoặc NOT IN) danh sách giá trị câu lệnh SELECT khác
Ví dụ 35:
Để biết danh sách mơn học có số đơn vị học trình 2, 5, thay sử dụng câu lệnh
SELECT * FROM monhoc
WHERE sodvht=2 OR sodvht=4 OR sodvht=5 ta sử dụng câu lệnh
SELECT * FROM monhoc WHERE sodvht IN (2,4,5) d Toán tử LIKE ký tự đại diện
Từ khoá LIKE (NOT LIKE) sử dụng câu lệnh SELECT nhằm mô tả khuôn dạng liệu cần tìm kiếm Chúng thường kết hợp với ký tự đại diện sau đây:
Ký tự đại
diện Ý nghĩa
% Chuỗi ký tự gồm không nhiều ký tự _ Ký tự đơn
[] Ký tự đơn giới hạn định (ví dụ [a-f]) hay tập (ví dụ [abcdef])
[^] Ký tự đơn không nằm giới hạn định ( ví dụ [^a-f] hay tập (ví dụ [^abcdef])
Ví dụ 36: Câu lệnh
SELECT hodem,ten FROM sinhvien WHERE hodem LIKE 'Lê%'
(72)Câu lệnh:
SELECT hodem,ten FROM sinhvien
WHERE hodem LIKE 'Lê%' AND ten LIKE '[AB]%' Có kết là:
e Giá trị NULL
Dữ liệu cột cho phép NULL nhận giá trị NULL trường hợp sau:
Nếu liệu nhập cho cột khơng có mặc định cho cột hay kiểu liệu cột
Người sử dụng trực tiếp đưa giá trị NULL vào cho cột
Một cột có kiểu liệu kiểu số chứa giá trị NULL giá trị định gây tràn số
Trong mệnh đề WHERE, để kiểm tra giá trị cột có giá trị NULL hay khơng, ta sử dụng cách viết:
WHERE tên_cột IS NULL hoặc:
WHERE tên_cột IS NOT NULL
8.4.Tạo bảng liệu từ kết câu lệnh SELECT
(73)liệu xác định từ kết truy vấn Bảng tạo có số cột số cột định danh sách chọn số dòng số dòng kết truy vấn
Ví dụ 37:
Câu lệnh truy vấn liệu từ bảng SINHVIEN tạo bảng TUOISV bao gồm trường HODEM, TEN TUOI
SELECT hodem,ten,YEAR(GETDATE())-YEAR(ngaysinh) AS tuoi
INTO tuoisv FROM sinhvien
Lưu ý: Nếu danh sách chọn có biểu thức biểu thức phải đặt tiêu đề
8.5. Sắp xếp kết truy vấn
Mặc định, dòng liệu kết câu truy vấn tuân theo thứ tự chúng bảng liệu xếp theo mục (nếu bảng có mục)
Trong trường hợp muốn liệu xếp theo chiều tăng giảm giá trị nhiều trường, ta sử dụng thêm mệnh đề ORDER BY câu lệnh SELECT; Sau ORDER BY danh sách cột cần xếp (tối đa 16 cột) Dữ liệu xếp theo chiều tăng (ASC) giảm (DESC), mặc định xếp theo chiều tăng
Ví dụ 38: Câu lệnh hiển thị danh sách môn học xếp theo chiều giảm dần số đơn vị học trình
SELECT * FROM monhoc ORDER BY sodvht DESC
Nếu sau ORDER BY có nhiều cột việc xếp liệu ưu tiên theo thứ tự từ trái qua phải
(74)SELECT hodem,ten,gioitinh, YEAR(GETDATE())-YEAR(ngaysinh) AS tuoi
FROM sinhvien WHERE ten='Bình'
ORDER BY gioitinh,tuoi
Có kết là:
Thay định tên cột sau ORDER BY, ta định số thứ tự cột cấn xếp Câu lệnh ví dụ viết lại sau:
SELECT hodem,ten,gioitinh, YEAR(GETDATE())-YEAR(ngaysinh) AS tuoi
FROM sinhvien WHERE ten='Bình' ORDER BY 3, 8.6 Phép hợp
Phép sử dụng trường hợp ta cần gộp kết hai hay nhiều truy vấn thành tập kết SQL cung cấp toán tử UNION để thực phép hợp Cú pháp sau
Câu_lệnh_1
UNION [ALL] Câu_lệnh_2
[UNION [ALL] Câu_lệnh_3]
[UNION [ALL] Câu_lệnh_n]
[ORDER BY cột_sắp_xếp]
[COMPUTEdanh_sách_hàm_gộp [BY danh_sách_cột]]
Trong
(75)SELECT danh_sách_cột [INTO tên_bảng_mới]
[FROM danh_sách_bảng|khung_nhìn]
[WHERE điều_kiện]
[GROUP BY danh_sách_cột]
[HAVING điều_kiện]
và Câu_lệnh_i (i = 2, ,n) có dạng SELECT danh_sách_cột
[FROM danh_sách_bảng|khung_nhìn]
[WHERE điều_kiện]
[GROUP BY danh_sách_cột]
[HAVING điều_kiện]
Ví dụ 40: Giả sử ta có hai bảng Table1 Table2 sau:
Câu lệnh
SELECT A,B FROM Table1 UNION
SELECT D,E FROM table2 Cho kết sau:
(76)ALL truy vấn thành phần
Ví dụ 41: Câu lệnh
SELECT A,B FROM Table1 UNION ALL
SELECT D,E FROM table2 Cho kết sau:
Khi sử dụng toán tử UNION để thực phép hợp, ta cần ý nguyên tắc sau:
Danh sách cột truy vấn thành phần phải có số lượng
Các cột tương ứng tất bảng, tập cột sử dụng thân truy vấn thành phần phải kiểu liệu
Các cột tương ứng thân truy vấn thành phần câu lệnh UNION phải xuất theo thứ tự Nguyên nhân phép hợp so sánh cột cột theo thứ tự cho truy vấn
Khi kiểu liệu khác kết hợp với câu lệnh UNION, chúng chuyển sang kiểu liệu cao (nếu được)
Tiêu đề cột kết phép hợp tiêu đề cột định truy vấn
(77)từ kết phép hợp
Mệnh đề ORDER BY COMPUTE dùng để xếp kết truy vấn tính tốn giá trị thống kê sử dụng cuối câu lệnh UNION Chúng không sử dụng truy vấn thành phần
Mệnh đề GROUP BY HAVING sử dụng thân truy vấn thành phần Chúng không phép sử dụng để tác động lên kết chung phép hợp
Phép tốn UNION sử dụng bên câu lệnh INSERT
Phép tốn UNION khơng sử dụng câu lệnh CREATE
VIEW
8.7 Phép nối
Khi cần thực yêu cầu truy vấn liệu từ hai hay nhiều bảng, ta phải sử dụng đến phép nối Một câu lệnh nối kết hợp dòng liệu bảng khác lại theo nhiều điều kiện hiển thị chúng kết truy vấn
(78)Bảng LOP
Bảng KHOA
Giả sử ta cần biết mã lớp tên lớp lớp thuộc Khoa Công nghệ Thông tin, ta phải làm sau:
Chọn dịng bảng KHOA có tên khoa Khoa Cơng nghệ Thơng tin, từ xác định mã khoa (MAKHOA) DHT02 Tìm kiếm bảng LOP dịng có giá trị trường
(79)Như vậy, để thực yêu cầu truy vấn liệu trên, ta phải thực phép nối hai bảng KHOA LOP với điều kiện nối MAKHOA KHOA với MAKHOA LOP Câu lệnh viết sau:
SELECT malop,tenlop FROM khoa,lop
WHERE khoa.makhoa = lop.makhoa AND tenkhoa='Khoa Công nghệ Thông tin'
8.7.1 Sử dụng phép nối
Phép sở để thực yêu cầu truy vấn liệu liên quan đến nhiều bảng Một câu lệnh nối thực lấy dòng liệu bảng tham gia truy vấn, so sánh giá trị dòng nhiều cột định điều kiện nối kết hợp dòng thoả mãn điều kiện thành dòng kết truy vấn
Để thực phép nối, cần phải xác định yếu tố sau: Những cột cần hiển thị kết truy vấn
Những bảng có tham gia vào truy vấn
Điều kiện để thực phép nối bảng liệu
(80)a Danh sách chọn phép nối
Một câu lệnh nối bắt đầu với từ khóa SELECT Các cột định tên sau từ khoá SELECT cột hiển thị kết truy vấn Việc sử dụng tên cột danh sách chọn là:
Tên số cột bảng có tham gia vào truy vấn Nếu tên cột bảng trùng tên tên cột phải viết dạng tên_bảng.tên_cột
Dấu (*) sử dụng danh sách chọn cần hiển thị tất cột bảng tham gia truy vấn
Trong trường hợp cần hiển thị tất cột bảng đó, ta sử dụng cách viết: tên_bảng.*
b.Mệnh đề FROM phép nối
Sau mệnh đề FROM câu lệnh nối danh sách tên bảng (hay khung nhìn) tham gia vào truy vấn Nếu ta sử dụng dấu * danh sách chọn thứ tự củacác bảng liệt kê sau FROM ảnh hưởng đến thứ tự cột hiển thị kết truy vấn
c Mệnh đề WHERE phép nối
Khi hai hay nhiều bảng nối với nhau, ta phải định điều kiện để thực phép nối sau mệnh đề WHERE Điều kiện nối biểu diễn dạng biểu thức logic so sánh giá trị liệu cột bảng tham gia truy vấn
Các toán tử so sánh sử dụng để xác định điều kiện nối
Phép toán Ý nghĩa
= Bằng
> Lớn < Nhỏ
>= Lớn <= Nhỏ <> Khác
(81)Ví dụ 42:
Câu lệnh hiển thị danh sách sinh viên với thông tin: mã sinh viên, họ tên, mã lớp, tên lớp tên khoa
SELECT masv,hodem,ten,sinhvien.malop,tenlop,tenkhoa FROM sinhvien,lop,khoa
WHERE sinhvien.malop = lop.malop AND lop.makhoa=khoa.makhoa
Trong câu lệnh trên, bảng tham gia vào truy vấn bao gồm SINHVIEN, LOP KHOA Điều kiện để thực phép nối bảng bao gồm hai điều kiện:
sinhvien.malop = lop.malop
lop.malop = khoa.malop
Điều kiện nối bảng câu lệnh điều kiện khoá ngồi khố bảng có mối quan hệ với Hay nói cách khác, điều kiện phép nối xác định dựa vào mối quan hệ bảng sở liệu
8.7.2 Các loại phép nối
a. Phép nối phép nối tự nhiên
Một phép nối (equi-join) phép nối giá trị cột sử dụng để nối so sánh với dựa tiêu chuẩn tất cột bảng tham gia nối đưa kết
Ví dụ 43:
Câu lệnh thực phép nối hai bảng LOP KHOA SELECT *
FROM lop,khoa
WHERE lop.makhoa=khoa.makhoa
(82)trong kết phép nối (cột makhoa bảng khoa cột makhoa bảng lop) không cần thiết Ta loại bỏ bớt cột trùng tên kết truy vấn cách định danh sách cột cần hiển thị danh sách chọn câu lệnh
Một dạng đặc biệt phép nối sử dụng nhiều phép nối tự nhiên (natural-join) Trong phép nối tự nhiên, điều kiện nối hai bảng điều kiện khố ngồi khố hai bảng; Và danh sách chọn câu lệnh giữ lại cột hai cột tham gia vào điều kiện phép nối
Ví dụ 44:
Để thực phép nối tự nhiên, câu lệnh ví dụ 2.25 viết lại sau: SELECT malop,tenlop,khoa,hedaotao,namnhaphoc, siso,lop.makhoa,tenkhoa,dienthoai
FROM lop,khoa
WHERE lop.makhoa=khoa.makhoa viết dạng ngắn gọn hơn:
SELECT lop.*,tenkhoa,dienthoai FROM lop,khoa
WHERE lop.makhoa=khoa.makhoa b Phép nối với điều kiện bổ sung
Trong câu lệnh nối, điều kiện phép nối định mệnh đề WHERE cịn định điều kiện tìm kiếm liệu khác (điều kiện chọn)
Thông thường, điều kiện kết hợp với điều kiện nối thơng qua tốn tử AND
Ví dụ 45:
Câu lệnh hiển thị họ tên ngày sinh sinh viên Khoa Công nghệ Thông tin
(83)WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa
c Phép tự nối bí danh
Phép tự nối phép nối mà điều kiện nối định liên quan đến cột bảng Trong trường hợp này, có xuất tên bảng nhiều lần mệnh đề FROM bảng cần phải đặt bí danh
Ví dụ 47:
Để biết họ tên ngày sinh sinh viên có ngày sinh với sinh viên Trần Thị Kim Anh, ta phải thực phép tự nối bảng SINHVIEN Trong câu lệnh nối, bảng SINHVIEN xuất mệnh đề FROM với bí danh a b Bảng SINHVIEN với bí danh a sử dụng để chọn sinh viên có họ tên Trần Thị Kim Anh bảng sinhvien với bí danh b sử dụng để xác định sinh viên trùng ngày sinh với sinh viên Trần Thị Kim Anh Câu lệnh viết sau:
SELECT b.hodem,b.ten,b.ngaysinh FROM sinhvien a, sinhvien b
WHERE a.hodem='Trần Thị Kim' AND a.ten='Anh' AND a.ngaysinh=b.ngaysinh AND a.masv<>b.masv d.Phép nối không dựa tiêu chuẩn
Trong phép nối này, điều kiện để thực phép nối bảng liệu điều kiện so sành cột Loại phép nối thực tế thường sử dụng
e Phép nối (outer-join)
(84)SQL
cung cấp
các loại
phép nối
ngoài sau đây:
Phép nối trái (ký hiệu: *=): Phép nối hiển thị kết truy vấn tất dòng liệu bảng nằm bên trái điều kiện nối cho dù dịng khơng thoả mãn điều kiện phép nối
Phép nối phải (ký hiệu: =*): Phép nối hiển thị kết truy vấn tất dòng liệu bảng nằm bên phải điều kiện nối cho dù dòng khơng thoả điều kiện phép nối
Ví dụ 48:
Giả sử ta có hai bảng DONVI NHANVIEN sau:
Câu lệnh:
SELECT *
FROM nhanvien,donvi
WHERE nhanvien.madv=donvi.madv
(85)có kết là:
Nếu thực phép nối trái bảng NHANVIEN bảng DONVI:
SELECT *
FROM nhanvien,donvi
WHERE nhanvien.madv*=donvi.madv kết câu lệnh là:
Và kết phép nối phải:
select *
from nhanvien,donvi where
nhanvien.madv=*donvi.madv sau:
CÂU HỎI, BÀI TẬP Bài tập 1
(86)sơ đồ (bạn tự lựa chọn kiểu liệu cho phù hợp)
2 Bổ sung ràng buộc thiết lập giá trị mặc định cho cột SOLUONG cho cột MUCGIAMGIA bảng CHITIETDATHANG
3 Bổ sung cho bảng DONDATHANG ràng buộc kiểm tra ngày giao hàng ngày chuyển hàng phải sau với ngày đặt hàng
4 Bổ sung ràng buộc cho bảng NHANVIEN để đảm bảo nhân viên làm việc công ty đủ 18 tuổi không 60 tuổi
5 Với bảng tạo được, câu lệnh:
DROP TABLE nhacungcap thực không? Tại sao? Bài tập 2
(87)đồ đây:
Trong đó:
Bảng NHACUNGCAP lưu trữ liệu đối tác cung cấp hàng cho công ty
Bảng MATHANG lưu trữ liệu mặt hàng có cơng ty Bảng LOAIHANG phân loại mặt hàng có
Bảng NHANVIEN có liệu thông tin nhân viên làm việc công ty
Bảng KHACHHANG sử dụng để lưu giữ thông tin khách hàng công ty
(88)đơn đặt hàng phải nhân viên công ty lập bảng có quan hệ với bảng NHANVIEN)
Thông tin chi tiết đơn đặt hàng (đặt mua mặt hàng gì, số lượng, giá cả, ) lưu trữ bảng CHITIETDATHANG Bảng có quan hệ với hai bảng DONDATHANG MATHANG
Sử dụng câu lệnh SELECT để viết yêu cầu truy vấn liệu sau đây: Cho biết danh sách đối tác cung cấp hàng cho công ty
2 Mã hàng, tên hàng số lượng mặt hàng có cơng ty Họ tên địa năm bắt đầu làm việc nhân viên công ty Địa điện thoại nhà cung cấp có tên giao dịch VINAMILK gì? Cho biết mã tên mặt hàng có giá lớn 100000 số lượng có
ít 50
6 Cho biết mặt hàng công ty cung cấp Công ty Việt Tiến cung cấp mặt hàng nào?
8 Loại hàng thực phẩm công ty cung cấp địa cơng ty gì?
9 Những khách hàng (tên giao dịch) đặt mua mặt hàng Sữa hộp XYZ công ty?
10.Đơn đặt hàng số đặt nhân viên lập, thời gian địa điểm giao hàng đâu?
11.Hãy cho biết số tiền lương mà công ty phải trả cho nhân viên (lương = lương + phụ cấp)
12.Trong đơn đặt hàng số đặt mua mặt hàng số tiền mà khách hàng phải trả cho mặt hàng (số tiền phải trả tính theo cơng thức SOLUONG×GIABAN – SOLUONG×GIABAN×MUCGIAMGIA/100) 13.Hãy cho biết có khách hàng lại đối tác cung cấp hàng
công ty (tức có tên giao dịch)
(89)15.Những đơn đặt hàng yêu cầu giao hàng cơng ty đặt hàng đơn công ty nào?
16.Cho biết tên công ty, tên giao dịch, địa điện thoại khách hàng nhà cung cấp hàng cho công ty
17.Những mặt hàng chưa khách hàng đặt mua? Những nhân viên công ty chưa lập hoá đơn đặt hàng nào?
18.Những nhân viên cơng ty có lương cao nhất?
19.Tổng số tiền mà khách hàng phải trả cho đơn đặt hàng bao nhiêu? 20.Trong năm 2003, mặt hàng đặt mua lần
21.Hãy cho biết khách hàng phải bỏ tiền để đặt mua hàng công ty?
22.Mỗi nhân viên công ty lập đơn đặt hàng (nếu nhân viên chưa lập hố đơn cho kết 0)
23.Cho biết tổng số tiền hàng mà cửa hàng thu tháng năm 2003 (thời gian tính theo ngày đặt hàng)
24.Hãy cho biết tổng số tiền lời mà công ty thu từ mặt hàng năm 2003
25.Hãy cho biết tổng số lượng hàng mặt hàng mà công ty có (tổng số lượng hàng có bán)
26.Nhân viên công ty bán số lượng hàng nhiều số lượng hàng bán nhân viên bao nhiêu?
27.Đơn đặt hàng có số lượng hàng đặt mua nhất?
28.Số tiền nhiều mà khách hàng bỏ để đặt hàng đơn đặt hàng bao nhiêu?
29.Mỗi đơn đặt hàng đặt mua mặt hàng tổng số tiền mà đơn đặt hàng phải trả bao nhiêu?
(90)31.Thống kê xem năm 2003, mặt hàng tháng năm bán với số lượng
32.Yêu cầu: Kết hiển thị dạng bảng, hai cột cột đầu mã hàng tên hàng, cột lại tương ứng với tháng từ đến 12 năm Như dòng kết cho biết số lượng hàng bán tháng năm mặt hàng
Sử dụng câu lệnh UPDATE để thực yêu cầu sau:
1 Cập nhật lại giá trị trường NGAYCHUYENHANG ghi có NGAYCHUYENHANG chưa xácđịnh (NULL) bảng DONDATHANG với giá trị trường NGAYDATHANG
2 Tăng số lượng hàng mặt hàng công ty VINAMILK cung cấp lên gấp đôi
3 Cập nhật giá trị trường NOIGIAOHANG bảng DONDATHANG địa khách hàng đơn đặt hàng chưa xác định nơi giao hàng (giá trị trường NOIGIAOHANG NULL)
4 Cập nhật lại liệu bảng KHACHHANG cho tên công ty tên giao dịch khách hàng trùng với tên công ty tên giao dịch nhà cung cấp địa chỉ, điện thoại, fax e-mail phải giống
5 Tăng lương lên gấp rưỡi cho nhân viên bán số lượng hàng nhiều 100 năm 2003
6 Tăng phụ cấp lên 50% lương cho nhân viên bán hàng nhiều
7 Giảm 25% lương nhân viên năm 2003 không lập đơn đặt hàng
8 Giả sử bảng DONDATHANG có thêm trường SOTIEN cho biết số tiền mà khách hàng phải trả đơn đặt hàng Hãy tính giá trị cho trường Thực yêu cầu câu lệnh DELETE.
(91)2 Xoá đơn đặt hàng trước năm 2000 khỏi sở liệu
3 Xoá khỏi bảng LOAIHANG loại hàng khơng có mặt hàng
4 Xố khỏi bảng KHACHHANG khách hàng khơng có đơn đặt hàng cho công ty
(92)BÀI 4: THỦ TỤC LƯU TRỮ Mã bài: 15.4
Giới thiệu:
Một tập câu lệnh SQL kết hợp lại với thành khối lệnh bên thủ tục Một thủ tục nhận tham số truyền vào trả giá trị thông qua tham số (như ngơn ngữ lập trình)
Khi thủ tục lưu trữ định nghĩa, gọi thơng qua tên thủ tục, nhận tham số truyền vào, thực thi câu lệnh SQL bên thủ tục trả giá trị sau thực xong
Sử dụng thủ tục lưu trữ sở liệu giúp tăng hiệu sở liệu
Mục tiêu:
- Sử dụng ngôn ngữ lập trình SQL để định nghĩa hàm - Cài đặt thủ tục nội
- Bẫy lỗi, cách dùng trỏ xử lý liệu - Thực thao tác an toàn với máy tính Nội dung chính:
1 Khái niệm thủ tục lưu trữ (stored procedure)
Như đề cập chương SQL Server 1, SQL thiết kế cài đặt ngôn ngữ để thực thao tác sở liệu tạo lập cấu trúc sở liệu, bổ sung, cập nhật, xoá truy vấn liệu sở liệu Các câu lệnh SQL người sử dụng viết yêu cầu hệ quản trị sở liệu thực theo chế độ tương tác
Các câu lệnh SQL nhúng vào ngơn ngữ lập trình, thơng qua chuỗi thao tác sở liệu xác định thực thi nhờ vào câu lệnh, cấu trúc điều khiển thân ngôn ngữ lập trình sử dụng
(93)những khả sau:
Các cấu trúc điều khiển (IF, WHILE, FOR) sử dụng thủ tục Bên thủ tục lưu trữ sử dụng biến ngôn ngữ lập trình nhằm
lưu giữ giá trị tính tốn được, giá trị truy xuất từ sở liệu Một tập câu lệnh SQL kết hợp lại với thành khối lệnh bên
trong thủ tục Một thủ tục nhận tham số truyền vào trả giá trị thơng qua tham số (như ngơn ngữ lập trình) Khi thủ tục lưu trữ định nghĩa, gọi thơng qua tên thủ tục, nhận tham số truyền vào, thực thi câu lệnh SQL bên thủ tục trả giá trị sau thực xong Sử dụng thủ tục lưu trữ sở liệu giúp tăng hiệu sở liệu, mang lại lợi ích sau:
Đơn giản hoá thao tác sở liệu nhờ vào khả module hoá thao tác
Thủ tục lưu trữ phân tích, tối ưu tạo nên việc thực thi chúng nhanh nhiều so với việc phải thực tập rời rạc câu lệnh SQL tương đương theo cách thông thường
Thủ tục lưu trữ cho phép thực yêu cầu câu lệnh đơn giản thay phải sử dụng nhiều dịng lệnh SQL Điều làm giảm thiểu lưu thơng mạng
Thay cấp phát quyền trực tiếp cho người sử dụng câu lệnh SQL đối tượng sở liệu, ta cấp phát quyền cho người sử dụng thơng qua thủ tục lưu trữ, nhờ tăng khả bảo mật hệ thống 2 Tạo thủ lư trữ
Thủ tục lưu trữ tạo câu lệnh CREATE PROCEDURE với cú pháp sau:
CREATE PROCEDURE tên_thủ_tục [(danh_sách_tham_số)] [WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS
(94)tên_thủ_tục Tên thủ tục cần tạo Tên phải tuân theo qui tắc định danh không vượt 128 ký tự
danh_sách_tham_số
Các tham số thủ tục khai báo sau tên thủ tục thủ tục có nhiều tham số khai báo phân cách dấu phẩy Khai báo tham số tối thiểu phải bao gồm hai phần:
• Tên tham số bắt đầu dấu @ • Kiểu liệu tham số
Ví dụ: @mamonhoc nvarchar(10) RECOMPILE
Thơng thường, thủ tục phân tích, tối ưu dịch sẵn lần gọi Nếu tuỳ chọn WITH RECOMPILE định, thủ tục dịch lại gọi
ENCRYPTION Thủ tục mã hoá tuỳ chọn WITH ENCRYPTION định Nếu thủ tục mã hố, ta khơng thể xem nội dung thủ tục
các_câu_lệnh_của_thủ_t ục
Tập hợp câu lệnh sử dụng nội dung thủ tục Các câu lệnh đặt cặp từ khố BEGIN END khơng
Ví dụ 1:
Giả sử ta cần thực chuỗi thao tác sau sở liệu Bổ sung thêm mơn học sở liệu có mã TI-005 số đơn vị học trình vào bảng MONHOC
2 Lên danh sách nhập điểm thi môn sở liệu cho sinh viên học lớp có mã C24102 (tức bổ sung thêm vào bảng DIEMTHI ghi với cột MAMONHOC nhận giá trị TI-005, cột MASV nhận giá trị mã sinh viên học lớp có mã C24105 cột điểm NULL)
(95)INSERT INTO MONHOC
VALUES('TI-005','Cơ sở liệu',5) INSERT INTO DIEMTHI(MAMONHOC,MASV) SELECT ‘TI-005’,MASV
FROM SINHVIEN
WHERE MALOP='C24102'
Thay phải sử dụng hai câu lệnh trên, ta định nghĩa mơt thủ tục lưu trữ với tham số vào @mamonhoc, @tenmonhoc, @sodvht @malop sau:
CREATE PROC sp_LenDanhSachDiem( @mamonhoc NVARCHAR(10),
@tenmonhoc NVARCHAR(50), @sodvht SMALLINT,
@malop NVARCHAR(10)) AS
BEGIN
INSERT INTO monhoc
VALUES(@mamonhoc,@tenmonhoc,@sodvht) INSERT INTO diemthi(mamonhoc,masv) SELECT @mamonhoc,masv
FROM sinhvien
WHERE malop=@malop END
Khi thủ tục tạo ra, ta thực hai yêu cầu đặt cách đơn giản thơng qua lịi gọi thủ tục:
sp_LenDanhSachDiem 'TI-005','Cơ sở liệu',5,'C24102' 3 Lời gọi thủ tục
Như thấy ví dụ trên, thủ tục lưu trữ tạo ra, ta yêu cầu hệ quản trị sở liệu thực thi thủ tục lời gọi thủ tục có dạng:
tên_thủ_tục [danh_sách_các_đối_số]
(96)Trong trường hợp lời gọi thủ tục thực bên thủ tục khác, bên trigger hay kết hợp với câu lệnh SQL khác, ta sử dụng cú pháp sau:
EXECUTE tên_thủ_tục [danh_sách_các_đối_số]
Thứ tự đối số truyền cho thủ tục khơng cần phải tn theo thứ tự tham số định nghĩa thủ tục tất đối số viết dạng:
@tên_tham_số = giá_trị Ví dụ 2:
Lời gọi thủ tục ví dụ viết sau:
sp_LenDanhSachDiem @malop='C24102', @tenmonhoc='Cơ sở liệu',
@mamonhoc='TI-005', @sodvht=5
4 Sử dụng biến thủ tục
Ngoài tham số truyền cho thủ tục, bên thủ tục cịn sử dụng biến nhằm lưu giữ giá trị tính toán truy xuất từ sở liệu Các biến thủ tục khai báo từ khoá DECLARE theo cú pháp sau:
DECLARE @tên_biến kiểu_dữ_liệu
Tên biến phải bắt đầu ký tự @ tuân theo qui tắc định danh Ví dụ minh hoạ việc sử dụng biến thủ tục
Ví dụ 3:
Trong định nghĩa thủ tục sử dung biến chứa giá trị truy xuất từ sở liệu
CREATE PROCEDURE sp_Vidu( @malop1 NVARCHAR(10), @malop2 NVARCHAR(10)) AS
DECLARE @tenlop1 NVARCHAR(30) DECLARE @namnhaphoc1 INT
(97)SELECT @tenlop1=tenlop, @namnhaphoc1=namnhaphoc
FROM lop WHERE malop=@malop1 SELECT @tenlop2=tenlop,
@namnhaphoc2=namnhaphoc FROM lop WHERE malop=@malop2
PRINT @tenlop1+' nhap hoc nam '+str(@namnhaphoc1) print @tenlop2+' nhap hoc nam '+str(@namnhaphoc2) IF @namnhaphoc1=@namnhaphoc2
PRINT 'Hai lớp nhập học năm' ELSE
PRINT 'Hai lớp nhập học khác năm' 5 Giá trị trả tham số thủ tục lưu trữ
Trong ví dụ trước, đối số truyền cho thủ tục có lời gọi đến thủ tục biến, thay đổi giá trị biền thủ tục không giữ lại kết thúc trình thực thủ tục
Ví dụ 4: Xét câu lệnh sau
CREATE PROCEDURE sp_Conghaiso(@a INT,@b INT, @c INT) AS
SELECT @c=@a+@b
Nếu sau tạo thủ tục với câu lệnh trên, ta thực thi tập câu lệnh sau:
DECLARE @tong INT SELECT @tong=0
EXECUTE sp_Conghaiso 100,200,@tong SELECT @tong
Câu lệnh “SELECT @tong” cuối loạt câu lệnh cho kết là:
(98)ta phải khai báo tham số thủ tục theo cú pháp sau: @tên_tham_số kiểu_dữ_liệu OUTPUT hoặc:
@tên_tham_số kiểu_dữ_liệu OUT
và lời gọi thủ tục, sau đối số truyền cho thủ tục, ta phải định thêm từ khố OUTPUT (hoặc OUT)
Ví dụ 5: Ta định nghĩa lại thủ tục ví dụ sau: CREATE PROCEDURE sp_Conghaiso(
@a INT,
@b INT,
@c INT OUTPUT)
AS
SELECT @c=@a+@b
và thực lời gọi thủ tục tập câu lệnh sau: DECLARE @tong INT
SELECT @tong=0
EXECUTE sp_Conghaiso 100,200,@tong OUTPUT SELECT @tong
thì câu lệnh “SELECT @tong” cho kết là: 300 6 Sửa đổi thủ tục
Các tham số khai báo thủ tục nhận giá trị mặc định Giá trị mặc định gán cho tham số trường hợp không truyền đối số cho tham số có lời gọi đến thủ tục
Tham số với giá trị mặc định khai báo theo cú pháp sau: @tên_tham_số kiểu_dữ_liệu = giá_trị_mặc_định Ví dụ 6: Trong câu lệnh đây:
CREATE PROC sp_TestDefault( @tenlop NVARCHAR(30)=NULL, @noisinh NVARCHAR(100)='Huế') AS
BEGIN
(99)SELECT hodem,ten
FROM sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop WHERE noisinh=@noisinh
ELSE
SELECT hodem,ten
FROM sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop WHERE noisinh=@noisinh AND
tenlop=@tenlop END
Thủ tục sp_TestDefault định nghĩa với tham số @tenlop có giá trị mặc định NULL tham số @noisinh có giá trị mặc định Huế Với thủ tục định nghĩa trên, ta thực lời gọi với mục đích khác sau:
Cho biết họ tên sinh viên sinh Huế: sp_testdefault
Cho biết họ tên sinh viên lớp Tin K24 sinh Huế: sp_testdefault @tenlop='Tin K24'
Cho biết họ tên sinh viên sinh Nghệ An: sp_testDefault @noisinh=N'Nghệ An'
Cho biết họ tên sinh viên lớp Tin K26 sinh Đà Nẵng: sp_testdefault @tenlop='Tin K26',@noisinh='Đà Nẵng' Xóa thủ tục
Khi thủ tục tạo ra, ta tiến hành định nghĩa lại thủ tục câu lệnh ALTER PROCEDURE có cú pháp sau:
ALTER PROCEDURE tên_thủ_tục [(danh_sách_tham_số)] [WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS
Các_câu_lệnh_Của_thủ_tục
(100)tục không tác động đến thủ tục khác hay trigger phụ thuộc vào thủ tục
8 Xóa thủ tục
Để xố thủ tục có, ta sử dụng câu lệnh DROP PROCEDURE với cú pháp sau:
DROP PROCEDURE tên_thủ_tục
Khi xoá thủ tục, tất quyền cấp cho người sử dụng thủ tục đồng thời bị xố bỏ Do đó, tạo lại thủ tục, ta phải tiến hành cấp phát lại quyền thủ tục
CÂU HỎI, BÀI TẬP
Dựa sở liệu học số 3, thực yêu cầu sau:
1 Tạo thủ tục lưu trữ để thông qua thủ tục bổ sung thêm ghi cho bảng MATHANG (thủ tục phải thực kiểm tra tính hợp lệ liệu cần bổ sung: khơng trùng khố đảm bảo tồn vẹn tham chiếu)
2 Tạo thủ tục lưu trữ có chức thống kê tổng số lượng hàng bán mặt hàng có mã (mã mặt hàng cần thống kê tham số thủ tục)
(101)BÀI 5: QUẢN LÝ GIAO TÁC Mã bài: 15.5
Giới thiệu:
Các ràng buộc sử dụng để đảm bảo tính tồn vẹn liệu sở liệu Một đối tượng khác thường sử dụng sở liệu với mục đích trigger Cũng tương tự thủ tục lưu trữ, trigger đối tượng chứa tập câu lệnh SQL tập câu lệnh thực thi trigger gọi Điểm khác biệt thủ tục lưu trữ trigger là: thủ tục lưu trữ thực thi người sử dụng có lời gọi đến chúng trigger lại “gọi” tự động xảy giao tác làm thay đổi liệu bảng
Mục tiêu chính:
⁻ Hiểu trigger
⁻ Hiểu nguyên lý quản lý giao tác
⁻ Quản lý truy xuất cạnh tranh, phục hồi sau cố ⁻ Thực thao tác an tồn với máy tính Nội dung chính:
1 Định nghĩa Trigger
Một trigger đối tượng gắn liền với bảng tự động kích hoạt xảy giao tác làm thay đổi liệu bảng Định nghĩa trigger bao gồm yếu tố sau:
Trigger áp dụng bảng nào?
Trigger kích hoạt câu lệnh thực thi bảng: INSERT, UPDATE, DELETE?
Trigger làm kích hoạt?
Câu lệnh CREATE TRIGGER sử dụng để đinh nghĩa trigger có cú pháp sau:
CREATE TRIGGER tên_trigger
ON tên_bảng
(102)AS
[IF UPDATE(tên_cột)
[AND UPDATE(tên_cột)|OR UPDATE(tên_cột)] ]
các_câu_lệnh_của_trigger Ví dụ 1: Ta định nghĩa bảng sau:
Bảng MATHANG lưu trữ liệu mặt hàng: CREATE TABLE mathang
(
Mahang NVARCHAR(5) PRIMARY KEY, /*mã hàng*/ Tenhang NVARCHAR(50) NOT NULL, /*tên hàng*/ Soluong INT, /*Số lượng hàng có*/
)
Bảng NHATKYBANHANG lưu trữ thông tin lần bán hàng
CREATE TABLE nhatkybanhang (
stt INT IDENTITY PRIMARY KEY,
ngay DATETIME, /*ngày bán hàng*/
nguoimua NVARCHAR(30), /*tên người mua hàng*/
mahang NVARCHAR(5)
FOREIGN KEY REFERENCES mathang(mahang), Soluong INT,
Giaban MONEY )
Câu lệnh định nghĩa trigger trg_nhatkybanhang_insert Trigger có chức tự động giảm số lượng hàng có mặt hàng bán (tức câu lệnh INSERT thực thi bảng NHATKYBANHANG) CREATE TRIGGER trg_nhatkybanhang_insert
ON nhatkybanhang FOR INSERT
AS
UPDATE mathang
SET mathang.soluong=mathang.soluong-inserted.soluong FROM mathang INNER JOIN inserted
ON mathang.mahang=inserted.mahang
(103)thì sau ta thực câu lênh: INSERT INTO nhatkybanhang
(ngay,nguoimua,mahang,soluong,giaban)
VALUES('5/5/2004','Tran Ngoc Thanh','H1',10,5200) liệu bảng MATHANG sau:
Trong câu lệnh CREATE TRIGGER ví dụ trên, sau mệnh đề ON tên bảng mà trigger cần tạo tác động đến Mệnh đề định câu lệnh kích hoạt trigger (FOR INSERT) Ngồi INSERT, ta cịn định UPDATE DELETE cho mệnh đề này, kết hợp chúng lại với Phần thân trigger nằm sau từ khoá AS bao gồm câu lệnh mà trigger thực thi kích hoạt
Chuẩn SQL định nghĩa hai bảng logic INSERTED DELETED để sử dụng trigger Cấu trúc hai bảng tương tự cấu trúc bảng mà trigger tác động Dữ liệu hai bảng tuỳ thuộc vào câu lệnh tác động lên bảng làm kích hoạt trigger; cụ thể trường hợp sau:
Khi câu lệnh DELETE thực thi bảng, dịng liệu bị xố chép vào bảng DELETED Bảng INSERTED trường hợp khơng có liệu
Dữ liệu bảng INSERTED dòng liệu bổ sung vào bảng gây nên kích hoạt trigger câu lệnh INSERT Bảng DELETED trường hợp khơng có liệu
Khi câu lệnh UPDATE thực thi bảng, dòng liệu cũ chịu tác động câu lệnh chép vào bảng DELETED, bảng INSERTED dòng sau cập nhật
2 Sử dụng mệnh đề IF UPDATE Trigger
(104)chỉ liên quan đến số cột định cột Trong trường hợp này, ta sử dụng mệnh đề IF UPDATE trigger IF UPDATE không sử dụng câu lệnh DELETE
Ví dụ 2:
Xét lại ví dụ với hai bảng MATHANG NHATKYBANHANG, trigger kích hoạt ta tiến hành cập nhật cột SOLUONG cho ghi bảng NHATKYBANHANG (lưu ý cập nhật ghi)
CREATE TRIGGER trg_nhatkybanhang_update_soluong ON nhatkybanhang
FOR UPDATE AS
IF UPDATE(soluong) UPDATE mathang
SET mathang.soluong = mathang.soluong – (inserted.soluong-deleted.soluong)
FROM (deleted INNER JOIN inserted ON
deleted.stt = inserted.stt) INNER JOIN mathang ON mathang.mahang = deleted.mahang
Với trigger ví dụ trên, câu lệnh:
UPDATE nhatkybanhang SET soluong=soluong+20 WHERE stt=1
sẽ 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 Tồ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
(105)(
A INT, B INT, C INT )
và trigger trg_R_update cho 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
3 ROLLBACK TRANSACTION
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:
(106)(Câu lệnh ROLLBACK TRANSACTION chi tiết 6)
Ví dụ 4: 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
Ví dụ 5:
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 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
được 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<@sl_ban
ROLLBACK TRANSACTION
/*Nếu liệu hợp lệ giảm số lượng hàng có */
(107)UPDATE mathang
SET soluong=info@123doc.org WHERE mahang=@mahang
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.
Trong ví dụ trước, trigger thực hoạt động mục đích câu lệnh kích hoạt trigger có tác dụng dịng liêu Ta nhận thấy câu lệnh UPDATE DELETE thường có tác dụng nhiều dịng, câu lệnh INSERT rơi vào trường hợp khơng phải khơng gặp; ta sử dụng câu lệnh có dạng INSERT INTO SELECT Vậy làm để trigger hoạt động trường hợp câu lệnh có tác động lên nhiều dịng liệu?
Có hai giải pháp sử dụng vấn đề này: Sử dụng truy vấn
Sử dụng biến trỏ 4.1 Sử dụng truy vấn
Ta hình dung vấn đề cách khắc phục qua ví dụ đây:
Ví dụ 6: Ta xét lại trường hợp hai bảng MATHANG NHATKYBANHANG sơ đồ đây:
(108)UPDATE sử dụng để cập nhật cột SOLUONG bảng NHATKYBANHANG
CREATE TRIGGER trg_nhatkybanhang_update_soluong ON nhatkybanhang
FOR UPDATE AS
IF UPDATE(soluong) UPDATE mathang
SET mathang.soluong = mathang.soluong – (inserted.soluong-deleted.soluong)
FROM (deleted INNER JOIN inserted ON
deleted.stt = inserted.stt) INNER JOIN mathang ON mathang.mahang = deleted.mahang
Với trigger định nghĩa trên, thực câu lệnh: UPDATE nhatkybanhang
SET soluong = soluong + 10 WHERE stt =
thì liệu hai bảng MATHANG NHATKYBANHANG là:
Tức số lượng mặt hàng có mã H1 giảm 10 Nhưng thực tiếp câu lệnh:
UPDATE nhatkybanhang SET soluong=soluong + WHERE mahang='H2'
dữ liệu hai bảng sau câu lệnh thực xong sau:
(109)hoạt động trường hợp
Để khắc phục lỗi gặp phải trên, ta định nghĩa lại trigger sau:
CREATE TRIGGER trg_nhatkybanhang_update_soluong ON nhatkybanhang
FOR UPDATE AS
IF UPDATE(soluong) UPDATE mathang
SET mathang.soluong = mathang.soluong
(SELECT SUM(inserted.soluong-deleted.soluong) FROM inserted INNER JOIN deleted
ON inserted.stt=deleted.stt WHERE inserted.mahang = mathang.mahang)
WHERE mathang.mahang IN (SELECT mahang FROM inserted)
hoặc:
CREATE TRIGGER trg_nhatkybanhang_update_soluong ON nhatkybanhang
FOR UPDATE AS
IF UPDATE(soluong)
/*Nếu số lượng dòng cập nhật */ IF @@ROWCOUNT =
BEGIN
UPDATE mathang
SET mathang.soluong = mathang.soluong – (inserted.soluong-deleted.soluong)
FROM (deleted INNER JOIN inserted ON
deleted.stt = inserted.stt) INNER JOIN mathang ON mathang.mahang = deleted.mahang
END ELSE BEGIN
UPDATE mathang
SET mathang.soluong = mathang.soluong -(SELECT SUM(inserted.soluong-deleted.soluong) FROM inserted INNER JOIN deleted
(110)FROM inserted) END
4.2 Sử dụng biến trỏ
Một cách khác để khắc phục lỗi xảy ví dụ 5.17 sử dụng trỏ để duyệt qua dòng liệu kiểm tra dòng Tuy nhiên, sử dụng biến trỏ trigger giải pháp nên chọn trường hợp thực cần thiết
Một biến trỏ sử dụng để duyệt qua dòng liệu kết truy vấn khai báo theo cú pháp sau:
DECLARE tên_con_trỏ CURSOR
FOR câu_lệnh_SELECT
Trong câu lệnh SELECT phải có kết dạng bảng Tức câu lệnh không sử dụng mệnh đề COMPUTE INTO
Để mở biến trỏ ta sử dụng câu lệnh:
OPEN tên_con_trỏ
Để sử dụng biến trỏ duyệt qua dòng liệu truy vấn, ta sử dụng câu lệnh FETCH Giá trị biến trạng thái @@FETCH_STATUS khơng chưa duyệt hết dịng kết truy vấn
Câu lệnh FETCH có cú pháp sau:
FETCH [[NEXT|PRIOR|FIST|LAST] FROM] tên_con_trỏ
[INTO danh_sách_biến ]
Trongđó biến danh sách biến sử dụng để chứa giá trị trường ứng với dòng liệu mà trỏ trỏ đến Số lượng biến phải với số lượng cột kết truy vấn câu lệnh DECLARE CURSOR
Ví dụ 7: Tập câu lệnh ví dụ minh hoạ cách sử dụng biến trỏ để duyệt qua dòng kết câu lệnh SELECT
DECLARE contro CURSOR
FOR SELECT mahang,tenhang,soluong FROM mathang OPEN contro
(111)/*Bắt đầu duyệt qua dòng kết truy vấn*/ FETCH NEXT FROM contro
INTO @mahang,@tenhang,@soluong WHILE @@FETCH_STATUS=0
BEGIN
PRINT 'Ma hang:'info@123doc.org PRINT 'Ten hang:'info@123doc.org PRINT 'So luong:'+STR(@soluong) FETCH NEXT FROM contro
INTO @mahang,@tenhang,@soluong END
/*Đóng trỏ giải phóng vùng nhớ*/ CLOSE contro
DEALLOCATE contro
Ví dụ 8:Trigger cách giải khác trường hợp ví dụ
CREATE TRIGGER trg_nhatkybanhang_update_soluong ON nhatkybanhang
FOR UPDATE AS
IF UPDATE(soluong) BEGIN
DECLARE @mahang NVARCHAR(10) DECLARE @soluong INT
DECLARE contro CURSOR FOR
SELECT inserted.mahang, inserted.soluong - deleted.soluong AS soluong
FROM inserted INNER JOIN deleted ON inserted.stt=deleted.stt
OPEN contro
FETCH NEXT FROM contro INTO @mahang,@soluong WHILE @@FETCH_STATUS=0
BEGIN
UPDATE mathang SET soluong=info@123doc.org WHERE mahang=@mahang
FETCH NEXT FROM contro INTO @mahang,@soluong END
CLOSE contro
DEALLOCATE contro END
(112)CÂU HỎI, BÀI TẬP
Dựa sở liệu học số 3, thực yêu cầu sau:
1 Viết trigger cho bảng CHITIETDATHANG theo yêu cầu sau:
Khi ghi bổ sung vào bảng giảm số lượng hàng có số lượng hàng có lớn số lượng hàng bán Ngược lại huỷ bỏ thao tác bổ sung
Khi cập nhật lại số lượng hàng bán, kiểm tra số lượng hàng cập nhật lại có phù hợp hay khơng (số lượng hàng bán khơng vượt q số lượng hàng có không nhỏ 1) Nếu liệu hợp lệ giảm (hoặc tăng) số lượng hàng có cơng ty, ngược lại huỷ bỏ thao tác cập nhật
2 Viết trigger cho bảng CHITIETDATHANG để cho chấp nhận giá hàng bán phải nhỏ giá gốc (giá mặt hàng bảng MATHANG) Để quản lý tin Website, người ta sử dụng hai bảng sau:
Bảng LOAIBANTIN (loại tin) CREATE TABLE loaibantin (
maphanloai INT NOT NULL PRIMARY KEY, tenphanloai NVARCHAR(100) NOT NULL , bantinmoinhat DEFAULT(0)
)
Bảng BANTIN (bản tin)
CREATE TABLE bantin (
maso INT NOT NULL PRIMARY KEY, ngayduatin DATETIME NULL , tieude NVARCHAR(200) NULL , noidung NTEXT NULL ,
(113)REFERENCES loaibantin(maphanloai) )
Trong bảng LOAIBANTIN, giá trị cột BANTINMOINHAT cho biết mã số tin thuộc loại tương ứng (được bổ sung sau cùng)
Hãy viết trigger cho bảng BANTIN cho:
Khi tin bổ sung, cập nhật lại cột BANTINMOINHAT dòng tương ứng với loại tin vừa bổ sung
Khi tin bị xoá, cập nhật lại giá trị cột BANTINMOINHAT bảng LOAIBANTIN dòng ứng với loại tin vừa xóa mã số tin trước (dựa vào ngày đưa tin) Nếu khơng cịn tin loại giá trị cột
(114)BÀI 6: BẢO MẬT TRONG SQL SERVER Mã bài: 15.6
Giới thiệu:
Bảo mật yếu tố đóng vai trị quan trọng sống sở liệu Hầu hết hệ quản trị sở liệu thương mại cung cấp khả bảo mật sở liệu với chức như: cấp phát quyền truy cập đối tượng CSDL, câu lệnh cho người dùng nhóm người dùng
Mục tiêu chính:
⁻ Sử dụng lệnh tạo user
⁻ Sử dụng lệnh cấp phát, thu hồi từ chối quyền người sử dụng
⁻ Thực thao tác an tồn với máy tính Nội dung chính:
1 Cơ chế an toàn liệu
Bảo mật yếu tố đóng vai trị quan trọng sống sở liệu Hầu hết hệ quản trị sở liệu thương mại cung cấp khả bảo mật sở liệu với chức như:
Cấp phát quyền truy cập sở liệu cho người dùng nhóm người dùng, phát ngăn chặn thao tác trái phép người sử dụng sở liệu
Cấp phát quyền sử dụng câu lệnh, đối tượng sở liệu người dùng
Thu hồi (huỷ bỏ) quyền người dùng Bảo mật liệu SQL thực dựa ba khái niệm sau đây:
Người dùng sở liệu (Database user):
(115)Mỗi người dùng sở liệu xác định thông qua tên người dùng (User ID) Một tập nhiều người dùng tổ chức nhóm gọi nhóm người dùng (User Group) Chính sách bảo mật sở liệu áp dụng cho người dùng cho nhóm người dùng
Các đối tượng sở liệu (Database objects):
Tập hợp đối tượng, cấu trúc lưu trữ sử dụng sở liệu bảng, khung nhìn, thủ tục, hàm gọi đối tượng sở liệu Đây đối tượng cần bảo vệ sách bảo mật sở liệu
Đặc quyền (Privileges): Là tập thao tác cấp phát cho người dùng đối tượng sở liệu Chằng hạn người dùng truy xuất liệu bảng câu lệnh SELECT khơng thể thực câu lệnh INSERT, UPDATE hay DELETE bảng
SQL cung cấp hai câu lệnh cho phép thiết lập sách bảo mật sở liệu:
Lệnh GRANT: Sử dụng để cấp phát quyền cho người sử dụng đối tượng sở liệu quyền sử dụng câu lệnh SQL sở liệu
Lệnh REVOKE: Được sử dụng để thu hồi quyền người sử dụng
Login User:
• Login: Dùng để truy cập vào hệ thống SQL Server, Login có quyền truy cập vào Server chưa hẳn có quyền truy cập vào Database Server, quyền truy cập vào Database gắn liền với người dùng CSDL (Users) Để xem tất login Server, dùng lệnh exec sp_helplogins SSMS (Server/Security/Logins)
(116)Để xem tất users database, dùng lệnh:
exec sp_helpuser SSMS (Database/Security/Users) 2 Khung nhìn (view) chế bảo vệ liệu
Một khung nhìn (view) xem bảng “ảo” sở liệu có nội dung định nghĩa thơng qua truy vấn (câu lệnhSELECT) Ưu điểm View bảo mật liệu
Với View, bạn hạn chế quyền truy cập users đến số bảng cụ thể Tuy nhiên, cho phép họ truy cập vài thuộc tính bảng
Ví dụ, CSDL muốn hạn chế số users truy cập vào bảng customers Để bảo vệ thông tin khách hàng Tuy nhiên, thông tin Firstname, Lastname cần thiết cho users thực công việc
Vậy với View, hạn chế users mức độ thuộc tính bảng liệu
2.1.Tạo View SQL
Các View tạo cách sử dụng câu lệnh CREATE VIEW Các view tạo từ bảng, nhiều bảng từ view khác
Cú pháp CREATE VIEW sau: CREATE VIEW view_name AS SELECT column1, column2 FROM table_name
WHERE [condition];
Bạn thêm nhiều bảng câu lệnh SELECT tương tự cách sử dụng chúng truy vấn SQL SELECT bình thường
Khi tạo khung nhìn với câu lệnh CREATE VIEW, ta cần phải lƣu ý số nguyên tắc sau:
• Tên khung nhìn tên cột khung nhìn, giống bảng, phải tuân theo qui tắc định danh
• Khơng thể qui định ràng buộc tạo mục cho khung nhìn
• Câu lệnh SELECT với mệnh đề COMPUTE BY khơng sử dụng để định nghĩa khung nhìn
(117)thức (tức là tên cột bảng sở) cột khơng đặt tiêu đề Tồn hai cột kết câu lệnh SELECT có tiêu đề cột Ví dụ 1:
Câu lệnh câu lệnh sai cột thứ không xác định tên cột CREATE VIEW tuoisinhvien AS SELECT
masv,hodem,ten,DATEDIFF(YY,ngaysinh,GETDATE()) FROM sinhvien 2.2.Xóa View SQL
Bạn xóa view khơng cịn cần thiết Cú pháp sau: DROP VIEW view_name;
3 Tạo quản lý người dùng (user)
Người dùng tức tài khoản MS SQL Server để truy cập vào sở liệu (CSDL)
Người dùng tạo cách Cách 1: Sử dụng T-SQL
Cú pháp để tạo người dùng MS SQL Server
Create user <username> for login <
Ví dụ 2:
Để tạo người dùng có tên TestUser với tên đăng nhập TestLogin CSDL TestDB, chạy truy vấn
create user TestUser for login TestLogin Cách 2: Sử dụng SQL Server Management Studio SSMS
Lưu ý: Trước hết cần tạo Login tên trước tạo tài khoản người dùng Hãy dùng tên Login TestLogin
(118)Hình 6.1: Màn hình tạo người dùng mới
Bước 2: Điền tên TestUser cho tên người dùng chọn tên Login có tên TestLogin hình
(119)Bước 3: Click OK để hoàn tất Refresh lại thư mục, bạn thấy tên người dùng tạo
Hình 6.3: Tạo thành cơng người dùng mới 4 Tạo roles sử dụng loại roles server, DB Object
Việc bảo mật truy xuất liệu hệ quản trị sở liệu công việc hàng ngày phải theo dõi để đảm bảo việc truy xuất liệu từ chương trình ứng dụng thơng suốt, khơng thừa, khơng thiếu
Hơn nữa, triển khai hệ thống DBA cần khảo sát thiết lập bảo mật cho Database Account truy cập
(120)– Khái niệmDatabase Engine: Khi nói đến Database Engine nghĩa nói đến hệ quản trị sở liệu cài đặt máy chủ bạn, máy chủ bạn cài đặt nhiều Instance, Instance xem Database Engine – Khái niệmDatabase: Khi nói đến Database nghĩa nói đến Database xác định tạo Database Engine bạn
Có hai loại Database Account mà bạn cần lưu ý:
System Account : Tài khoản để quản lý toàn hệ thống sở liệu bạn, mặc định cài Microsoft SQL Server cung cấp cho SA, account mà toàn quyền CSDL bạn Các quyên thường phải có : Create Database, Alter Database, Drop Database, cấu hình tham số máy chủ, backup, restore liệu…
Application Account: Tài khoản để chương trình ứng dụng truy cập vào hệ quản trị sở liệu bạn Thường account application phân quyền hay nhiều Database có liên quan Các quyền thường phải có : Select, Insert, Update, Delete, Execute procedure…
Hình 6.4: Chức bảo mật cho người dùng
Vậy để biết quyền cấp cho với mục đích sử dụng tương ứng với loại Account ?
Trong Microsoft SQL Server cung cấp cho số nhóm(Group) tiêu chuẩn, group có quyền tương ứng Hay cịn gọi Roles (Server Level Roles)
(121)Hình 6.5: Các quyền cho nhóm tiêu chuẩn
- bulkadmin : Account thành viên Role thực lệnh BULK INSERT
- dbcreator : Account thành viên Role Create, Alter, Drop, restore database
- diskadmin: Account thành viên Role quản lý tập tin đĩa cứng
- processadmin: Account thành viên Role tắt xử lý chạy instance database engine
- public: Account thành viên Role có quyền mặc định Microsoft SQL Server
- securityadmin: Account thành viên Role có quyền quản lý account khác cấp quyền thu hồi quyền account khác Hơn cịn có quyền re-set mật account khác
- setupadmin: Account thành viên Role thêm xóa linked Server thực thi số store procedure hệ thống
(122)4.2 Bảo mật chi tiết cấp Database
Hình 6.6: Bảo mật cấp độ Database
⁻ db_owner: Account có role có tồn quyền Database đó
⁻ db_securityadmin: Account có role cấp quyền cho các account khác phạm vị database account
⁻ db_accessadmin: Account có role cấp quyền truy xuất database Windows login, Windows group SQL Server logins
⁻ db_backupoperator: Account có role backup database
(123)⁻ db_datawriter: Account có role thêm/sửa/xóa dịng dữ liệu tất user table database
⁻ db_denydatawriter: Account có role khơng thể thêm/sửa/xóa dữ liệu tất user table database
⁻ db_datareader: Account có role đọc liệu tất user table database
⁻ db_denydatareader: Account có role đọc liệu tất cả user table database
5 Tạo User: cấp quyền, thu quyền server, DB Object
Chỉ có người sở hữu sở liệu người sở hữu đối tượng sở liệu cấp phát quyền cho người dùng đối tượng sở liệu
Quyền hạn dùng để quyền truy cập sở liệu (CSDL) Bạn tạo, xóa từ chối quyền MS SQL Server
5.1 Cấp quyền
Để cấp quyền, sử dụng cách sau Cách 1: Dùng T-SQL
Cú pháp:
Use <database name>
Grant <permission name> on <object name> to
<username\principle>
[WITH GRANT OPTION ]
Trong đó:
<permission name> : Tên quyền cấp phát
<object name> : <tên thủ tục>/ <tên hàm >/<tên bảng>/<tên khung nhìn>
<username\principle>: danh sách người dùng/nhóm người dùng
Ví dụ 1:
Để phân quyền chọn cho người dùng có tên TestUser đối tượng TestTable CSDL có tên TestDB, bạn chạy truy vấn đây.
USE TestDB
GO
(124)Ghi chú:
Tên quyền cấp phát
Cấp phát tất quyền cho người dùng đối tượng sở liệu định Các quyền cấp phát cho người dùng bao gồm:
• Đối với bảng, khung nhìn, hàm trả liệu kiểu bảng: SELECT, INSERT, DELETE, UPDATE REFERENCES
• Đối với cột bảng, khung nhìn: SELECT UPDATE
• Đối với thủ tục lưu trữ hàm vô hướng: EXECUTE
Trong quyền đề cập đến trên, quyền
REFERENCES sử dụng nhằm cho phép tạo khóa ngồi tham chiếu đến bảng cấp phát
Các quyền cấp phát
Danh sách quyền cần cấp phát cho người dùng đối tượng sở liệu định Các quyền phân cách dấu phẩy
<tên bảng> <tên khung nhìn>
Tên bảng khung nhìn cần cấp phát quyền
Danh sách cột Danh sách cột bảng khung nhìn cần cấp phát quyền
Tên thủ tục Tên thủ tục cấp phát cho người dùng
Tên hàm Tên hàm (do người dùng định nghĩa) cấp phát quyền
Danh sách người dùng Danh sách tên người dùng nhận quyền cấp phát Tên người dùng phân cách dấu phẩy
WITH GRANT OPTION
(125)Các ví dụ minh hoạ cho ta cách sử dụng câu lệnh GRANT để cấp phát quyền cho người dùng đối tượng sở liệu
Ví dụ 2:
Cấp phát cho người dùng có tên thuchanh quyền thực thi câu lệnh SELECT, INSERT UPDATE bảng LOP
GRANT SELECT,INSERT,UPDATE ON LOP
TO thuchanh Ví dụ 3:
Cho phép người dùng thuchanh quyền xem họ tên ngày sinh sinh viên (cột HODEM,TEN NGAYSINH bảng SINHVIEN)
GRANT SELECT
(hodem,ten,ngaysinh) ON sinhvien TO thuchanh
hoặc:
GRANT SELECT
ON sinhvien(hodem,ten,ngaysinh) TO thuchanh
Với quyền cấp phát trên, người dùng thuchanh thực câu lệnh sau bảng SINHVIEN
SELECT hoden,ten,ngaysinh FROM sinhvien
Nhưng câu lệnh lại thực
SELECT * FROM sinhvien
Trong trường hợp cần cấp phát tất quyền thực đối tượng sở liệu cho người dùng, thay liệt kê câu lệnh, ta cần sử dụng từ khoá ALL PRIVILEGES (từ khóa PRIVILEGES khơng cần định) Câu lệnh cấp phát cho người dùng thuchanh quyền SELECT, INSERT, UPDATE, DELETE VÀ REFERENCES bảngDIEMTHI
(126)ON DIEMTHI TO thuchanh
Khi ta cấp phát quyền cho người dùng đối tượng sở liệu, người dùng thực thi câu lệnh cho phép đối tượng cấp phát
Tuy nhiên, người dùng khơng có quyền cấp phát quyền mà phép cho người sử dụng khác.Trong số trường hợp, ta cấp phát quyền cho người dùng đó, ta cho phép người chuyển tiếp quyền cho người dùng khác cách định tuỳ chọn WITH GRANT OPTION câu lệnh GRANT
Ví dụ 4: Cho phép người dùng thuchanh quyền xem liệu bảng SINHVIEN đồng thời chuyển tiếp quyền cho người dùng khác
GRANT SELECT ON sinhvien TO thuchanh WITH GRANT OPTION
Cách 2: Dùng SQL Server Management Studio (SSMS)
Bước 1: Kết nối tới CSDL, mở rộng thư mục hình
(127)Bước 2: Click chuột phải vào TestUser chọn Properties
Hình 6.8: Màn hình quản lý người dùng TestUser
Bước 3: Dùng Search để tìm kiếm sau chọn đối tượng muốn phân quyền, bảng TestTable
Bước 4: Click chọn bảng TestTable, sau chọn hộp checkbox Grant cho thao tác danh sách bên hình Ở ví dụ trao quyền chọn bảng (Select)
(128)Hình 6.8: Màn hình bước nhấp chọn hộp phân quyền 5.2 Thu quyền
Câu lệnh REVOKE sử dụng để thu hồi quyền cấp phát cho người dùng Tương ứng với câu lệnh GRANT, câu lệnh REVOKE sử dụng hai trường hợp:
Thu hồi quyền cấp phát cho người dùng đối tượng sở liệu Thu hồi quyền thực thi câu lệnh sở liệu cấp phát cho người
dùng
5.2.1.Thu hồi quyền đối tượng sở liệu
Cú pháp câu lệnh REVOKE sử dụng để thu hồi quyền cấp phát đối tượng sở liệu có cú pháp sau:
(129)ALL [PRIVILEGES]| các_quyền_cần_thu_hồi [(danh_sách_cột)] ON tên_bảng | tên_khung_nhìn |ON tên_bảng | tên_khung_nhìn [(danh_sách_cột)] |ON tên_thủ_tục
|ON tên_hàm
FROM danh_sách_người_dùng [CASCADE]
Câu lệnh REVOKE sử dụng để thu hồi số quyền cấp phát cho người dùng thu hồi tất quyền (ALL PRIVILEGES)
Ví dụ 5:
Thu hồi quyền thực thi lệnh INSERT bảng LOP người dùng thuchanh
REVOKE INSERT ON lop
FROM thuchanh
Giả sử người dùng thuchanh cấp phát quyền xem liệu cột HODEM, TEN NGAYSINH bảng SINHVIEN, câu lệnh thu hồi quyền cấp phát cột NGAYSINH (chỉ cho phép xem liệu cột HODEM TEN)
REVOKE SELECT
ON sinhvien(ngaysinh) FROM thuchanh
Khi ta sử dụng câu lệnh REVOKE để thu hồi quyền đối tượng sở liêu từ người dùng náo đó, quyền mà ta cấp phát trước thu hồi, quyền mà người dùng cho phép người dùng khác cịn có hiệu lực Nói cách khác, hai người dùng khác cấp phát quyền đối tượng sở liệu cho người dùng khác, sau người thu thu hồi lại quyền cấp phát quyền mà người dùng thứ hai cấp phát có hiệu lực
(130)Giả sử sở liệu ta có người dùng A, B C A B có quyền sử dụng cấp phát quyền bảng R A thực lệnh sau để cấp phát quyền xem liệu bảng R cho C:
GRANT SELECT ON R TO C
Và B cấp phát quyền xem bổ sung liệu bảng R cho C câu lệnh:
GRANT SELECT, INSERT ON R TO C
Như vậy, C có quyền xem bổ sung liệu bảng R Bây giờ, B thực lệnh:
REVOKE SELECT, INSERT ON R FROM C
Người dùng C khơng cịn quyền bổ sung liệu bảng R xem liệu bảng (quyền A cấp cho C hiệu lực)
Nếu ta cấp phát quyền cho người dùng câu lệnh GRANT với tuỳ chọn WITH GRANT OPTION thu hồi quyền câu lệnh REVOKE phải định tuỳ chọn CASCADE Trong trường hợp này, quyền chuyển tiếp cho người dùng khác đồng thời thu hồi
Ví dụ 7:
Ta cấp phát cho người dùng A bảng R với câu lệnh GRANT sau: GRANT SELECT
ON R TO A
WITH GRANT OPTION
sau người dùng A lại cấp phát cho người dùng B quyền xem liệu R với câu lệnh:
(131)Nếu muốn thu hồi quyền cấp phát cho người dùng A, ta sử dụng câu lệnh REVOKE sau:
REVOKE SELECT ON NHANVIEN FROM A CASCADE
Câu lệnh đồng thời thu hồi quyền mà A cấp cho B A B xem liệu bảng R Trong trường hợp cần thu hồi quyền chuyển tiếp khả chuyển tiếp quyền người cấp phát quyền với tuỳ chọn WITH GRANT OPTION, câu lệnh REVOKE ta định mệnh đề GRANT OPTION FOR
Ví dụ 8: Trong ví dụ trên, ta thay câu lệnh: REVOKE SELECT
ON NHANVIEN FROM A CASCADE câu lệnh:
REVOKE GRANT OPTION FOR SELECT ON NHANVIEN
FROM A CASCADE
Thì B khơng cịn quyền xem liệu bảng R đồng thời A chuyển tiếp quyền mà ta cấp phát cho người dùng khác (tuy nhiên A quyền xem liệu bảng R)
5.2.2.Thu hồi quyền thực thi câu lệnh
Việc thu hồi quyền thực thi câu lệnh sở liệu (CREATE DATABASE, CREATE TABLE, CREATE VIEW, ) thực đơn giản với câu lệnh REVOKE có cú pháp:
REVOKE ALL | các_câu_lệnh_cần_thu_hồi FROM danh_sách_người_dùng
Ví dụ 9:
(132)sở liệu, ta sử dụng câu lệnh:
REVOKE CREATE TABLE FROM thuchanh
CÂU HỎI, BÀI TẬP
Câu 1: Tạo user SQL gồm: HV1,HV2, HOTENHOCVIEN mật 123 (ví dụ hotenhocvien: NguyenvanA)
Câu 2: Gán quyền db_owner cho database QLSV với user tạo Câu 3: Tạo nhóm hocvien , thêm HV1, HV2 vào nhóm
(133)TÀI LIỆU THAM KHẢO
[1] Database Management System, simply easy learning, 2015 (free book) https://www.tutorialspoint.com/dbms/
[2] Beginning Microsoft SQL Server 2012 Programming, Paul Atkinson, Robert Vieira, All Rights Reserved A Division of John Wiley & Sons, Inc, 2012
https://www.microsoft.com/en-us/sql-server/sql-server-downloads https://www.sqlmanager.net/en/products/mssql/manager/download SQL Server