Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 131

KHOA CÔNG NGHỆ THÔNG TIN

CHƯƠNG 2:
NGÔN NGỮ SQL VÀ CÁC LOẠI RÀNG BUỘC DỮ LIỆU

Biên soạn: ThS.Phạm Văn Đăng GV: ThS. Đỗ Hoàng Nam


Email: pvdang@ntt.edu.vn Email: namdh@ntt.edu.vn
DĐ: 0937 091 063

1
NTTU-2022
NỘI DUNG

1. CÁC LOẠI DỮ LIỆU

2. TẠO BẢNG

3. TRUY VẤN DỮ LIỆU

4. TRUY VẤN PIVOT VÀ UNPIVOT

5. TRUY VẤN CROSS VÀ OUTER APPLY

6. CÁC LOẠI RÀNG BUỘC DỮ LIỆU

7. BÀI TẬP
2
NTTU-2022
1.CÁC LOẠI DỮ LIỆU

3
NTTU-2022
1. Các loại dữ liệu

Trước khi đi vào các thao tác đối với bảng, ta xét các kiểu dữ liệu
được sử dụng trong SQL Server.
TT Kiểu dữ liệu Ý nghĩa

1 Bigint Số nguyên 8bytes

2 Binary[(n)]
Dữ liệu nhị phân có kích thước cố định n byte. Kích
thước lưu trữ là n+4 byte. Với 1<n<8000
3 Bit Dữ liệu số nguyên nhận các giá trị 0, 1 hoặc NULL
Dữ liệu ký tự, có chiều dài n ký tự, không hỗ trợ Unicode.
4 Char[(n)]
Với độ dài 1<n<8000.
Tham chiếu tới một con trỏ. Chỉ dùng cho các biến và tham số
5 Cursor
trong stored procedure.
4
NTTU-2022
1. Các loại dữ liệu
TT Kiểu dữ liệu Ý nghĩa

6 Datetime Dữ liệu ngày giờ. Giá trị nhận từ 1/1/1753 đến 31/12/9999

7
decimal[(p,[s])] Dữ liệu số thập phân. p là tổng số ký tự số có thể được
numeric[(p,[s])] lưu, s là số chữ số thập phân.
Dữ liệu số động có phạm vi từ -1.79E+308 đến
8 float[(n)]
1.79E+308
Dữ liệu nhị phân có chiều dài thay đổi, dài hơn 8000 byte
9 image
và tối đa là 2^31-1 byte.
10 integer hoặc int Dữ liệu số nguyên từ -2^31 đến 2^31-1. Chiếm 4 byte.
11 money Dữ liệu kiểu tiền tệ từ -2^63 đến 2^63. Chiếm 8byte.

5
NTTU-2022
1. Các loại dữ liệu

TT Kiểu dữ liệu Ý nghĩa

Dữ liệu ký tự, có chiều dài cố định n ký tự. Có hỗ trợ


12 nchar[(n)]
Unicode. Với 1<n<4000. Chiếm 2n byte.
Dữ liệu ký tự có chiều dài thay đổi, với chiều dài tối đa là
13 ntext
2^30-1 ký tự. Hỗ trợ unicode.
Dữ liệu ký tự có chiều dài thay đổi với n ký tự. Có hỗ trợ
14 nvarchar[(n)]
Unicode. Với 1<n<4000.
Dữ liệu số thực động, phạm vi từ - 3.4E+38 đến 3.4E+38.
15 real
Chiếm 4 byte.
16 smalldatetime Dữ liệu ngày giờ từ 1/1/1900 đến 6/6/2079. Chiếm 4 byte.

6
NTTU-2022
1. Các loại dữ liệu
TT Kiểu dữ liệu Ý nghĩa

17 smallint Dữ liệu số nguyên từ -2^15 đến 2^15-1. Chiếm 2 byte.


18 smallmoney Dữ liệu kiểu tiền tệ từ -2^31 đến 2^31. Chiếm 4 byte.
Cho phép giữ các giá trị của các kiểu dữ liệu khác nhau
19 sql_variant
(tất cả các kiểu dữ liệu hệ thống khác).
Đây là kiểu dữ liệu đặc biệt, do SQL Server định nghĩa là
20 sysname
kiểu nvarchar(128). Chiếm 256 byte.
Tương tự như bảng tạm, khai báo gồm danh sách các cột
21 table
và các kiểu dữ liệu.
Dữ liệu ký tự có chiều dài thay đổi, dài hơn 8000byte. Có
22 text
thể lưu tới 2^31 ký tự. Không hỗ trợ Unicode.

7
NTTU-2022
1. Các loại dữ liệu

TT Kiểu dữ liệu Ý nghĩa

Cột timestamp được cập nhật tự động mỗi khi dòng được
23 timestamp thêm hoặc được cập nhật. Mỗi bảng chỉ có thể có 1 cột
timestamp. Kích thước lưu trữ là 8 byte.
24 tinyint Dữ liệu số nguyên từ 0 đến 255. Chiếm 1 byte.
Giá trị nhị phân 16 byte, là số định danh duy nhất toàn
25 unique-identifier
cục.
26 varbinary[(n)] Dữ liệu nhị phân n có chiều dài thay đổi. Với 1<n<8000
Dữ liệu ký tự có chiều dài thay đổi với n ký tự. Không hỗ
27 varchar[(n)
trợ Unicode. Với 1<n<4000.

8
NTTU-2022
1. Các loại dữ liệu

Phân biệt:
Decimal (p, s): có p chữ số, trong đó có s chữ số sau dấu
phẩy.
Ví dụ:
Decimal(4, 2): 15,426  15,43

9
NTTU-2022
1. Các loại dữ liệu
Dữ liệu cho người dùng định nghĩa
Trên cơ sở dữ liệu hệ thống cung cấp, người dùng có thể
định nghĩa thêm một số loại dữ liệu khác.
(1) Tạo dữ liệu cho người dùng định nghĩa
Cú pháp:
EXEC sp_addType Tên dữ liệu mới,
‘Tên dữ liệu cơ sở’,
‘Điều kiện’
10
NTTU-2022
1. Các loại dữ liệu

Ví dụ:
EXEC sp_addType Test1, ‘Smallint’, ‘Not Null’
EXEC sp_addType Test2, ‘nvarchar(10)’, ‘Null’
Trong đó:

 sp_addType: là một thủ tục hệ thống tạo dữ liệu cho người dùng
định nghĩa.
 Tất cả các dữ liệu do người dùng định nghĩa trong Cơ sở dữ liệu
model đều có thể sử dụng trong các Cơ sở dữ liệu sau đó.
11
NTTU-2022
1. Các loại dữ liệu

(2) Xóa dữ liệu cho người dùng định nghĩa


Cú pháp:
EXEC sp_dropType Tên kiểu dữ liệu mới

Ví dụ:
EXEC sp_dropType Test1

12
NTTU-2022
2.TẠO BẢNG – CREATE TABLE

13
NTTU-2022
2. Tạo bảng – Create Table

Tạo bảng bằng hai phương pháp


(1) New Query (Ctrl + N)
(2) SQL Server Management Studio (Administrator)

14
NTTU-2022
(1) New Query (Ctrl + N)
(1.1) Tạo bảng
Khi tạo bảng để ý đến một số yếu tố sau:
 Tạo tối đa 2.000.000 table / 1CSDL
 Tối đa 1024 cột / 1Table
 8060 byte / Row
 Image và text chiếm 16 byte/Row
15
NTTU-2022
(1) New Query (Ctrl + N)

(1.1) Tạo bảng


Cú pháp:
Create Table <Tên Table>
(
Tên Cột Loại DL Ràng buộc,
.....
)

16
NTTU-2022
(1) New Query (Ctrl + N)

(1.1) Tạo bảng


Ví dụ: Create Table THISINH(
MSTS char(10) not null primary key,
TenTSN nvarchar(30) not null,
NamSinh datetime not null,
QQ nvarchar(50) not null,
MST char(10)not null,
constraint FK_THISINH_TRUONG foreign key
(MST) references TRUONG (MST)
)

17
NTTU-2022
(1) New Query (Ctrl + N)
(1.1) Tạo bảng
Cột có thuộc tính Identity. Dùng Identity để hệ thống phát sinh các số một cách
tự động. Cột có thuộc tính trên thường dùng làm khóa chính.
Cú pháp:
Create Table <Tên Table>
(
Tên Cột Loại DL Indentity(Seed, Increment),
.....
)

18
NTTU-2022
(1) New Query (Ctrl + N)
(1.1) Tạo bảng
Chú ý :
 Trên 1 table chỉ có 1 cột là identity
 Không thể cập nhật cột này
 Không cho phép NULL
 Chỉ sử dụng cho (số nguyên , numeric và decimal)
 Seed : giá trị ban đầu
 Increment : Khoảng cách 2 số kề nhau

19
NTTU-2022
(1) New Query (Ctrl + N)

(1.1) Tạo bảng


Ví dụ:
create table DIEMCHUAN(
MS Int Identity(7146, 2) Not Null,
Diem float Not null,
ChuyenNganh nvarchar(50) Not null
)

20
NTTU-2022
(1) New Query (Ctrl + N)
(1.2) Xóa bảng
Khi xóa bảng là xóa cấu trúc và dữ liệu của bảng. Chú ý là trước khi xóa bảng,
cần xóa các đối tượng phụ thuộc vào bảng như: View, Các ràng buộc toàn vẹn. Để
thấy các đối tượng phụ thuộc vào bảng, ta dùng thủ tục của hệ thống kiểm tra phụ
thuộc.
Cú pháp:
Exec SP_DEPENDS <Tên Bảng>
Ví dụ:
Exec SP_DEPENDS KETQUA
Exec SP_DEPENDS THISINH

21
NTTU-2022
(1) New Query (Ctrl + N)
(1.3) Thay đổi bảng
Khi thay đổi bảng thì chúng ta có thể thay đổi gồm:
 Thêm cột vào bảng
 Đổi cột trong bảng
 Xóa cột khỏi bảng
(1.3.1) Thêm cột vào bảng
Cú pháp:
Alter Table <Tên Bảng> Add <Tên cột> Loại dữ liệu, …
Ví dụ: Alter Table THISINH Add DT char(10) NULL,
EMAIL varchar(50) NULL

22
NTTU-2022
(1) New Query (Ctrl + N)
(1.3.2) Đổi cột trong bảng
Cú pháp:
Alter Table <Tên Bảng> Alter Column <Tên cột> Kiểu DL RB
Ví dụ:
Alter Table THISINH Alter Column DT char(12) NULL
Alter Table THISINH Alter Column EMAIL varchar(40) null
Chú ý:
Đổi tên Cột(Field) và tên Bảng(Table) bằng cách sử dụng thủ tục của hệ thống như sau:
SP_RENAME 'Tên Bảng[.Tên Cột] cũ', 'Tên Bảng mới' or 'Tên Cột mới' [, 'Column']
Ví dụ: SP_RENAME 'THISINH', 'SINHVIEN'
SP_RENAME 'THISINH.TENTS', 'HOTENTS', 'COLUMN'

23
NTTU-2022
(1) New Query (Ctrl + N)

(1.3.3) Xóa cột khỏi bảng


Cú pháp:
Alter Table <Tên Bảng> Drop Column <Tên cột>,…
Ví dụ:
Alter Table THISINH Drop Column DT, EMAIL
Chú ý:
 Nếu cột đã có Index cần xoá Index trước.
 Nếu cột đã có RB cần xoá RB trước.
 Không thể phục hồi sau khi xóa.

24
NTTU-2022
2. Tạo bảng – Create Table

Tạo bảng bằng hai phương pháp


(2) SQL Server Management Studio (Administrator)
Yêu cầu sinh tự tìm hiểu làm bằng phương pháp này!!!

25
NTTU-2022
3.TRUY VẤN DỮ LIỆU – QUERY DATA

26
NTTU-2022
Truy vấn dữ liệu

27
NTTU-2022
Truy vấn cơ bản

28
NTTU-2022
Cho CSDL QL Nhân sự và Đề án

(1) Database Diagram

(2) Tạo tác bảng, PK và nhập dữ liệu

(3) Tạo các khóa ngoại - FK

29
NTTU-2022
(1) Database Diagram

30
NTTU-2022
(2) Tạo bảng, PK và nhập dữ liệu

31
NTTU-2022
(2) Tạo bảng, PK và nhập dữ liệu

32
NTTU-2022
(2) Tạo bảng, PK và nhập dữ liệu

33
NTTU-2022
(2) Tạo bảng, PK và nhập dữ liệu

34
NTTU-2022
(2) Tạo bảng, PK và nhập dữ liệu

35
NTTU-2022
(2) Tạo bảng, PK và nhập dữ liệu

36
NTTU-2022
(3) Tạo các khóa ngoại - FK

37
NTTU-2022
Ví dụ

38
NTTU-2022
Mệnh đề SELECT

39
NTTU-2022
Mệnh đề SELECT (tt)

40
NTTU-2022
Mệnh đề SELECT (tt)

41
NTTU-2022
Mệnh đề SELECT (tt)

42
NTTU-2022
Mệnh đề SELECT (tt)
Loại bỏ các dòng trùng nhau

SELECT DISTINCT
LUONG LUONG
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’

LUONG
LUONG

30000
30000
25000
25000 - Tốn chi phí
25000
38000 - Người dùng muốn thấy
38000

43
NTTU-2022
Ví dụ

44
NTTU-2022
Mệnh đề WHERE

SELECT MANV, TENNV Biểu thức luận lý

FROM NHANVIEN, PHONGBAN


WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG

TRUE TRUE

45
NTTU-2022
Mệnh đề WHERE (tt)

Độ ưu tiên

SELECT MANV, TENNV


FROM NHANVIEN, PHONGBAN
WHERE (TENPHG=‘Nghien cuu’ OR TENPHG=‘Quan ly’) AND PHG=MAPHG

46
NTTU-2022
Mệnh đề WHERE (tt)

BETWEEN

SELECT MANV, TENNV


FROM NHANVIEN
WHERE LUONG>20000 AND LUONG<30000

SELECT MANV, TENNV


FROM NHANVIEN
WHERE LUONG BETWEEN 20000 AND 30000
47
NTTU-2022
Mệnh đề WHERE (tt)

NOT BETWEEN

SELECT MANV, TENNV


FROM NHANVIEN
WHERE LUONG NOT BETWEEN 20000 AND 30000

48
NTTU-2022
Mệnh đề WHERE (tt)

LIKE

SELECT MANV, TENNV


FROM NHANVIEN
WHERE DCHI LIKE ‘Nguyen _ _ _ _’
Ký tự bất kỳ

SELECT MANV, TENNV Chuỗi bất kỳ

FROM NHANVIEN
WHERE DCHI LIKE ‘Nguyen %’
49
NTTU-2022
Mệnh đề WHERE (tt)

NOT LIKE

SELECT MANV, TENNV


FROM NHANVIEN
WHERE HONV LIKE ‘Nguyen’

SELECT MANV, TENNV


FROM NHANVIEN
WHERE HONV NOT NOT LIKE ‘Nguyen’
50
NTTU-2022
Mệnh đề WHERE (tt)

Ngày giờ
SET DATEFORMAT YMD

SELECT MANV, TENNV


FROM NHANVIEN
WHERE NGSINH BETWEEN ‘1955-12-08’ AND ‘1966-07-19’

‘1955-12-08’ YYYY-MM-DD ’17:30:00’ HH:MI:SS


’12/08/1955’ MM/DD/YYYY ’05:30 PM’
‘December 8, 1955’

‘1955-12-08 17:30:00’
51
NTTU-2022
Mệnh đề WHERE (tt)
NULL  Sử dụng trong trường hợp
 Không biết (value unknown)
 Không thể áp dụng (value inapplicable)
 Không tồn tại (value withheld)
 Những biểu thức tính toán có liên quan đến giá trị NULL sẽ cho ra
kết quả là NULL
 x có giá trị là NULL
 x + 3 cho ra kết quả là NULL
 x + 3 là một biểu thức không hợp lệ trong SQL
 Những biểu thức so sánh có liên quan đến giá trị NULL sẽ cho ra kết
quả là UNKNOWN
 x = 3 cho ra kết quả là UNKNOWN
 x = 3 là một so sánh không hợp lệ trong SQL

52
NTTU-2022
Mệnh đề WHERE (tt)

NULL
SELECT MANV, TENNV
FROM NHANVIEN
WHERE MA_NQL IS NULL

SELECT MANV, TENNV


FROM NHANVIEN
WHERE MA_NQL IS NOT NULL

53
NTTU-2022
Mệnh đề FROM

54
NTTU-2022
Mệnh đề ORDER BY

55
NTTU-2022
Mệnh đề ORDER BY (tt)

56
NTTU-2022
Phép toán tập hợp trong SQL

57
NTTU-2022
Phép toán tập hợp trong SQL(tt)

58
NTTU-2022
Phép toán tập hợp trong SQL(tt)

Ví dụ 1

59
NTTU-2022
Phép toán tập hợp trong SQL(tt)
Ví dụ 2:

60
NTTU-2022
Truy vấn lồng

61
NTTU-2022
Truy vấn lồng (tt)

62
NTTU-2022
Truy vấn lồng

63
NTTU-2022
Ví dụ - Truy vấn lồng phân cấp

64
NTTU-2022
Ví dụ - Truy vấn lồng phân cấp

65
NTTU-2022
Ví dụ - Truy vấn lồng phân cấp

66
NTTU-2022
Ví dụ - Truy vấn lồng phân cấp

67
NTTU-2022
Ví dụ - Truy vấn lồng phân cấp

68
NTTU-2022
Ví dụ - Truy vấn lồng tương quan

69
NTTU-2022
Nhận xét IN và EXISTS

70
NTTU-2022
Phép chia trong SQL

71
NTTU-2022
Phép chia trong SQL(tt)

72
NTTU-2022
Phép chia trong SQL(tt)

Ví dụ 1:

73
NTTU-2022
Phép chia trong SQL(tt)

Ví dụ 1:

74
NTTU-2022
Hàm kết hợp

75
NTTU-2022
Hàm kết hợp

Ví dụ 1:

76
NTTU-2022
Hàm kết hợp

Ví dụ 2:

77
NTTU-2022
Hàm kết hợp

Ví dụ 3:

78
NTTU-2022
Gom nhóm

79
NTTU-2022
Gom nhóm

Ví dụ:

80
NTTU-2022
Điều kiện trên nhóm

81
NTTU-2022
Điều kiện trên nhóm

Ví dụ 1

82
NTTU-2022
Điều kiện trên nhóm

Ví dụ 2

83
NTTU-2022
Nhận xét

84
NTTU-2022
Nhận xét

85
NTTU-2022
Ví dụ 1

86
NTTU-2022
Ví dụ 2

87
NTTU-2022
Ví dụ 3

88
NTTU-2022
Một số truy vấn khác

89
NTTU-2022
Truy vấn con ở mệnh đề FROM

90
NTTU-2022
Truy vấn con ở mệnh đề FROM

91
NTTU-2022
Điều kiện kết ở mệnh đề FROM

92
NTTU-2022
Điều kiện kết ở mệnh đề FROM

Ví dụ 1:

93
NTTU-2022
Điều kiện kết ở mệnh đề FROM

Ví dụ 2:

94
NTTU-2022
Điều kiện kết ở mệnh đề FROM

Ví dụ 3:

95
NTTU-2022
Cấu trúc CASE

96
NTTU-2022
Cấu trúc CASE

Ví dụ 1:

97
NTTU-2022
Cấu trúc CASE

Ví dụ 2:

98
NTTU-2022
Cấu trúc CASE

Ví dụ 2:

99
NTTU-2022
6. CÁC LOẠI RÀNG BUỘC DỮ LIỆU
(TYPES OF DATA CONSTRAINTS)

100
NTTU-2022
6. Các loại ràng buộc dữ liệu

6.1. Các loại RBTV


Chúng ta gồm có bốn nhóm sau:
(1) Ràng buộc miền giá trị
(2) Ràng buộc trên thực thể
(3) Ràng buộc tham chiếu
(4) Ràng buộc do người dùng định nghĩa

101
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.1. Các loại RBTV
(1) Ràng buộc miền giá trị
Là chỉ ra tập các giá trị hợp lệ trên một cột trong một bảng.

Ví dụ:
Ta có bảng KETQUA(MSTS, MSM, LANTHI, DIEM)
Vậy RBTV về miền giá trị cho cột DIEM như sau:
0<=DIEM<=10

102
NTTU-2022
6. Các loại ràng buộc dữ liệu

6.1. Các loại RBTV


(2) Ràng buộc trên thực thể
Là tất cả các dòng trên một bảng có một khóa chính để phân biệt
với các dòng khác, đó là khóa chính.

Ví dụ:
MON(MSM, TENM)
KETQUA(MSTS, MSM, LANTHI, DIEM)
THISINH(MSTS, TENTS, NAMSINH, QQ, MST)

103
NTTU-2022
6. Các loại ràng buộc dữ liệu

6.1. Các loại RBTV


(3) Ràng buộc tham chiếu
Là làm chắc chắn mối quan hệ giữa khóa chính (Primary Key - PK) và khóa
ngoại (Foreign Key - FK), thể hiện trên ba thao tác: Insert, Update và Delete.
Ví dụ:
MON(MSM, TENM)
KETQUA(MSTS, MSM, DIEM)
Có mối quan hệ giữa MSM(MON) và MSM(KETQUA)

104
NTTU-2022
6. Các loại ràng buộc dữ liệu

6.1. Các loại RBTV


(4) Ràng buộc do người dùng định nghĩa
Là các ràng buộc không thuộc các ràng buộc bên.
Ví dụ:
THISINH(MSTS, TENTS, NAMSINH, QQ, MST, DIEMTB, XEPLOAI)
Ta các RBTV được định nghĩa theo qui tắc sau:
DIEMTB>=8 XEPLOAI : Giỏi
6.5<=DIEMTB<=7 XEPLOAI : Khá
5<=DIEMTB<6.5 XEPLOAI : Trung bình
DIEMTB<5 XEPLOAI : Yếu

105
NTTU-2022
6. Các loại ràng buộc dữ liệu

6.2. Các phương pháp đảm bảo RBTV


Để thực hiện cài đặt các RBTV trên, chúng ta có thể dựa vào các
phương pháp cài đặt RBTV như sau:
(1) Tạo các ràng buộc với từ khóa Constraint.
(2) Viết Stored Procedure, Trigger từ Database Server.
(3) Viết đoạn chương trình từ mức ứng dụng (Application).

106
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.3. Sử dụng các RBTV
Bảng mô tả các loại RBTV
TT Loại toàn vẹn Loại ràng buộc Mô tả

Default Giá trị trên cột khi không nói rõ

1 Miền giá trị Check Xác định qui luật hợp lệ cho DL trên cột
Foreign Key Giá trị khóa ngoại phải đối sánh khoá chính
Primary Key Null không cho phép, duy nhất trên mỗi hàng
2 Thực thể
Unique Null cho phép, Không cho phép trùng

107
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.3. Sử dụng các RBTV
Bảng mô tả các loại RBTV

TT Loại toàn vẹn Loại ràng buộc Mô tả

3 Tham chiếu Foreign Key Giá trị khóa ngoại phải đối sánh khoá chính
Check,
Người dùng định
4
nghĩa
Stored Procedure, Xác định qui luật hợp lệ cho DL trên cột
Trigger,..

108
NTTU-2022
6. Các loại ràng buộc dữ liệu

6.4. Định nghĩa RBTV


 Mức trực tiếp bằng câu lệnh Create Table …
 Mức gián tiếp bằng câu lệnh Alter Table …
 Cũng có thể dùng SQL Server Management Studio
(Administrator)

109
NTTU-2022
6. Các loại ràng buộc dữ liệu
(1) Cài đặt RBTV mức trực tiếp bằng câu lệnh: Create Table ….
Cú pháp:
Create Table <Tên Table> (
Tên cột 1 Kiểu DL1 Ràng buộc1 ,
Tên cột 2 Kiểu DL2 Ràng buộc2 , . . .
)
Ví dụ 1: Create Table HOADON (
MSHD Int Constraint PK_HD Primary Key,
NGAYLHD Datetime,
LOAIHD Nchar(10) Not Null,
Constraint KT_LOAIHD Check(LoaiHD In (N‘Xuất’, N’Nhập’, ‘Xuat’, ‘Nhap’, ‘’))
)

110
NTTU-2022
6. Các loại ràng buộc dữ liệu
(1) Cài đặt RBTV mức trực tiếp bằng câu lệnh: Create Table ….
Ví dụ 2:
Create Table MUONTRA
(
MSKH Int Not Null,
MAMH Int Not Null,
LANMUON Int Not Null,
NGAYTHUE Datetime Not Null,
NGAYTRA Datetime,
Constraint PK_KH Primary Key (MSKH, LANMUON),
Constraint CK_Ngay Check (NGAYTHUE <= NGAYTRA)
)

111
NTTU-2022
6. Các loại ràng buộc dữ liệu
(2) Cài đặt RBTV mức gián tiếp bằng câu lệnh: Alter Table ….
Cú pháp:
Alter Table <Tên Table> Add Constraint <Tên RB> Kiểu RB,…
Lưu ý: Mức gián tiếp này thì Table muốn cài đặt RBTV đã tồn tại trong DB.
Ví dụ:
Alter Table HOADON Add
(Constraint PK_HD Primary Key(MSHD),
Constraint KT_LOAIHD Check(LoaiHD In (‘X’, ’N’))

112
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.4. Định nghĩa RBTV
Chú ý :
 Mặc định SQL Server kiểm tra DL khi thêm một RB.

 Nên xây dựng các đoạn CT trên Client để phát hiện các vi phạm khi bổ
sung DL trên Server.
 Có thể xoá các RB mà không cần xóa các Table.

 Nên chủ động đặt tên RB hơn là để SQL Server phát sinh tự động.

 Các ràng buộc lưu trong các Table của hệ thống gồm:

SysConstraints, SysComments, SysReferences


 Thông tin trên ràng buộc có thể thấy thông qua:

Exec SP_HelpConstraint THISINH


113
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.5. RBTV dạng Default mức gián tiếp
Ràng buộc Default nhập tự dộng một giá trị trong một cột khi
không cần chỉ ra trong cân lệnh Insert.
Ví dụ:
Alter Table HOADON
Add Constraint DF_LoaiHD Default ‘X’ for LOAIHD
Chú ý:
Không áp dụng cho cột Identity

114
NTTU-2022
6. Các loại ràng buộc dữ liệu

6.6. RBTV dạng Check mức gián tiếp


Dùng giới hạn giá trị DL trên một hay nhiệu cột
Ví dụ:
Alter Table KHACHHANG
Add Constraint CK_SDT
Check (SDT like ‘[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’)
Input: 090378654A
Chú ý:
Không dùng cho cột có Timestamp, Identity,…
Có thể tham chiếu trên nhiều cột.

115
NTTU-2022
6. Các loại ràng buộc dữ liệu

6.7. RBTV dạng Unique mức gián tiếp


Chỉ ra hai dòng không thể cùng giá trị.
Ví dụ:
Xét số chứng minh nhân dân (SOCMND)
Alter Table KHACHHANG Add Unique(SOCMND)

Chú ý: Có 2 qui tắc phải tuân theo


(1) Cột có Unique thì cho phép NULL.
(2) Có thể nhiều Unique trên một Table.
116
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.8. RBTV dạng khoá ngoại (Foreign Key) mức gián tiếp
Định nghĩa một tham chiếu tới các cột của một khoá chính
Syntax: Alter Table <Bảng đi TC> Add Constraint <Tên FK>
Foreign Key (TT đi TC) References <Bảng bị TC>(TT bị TC)
[, Constraint <Tên FK>
Foreign Key (TT đi TC) References <Bảng bị TC>(TT bị TC) ]

Ví dụ: Alter Table HOADON Add Constraint FK_HD Foreign Key (MSKH)
References KHACHHANG(MSKH)
Chú ý:
 Có thể tham chiếu một hay nhiều cột.
 Số lượng và loại DL khoá ngoại và khoá chính phải tương hợp.

117
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.9. RBTV dạng khoá ngoại (Foreign Key) mức trực tiếp
Trong Table có khoá ngoại tham chiếu đến khoá chính trong cùng
một Table, cho nên không được dùng từ khóa Foreign Key.
Ví dụ:
Create Table NHANVIEN
(
MSNV int Constraint PK_NV Primary Key,
HOTEN nvarchar(3) Not Null,
NGAYSINH datetime Not Null,
MSTP int Constraint FK_NV References (MSNV)
)
118
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.10. Làm mất tính hiệu lực kiểm tra DL khi thêm ràng buộc
Khi Table đã có DL nếu thêm một ràng buộc SQL Server tự động kiểm tra DL.
Tuy nhiên chúng ta có thể làm mất tính kiểm tra này.
Chú ý:
 Chỉ làm mất RB check và Foreign key.

 Dùng phát biểu: With Nocheck.


 DL bổ sung sau khi có RB vẫn bị kiểm tra.

Ví dụ:
Alter Table ChiTietHD With Nocheck Add Constraint CH_SL Check
(SL>0)
Alter Table KHACHHANG Nocheck Constraint FK_KH
Alter Table KHACHHANG Check Constraint FK_KH
119
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.11. Sử dụng Default
Khái niệm:
Default chỉ có một giá trị trên một cột nếu không xác định khi Insert dữ liệu
Chú ý:
 Chỉ có thể kết nối một default tới một cột.
 Giá trị Default sẽ được kiểm định với bất kỳ ràng buộc Check nào.
 Không thể đưa giá trị Default vào cột có dữ liệu do người dùng định nghĩa
nếu Default đã kết nối tới một kiểu dữ liệu khác.
Cú pháp:
Create Default <Tên Default> As <Biểu thức hằng>

120
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.11. Sử dụng Default
Kết nối Default: Sau khi tạo một Default, cần nối kết Default tới một cột hoặc kiểu
dữ kiệu do nhiều người dùng định nghĩa nhờ thủ tục SP_BINDEFAULT
Cú pháp:
Exec SP_BINDEFAULT TENDEFAULT, ‘DoiTuong’
Để bỏ kế nối:
Exec SP_UNBINDEFAULT DEFAULT, ‘DoiTuong’
Ví dụ:
Create Default SDTDefault As ‘(08) 000_0000’
Sau đó:
Exec SP_BINDEFAULT ‘SDTDefault’, ‘KHACHHANG.SDT’

121
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.12. Sử dụng Rule
Khái niệm:
Là quy tắc chỉ ra các giá trị có thể chấp nhận được Insert vào một cột.
Chú ý:
Chỉ có thể kết nối một quy tắc đến một cột.
Quy tắc có thể chứa bất cứ mệnh đề gì xuất hiện trong Where.
Cú pháp:
Create Rule <Tên Rule> As <Biểu thứcDK>
Ví dụ:
Create Rule @KetQua In (‘Đậu, ’Rớt’)

122
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.12. Sử dụng Rule
Để kết nối một Rule tới một cột hay kiểu DL do người dùng định nghĩa
dùng thủ tục SP_BINDRULE.
Cú pháp: Exec SP_BINDRULE <Tên Rule> , <Tên Đối Tượng>

Ví dụ:
Create Rule r_MGTLuong As @Luong>=1000 And @Luong <5000
Exec SP_BINDRULE r_MGTLuong , ’NhanVien.Luong’

Create Rule r_MGTMien As @Mien In (‘Bắc’, ‘Trung’, ‘Nam’)


Exec SP_BINDRULE r_MGTMien , ’NhanVien.Mien’

123
NTTU-2022
6. Các loại ràng buộc dữ liệu

6.13. Xóa Default và Rule


Trước khi xoá Default và Rule phải bỏ các kết nối Default, Rule
với các cột tạo trước đó.
Cú pháp:

Drop Default <Tên Default>


Drop Rule <Tên Rule>

124
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.13. Xóa Default và Rule
Ví dụ:
Exec SP_UNBINDRULE ‘NhanVien.Luong’
Drop Rule r_MGTLuong

Exec SP_UNBINDEFAULT ‘KHACHHANG.SDT’


Drop Default r_MDSDT
Chú ý:
 Chỉ tạo nên Default và Rule khi phát huy tính hữu dụng trên nhiều đối
tượng.
 Phương pháp tốt nhất nên dùng ràng buộc.

125
NTTU-2022
6. Các loại ràng buộc dữ liệu

6.14. Sử dụng Trigger để xây dựng các ràng buộc dữ liệu


 Làm chắc chắn dữ liệu nhờ hỗ trợ các ràng buộc toàn vẹn phức tạp.
 Cung cấp cơ chế giám sát tinh vi trên dữ liệu.
 Trên môi trường phân tán, hỗ trợ cho tính đồng nhất dữ liệu, trigger
có thể bị bắn phá dây chuyền nếu trong Trigger có phát biển Insert,
Update, Delete trên các table mà có định nghĩa Trigger khác, cho
nên cẩn thận khi dùng Trigger.
126
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.14. Sử dụng Trigger để xây dựng các ràng buộc dữ liệu
Ví dụ 1:
Có table Ngày Nghỉ Lễ: NGAYNGHILE (NGAYNGHI, LYDO)
 Cần xây dựng cơ chế kiểm tra khi thêm, xóa, sửa trên table NHANVIEN chỉ
được diễn ra vào:
 Từ thứ 2(MON), thứ 3(TUE),… thứ 6(FRI)
 Không phải ngày lễ
 Chỉ từ (8h -> 18h)

Ta thực hiện các công việc trên bằng cách sử dụng Trigger để thể hiện các
RBTV ở trên là tốt nhất.

127
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.14. Sử dụng Trigger để xây dựng các ràng buộc dữ liệu
Ví dụ 2:

128
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.14. Sử dụng Trigger để xây dựng các ràng buộc dữ liệu
Ví dụ 3:

129
NTTU-2022
7. Bài tập

Bài 1: Dựa vào quản lý Nhân sự và Đề án từ Slide 29-37 đã cho.


Yêu cầu Sinh viên hãy tìm ra các loại ràng buộc toàn vẹn sau:
(1) Ràng buộc tham chiếu

(2) Ràng buộc toàn vẹn về miền giá trị


(3) Ràng buộc toàn vẹn liên thuộc tính trên một thực thể
(4) Ràng buộc toàn vẹn liên thuộc tính trên nhiều thực thể

130
NTTU-2022
CHÚC CÁC BẠN THÀNH CÔNG

Q/A: namdh@ntt.edu.vn

NTTU-2022

You might also like