Professional Documents
Culture Documents
C2. Quản trị CSDL bằng SQL Server PDF
C2. Quản trị CSDL bằng SQL Server PDF
3
2. TRANSACT - SQL
Nhóm định nghĩa dữ liệu: Nhóm này gồm các câu lệnh
CREATE, ALTER, DROP table, dùng để tạo, sửa đổi
hoặc xóa bảng dữ liệu. Các lệnh này được sử dụng để
định nghĩa cấu trúc một table.
Nhóm điều khiển dữ liệu: Gồm các lệnh GRANT, DENY,
REVOKE,… dùng để phân quyền truy cập của các đối
tượng table, function, view,…
Nhóm thao tác dữ liệu: Là tập hợp các lệnh để thao tác
trực tiếp với dữ liệu có trong table, giúp truy vấn, tìm kiếm
dữ liệu nhanh chóng. Các câu lệnh nhóm này gồm
INSERT, UPDATE, SELECT, DELETE.
4
Quy ước trong T-SQL
Các đối tượng: Table, View, Index, Store
procedure, Trigger,…
Truy cập đến bảng do người khác sở
hữu sử dụng:
tên_người_sở_hữu.tên_bảng
Truy cập đến cột cùng tên
phải sử dụng:
tên_bảng.tên_cột
5
CẤU TRÚC MỘT KHỐI LỆNH CÓ DẠNG NHƯ SAU
BEGIN
END
SỰ KHÁC NHAU GIỮA SQL VÀ T-SQL
Các thành phần trong T-SQL
Các kiểu dữ liệu Biến
Hàm
Toán tử
Chú thích
Giá trị NULL
2.1. Các kiểu dữ liệu
Char(n): kiểu chuỗi với độ dài cố định là n
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 chính xác
Nvarchar(n): kiểu chuỗi với độ dài chính xác hỗ trợ
Unicode
Int số nguyên
Float | Real: số thực
Datetime: ngày giờ, chính xác đến giây
Smalldatetime: ngày giờ, chính xác đến phút
9
2.1. Các kiểu dữ liệu
Text: kiểu chuỗi với độ dài lớn (tối đa 2,147,483,647)
Ntext: kiểu chuỗi với độ dài lớn có hỗ trợ Unicode
(1,073,741, 823)
Bit: nhận hai giá trị 0 và 1
Money: tiền tệ
Binary: kiểu nhị phân với độ dài cố định
Varbinary: kiểu nhị phân với độ dài chính xác
Image: kiểu hình ảnh
10
CÁC ĐỐI TƯỢNG CẦN SỬ DỤNG KIỂU DỮ LIỆU
15
Biến cục bộ
Trong Transact-SQL, biến cục bộ được khai báo và sử dụng
tạm thời khi thực thi câu lệnh SQL
Cú pháp:
Declare @tên_biến kiểu_dữ_liệu
Trong đó:
• @tên_biến: đặt theo quy tắc đặt tên, phải bắt đầu bằng ký
hiệu @
• Kiểu_dữ_liệu: kiểu dữ liệu hệ thống hoặc kiểu dữ liệu
người dùng
Ví dụ:
declare @manv int
16
Biến cục bộ - Khai báo biến
Cú pháp
Declare tên_biến Kiểu_dữ_liệu
Lưu ý: Tên biến phải bắt đầu bằng 1 ký tự @
Ví dụ
Declare @MaSinhVien nvarchar(10)
Declare @TienLuong float
Declare @Sum float, @Count int
Declare @temp TABLE (ma int,
ten nvarchar(10))
17
Lệnh gán
Set @TenBien = GiaTri Set
@TenBien = TenBien Set
@TenBien = BieuThuc
Select @TenBien = (KetQuaTruyVan)
Ví dụ :
Set @MaLop = ‘TH2001’
Set @SoSV = (select count(*) from SinhVien)
Set @MaLop = ‘TH’ + CAST
(Year(@NgayTuyenSinh) AS char(4))
HỆ QUẢN TRỊ CSDL PHÂN TÁN – SQLSERVER 18
Lệnh gán
Cũng có thể gán giá trị cho biến bằng câu
truy vấn thay vì chỉ thị set
Ví dụ :
SV(MaSV, HoTen, Tuoi)
Select @Var2 = HoTen, @Var1 = Tuoi
from SV
where MaSV = 1 Kiều dữ liệu phải tương ứng.
Nếu câu truy vấn trả về nhiều
dòng thì các biến chỉ nhận giá
trị từ dòng đầu tiên
21
Một số biến toàn cục thường dùng
Tên Biến Ý nghĩa
@@Error Cho biết các lệnh trước đó có lỗi
hay
không, nếu có lỗi @@Error <>0
@@Rowcount Cho biết số dòng bị tác động bởi
câu truy vấn gần nhất
@@Fetch_Status Trả về <>0 nếu lệnh duyệt Cursor
gây lỗi
22
2.3. Toán tử
Mức ưu Các toán tử
tiên
1 *, /, %
2 +(Add), -(Subtract)
3 =, >, <, >=, <=, <>
4 Not
5 And
6 All, Any, Between, Exits, In, Like, Or, Some
7 = (assignment)
23
2.4. Chú thích và nhập tiếng việt
Dòng đơn --
Nhóm dòng /* … */
Nhập tiếng việt trong Query:
-Chọn kiểu dữ liệu hỗ trợ Unicode (nchar, nvarchar,
ntext)
-Thêm tiền tố N (National Characters) vào trước chuỗi
cần nhập để báo cho SQL Server đây là chuỗi Unicode
VD:
Insert into PHONGBAN( MAPHG, TENPHG )
values('QL', N'Quản lý')
24
2.5. Giá trị null
Giá trị không xác định được biểu diễn bởi
NULL
Một giá trị không xác định xuất hiện có thể
do:
•Giá trị đó có tồn tại nhưng không biết
•Tại một thời điểm nào đó giá trị chưa có
nhưng rồi có thể sẽ có.
•Giá trị bị lỗi do tính toán (tràn số, chia
cho không, …)
25
3. Ngôn ngữ định nghĩa dữ liệu
Gồm:
CREATE
ALTER
DROP
26
3.1. Tạo Database
Để tạo Database trong SQL Server có 2 cách:
SQL Server Management Studio (thao tác trực quan)
Dùng T-SQL (Sử dụng câu lệnh)
27
Lệnh CREATE DATABASE
CREATE DATABASE <database-name>
[ ON [primary] [<filespec> [ ,… n] [ , <filegroup> [ , … n ] ] ]
[ LOG ON { <filespec> [ , … n ] } ]
[ FOR { Attach | Attach_Rebuild_Log}]
Trong đó:
<filespec> ::= ( NAME = logical_file_name,
FILENAME = os_file_name
[, SIZE = n [KB|MB|GB|TB] ]
[, MAXSIZE = max [KB|MB|GB|TB] | Unlimited ]
[, FILEGROWTH = grow [ KB|MB|GB|TB|% ])
<filegroup> ::= ( FILEGROUP filegroup_name [ DEFAULT ]
<filespec> [ ,… ])
28
Lệnh CREATE DATABASE (tiếp)
Ví dụ:
-Tạo Database MyDB với tập tin dữ liệu chính là
MyDB_Data.mdf, dung lượng khởi tạo là 10Mb, tối đa là 100Mb
và độ gia tăng kích thước cho phép là 10%.
-Tập tin bản ghi giao dịch là MyDB_Log.ldf với dung lượng ban
đầu là 2MB và kích thước tối đa không giới hạn, độ gia tăng là
10%
29
Create Database MyDB
On( Name = MyDB_Data,
FileName = 'C:\SQL_Home\MyDB_Data.mdf',
Size = 10MB,
Maxsize=100MB,
FileGrowth = 10%
)
Log On( Name = MyDB_Log,
FileName = 'C:\SQL_Home\MyDB_Log.ldf',
Size = 2MB,
Maxsize=Unlimited,
FileGrowth = 10%
)
30
3.2. Tạo bảng
Khi định nghĩa bảng mới cần xác định:
• Bảng mới được tạo ra với mục đích gì? Vài trò gì?
•Cấu trúc bảng gồm trường nào? Mỗi trường có ý nghĩa
gì? Kiểu dữ liệu của trường là gì? Có có cho phép nhận
giá trị Null không?
• Trường nào làm khóa chính?
•Bảng có quan hệ với bảng khác không? Quan hệ như
thế nào?
• Có ràng buộc – yêu cầu gì cho từng cột không?
Trong đó:
+ Mỗi bảng phải có tối thiểu một trường.
+ Nếu có nhiều trường thì ngăn cách chúng bởi dấu phẩy.
+ [các ràng buộc trên trường]: gồm các ràng buộc về
khuôn dạng dữ liệu hay các ràng buộc về bảo toàn dữ liệu:
NOT NULL, NULL, UNIQUE, DEFAULT, PRIMARY
KEY, FOREIGN KEY, IDENTITY, CHECK,…
32
Ví dụ 1:
use MyDB
CREATE TABLE NHANVIEN
( MANV CHAR(9) PRIMARY KEY,
TENNV VARCHAR(50) NOT NULL,
NS DATETIME,
DCHI VARCHAR(50),
GT NVARCHAR (3) NOT NULL
CHECK ( GT IN ('Nam', N'Nữ') ),
LUONG INT DEFAULT (10000),
MaPB INT
)
33
Ví dụ 2:
use MyDB
CREATE TABLE Customers
( customerID int primary key,
customerName nvarchar(50) not null,
address nvarchar(100) null,
birthday datetime null,
gender bit default('true') not null
)
34
*) Tham chiếu khóa ngoại
Với chỉ định khóa ngoại, ta có:
+ Tên bảng mà khóa ngoại tham chiếu đến.
+ Tên trường được tham chiếu đến.
+ ON DELETE: Xóa bản ghi phía 1 của quan hệ thì có xóa
các bản ghi phía nhiều hay không?
+ ON UPDATE: Sửa khóa chính phía 1 của quan hệ thì có sửa
khóa liên kết tại các bản ghi phía nhiều hay không?
35
Các trường hợp sử dụng tham chiếu khóa ngoại được xử lý:
• CASCADE: tự động xóa (cập nhật) nếu bản ghi được
tham chiếu bị xóa (cập nhật)
•NO ACTION: (mặc định) nếu bản ghi trong bảng tham
chiếu đang được tham chiếu bởi một bản ghi bất kỳ trong
bảng được định nghĩa thì bản ghi đó không được phép xóa
hoặc cập nhật
•SET NULL: cập nhật lại khóa ngoại của bản 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óa ngoại của bản ghi nhận
giá trị mặc định (nếu có giá trị mặc định)
36
Ví dụ: tạo bảng Hoadon, trong đó các trường MaNV của bảng là các
trường khóa ngoại có các ràng buộc Update và Delete với trường
MaNV của bảng Nhanvien.
Use MyDB
CREATE TABLE Hoadon
( SoHD nvarchar(8) NOT NULL Primary Key,
Ngaylap Datetime NOT NULL,
Tenkhach nVarchar (20),
MaNV char (8),
CONSTRAINT MaNV FOREIGN KEY (MaNV)
REFERENCES Nhanvien(MaNV)
ON DELETE CASCADE
ON UPDATE CASCADE
)
37
*) Ràng buộc CHECK
Sử dụng nhằm chỉ định điều kiện hợp lệ đối với dữ liệu, khi có
thay dữ liệu trên bảng thì ràng buộc này được kiểm tra
Cú pháp:
[CONSTRAINT tên-ràng-buộc] CHECK ( điều kiện)
Ví dụ sử dụng CHECK (cách 1):
Use MyDB
CREATE TABLE SINHVIEN
( MASV VARCHAR(9) PRIMARY KEY,
TENSV VARCHAR(50) NOT NULL,
D_TOAN INT
constraint chk_Toan CHECK (D_Toan between 0 and 10),
D_VAN INT
constraint chk_Van CHECK (D_Van>=0 and D_Van<=10)
)
38
*) Ràng buộc CHECK
Có thể đặt các ràng buộc CHECK sau cùng:
Ví dụ sử dụng CHECK (cách 2):
use MyDB
CREATE TABLE SINHVIEN
( MASV VARCHAR(9) PRIMARY KEY,
TENSV VARCHAR(50) NOT NULL,
D_TOAN INT,
D_VAN INT
constraint chk_Diem CHECK (D_Van>=0 and D_Van<=10) ,
CHECK(D_Toan between 0 and 10)
)
39
*) Ràng buộc DEFAULT
- Xác định giá trị mặc định cho từng cột
- Cú pháp:
[CONSTRAINT tên-ràng-buộc] DEFAULT ( giá-trị )
- Ví dụ:
use MyDB
CREATE TABLE VATTU
( PK_Mavtu varchar(4) not null
primary key,
TenVtu varchar(100),
Soluong int
Constraint Soluong Default (10)
)
40
*) Ràng buộc UNIQUE
-Dùng khi quy định một cột nào đó cho phép chỉ nhập một
giá trị duy nhất cho từng dòng
- Cú pháp:
[ CONSTRAINT Tên_ràng_buộc ]
UNIQUE (Danh_sách_các_cột)
Chú ý: Trong một bảng chỉ có một ràng buộc khoá chính
nhưng có thể có nhiều ràng buộc dữ liệu duy nhất
41
*) Ràng buộc UNIQUE
- Ví dụ:
CREATE TABLE VATTU1
( MAVTU varchar(4) primary key,
TenVtu varchar(100) UNIQUE )
42
*) Ràng buộc IDENTITY
Xác định cột định danh: Trong một bảng chỉ có tối đa một cột
được chỉ định làm cột định danh.
- Cú pháp:
[constraint name] IDENTITY [ (start, step) ],
43
Bài tập thí dụ
Xây dựng CSDL QLDIEM với các bảng sau:
SINHVIEN (MaSV, HoTen, NgaySinh, Gioitinh, Malop)
LOP(Malop, Tenlop, NamVaohoc)
MON(Mamon, Tenmon, SoDVHT)
DIEM(MaSV, Mamon, DiemCC, DiemKT, Diemthi)
Ràng buộc:
• Giới tính chỉ nhận 2 giá trị ‘Nam’ và ‘Nữ’
• Các trường gạch chân: khóa chính, khóa ngoại
• Các ràng buộc về các điểm thành phần [0..10]
• Tên môn, tên lớp là duy nhất.
•…
44
3.2.1. Sửa cấu trúc bảng
Sử dụng câu lệnh ALTER TABLE.
Câu lệnh này cho phép thực hiện được các thao tác sau:
• Bổ sung một cột vào bảng.
• Xoá một cột khỏi bảng.
• Thay đổi định nghĩa kiểu của một cột trong bảng.
• Xoá bỏ hoặc bổ sung các ràng buộc cho bảng
45
Thêm cột mới
Cú pháp:
ALTER TABLE Tên_bảng
ADD Tên_cột Kiểu_dữ_liệu [Ràng buộc] [,... ]
Chú ý: Luôn thêm cột mới vào cuối bảng
Ví dụ:
ALTER TABLE VATTU
ADD Soluong int
46
Một số lưu ý:
oKhi thêm cột vào bảng đã có ít nhất 1 bản ghi thì cột mới
thêm phải cho phép nhận giá trị NULL hoặc phải có giá trị
mặc định
oMuốn xóa cột có tồn tại ràng buộc/có tham chiếu khóa
ngoài thì phải xóa ràng buộc hoặc khóa ngoài.
oNếu thêm ràng buộc cho bảng đã có dữ liệu mà ràng
buộc không thỏa mãn với các dữ liệu đã có thì nó sẽ thêm
vào được.
47
Sửa cấu trúc bảng (sửa cột)
Cú pháp:
ALTER TABLE tên_bảng
[ ALTER COLUMN tên_trường kiểu dữ liệu, ràng
buộc,…
]
Chú ý: Kiểu dữ liệu mới phải lơn hơn kiểu dữ liệu cũ đã có
48
Xóa cột
Cú pháp:
ALTER TABLE Tên_bảng
DROP COLUMN Tên_cột [,...]
Ví dụ:
ALTER TABLE VATTU
DROP COLUMN TenVtu
49
Chú ý:
Ta không thể xóa các trường sau:
•Trường đang có các ràng buộc Primary Key,
Foreign Key, Unique, Check,…
•Trường đang có trong Index
•Trường Replicate
•Trường đang được gắn với một Rule
(quyền) nào đó.
50
*) Thêm ràng buộc cho cột
Cú pháp:
ALTER TABLE Tên_bảng
ADD CONSTRAINT Tên_ràng_buộc Loại_ràng_buộc
Ví dụ:
ALTER TABLE VATTU
ADD CONSTRAINT CK_NgayNhap
CHECK ( Ngaynhap <= GetDate() )
51
*) Hủy ràng buộc đã đặt
Cú pháp:
ALTER TABLE Tên_bảng
DROP CONSTRAINT Tên_ràng_buộc
Ví dụ:
ALTER TABLE VATTU
DROP CONSTRAINT CK_NgayNhap
52
*) Đổi tên cột
Cú pháp:
EXEC SP_RENAME ‘Tên_bảng.Tên_cột’, ‘Tên_mới’ ,
‘COLUMN’
Ví dụ:
EXEC SP_RENAME ‘VATTU.MAVTU’,
‘MAVATTU’, ‘COLUMN’
53
*) Đổi tên bảng
Cú pháp:
EXEC SP_RENAME ‘Tên_bảng’, ‘Tên_mới’
Ví dụ:
EXEC SP_RENAME ‘VATTU’, ’VT’
54
3.2.2. Xóa bảng
• Cú pháp:
DROP TABLE Danh_sách_tên_các_bảng
• Ví dụ:
DROP TABLE VatTu, Customers
• Lưu ý:
+ Câu lệnh Drop Table không thể thực hiện nếu bảng cần
xóa được tham chiếu bởi một Foreign Key
+ Các ràng buộc, chỉ mục, trigger,.. đều bị xóa, nếu tạo lại
bảng thì cũng phải tạo lại các đối tượng này.
+ Sau khi xóa không thể khôi phục lại bảng và dữ liệu bảng.
55