• Có thể khai báo ràng buộc trong lúc tạo bảng hoặc sau khi bảng đã tồn tại.. Rule[r]
Trang 1Chương 2: Xây dựng, quản lý và khai
thác Cơ sở dữ liệu
Trang 2Nội dung
• Khái niệm Database
• Tạo và quản lý Database
• Các kiểu dữ liệu
• Tạo và quản lý bảng
• Ràng buộc toàn vẹn đơn giản
• Các thao tác trên dữ liệu
Trang 3CSDL - Logic
• Một database là một tập hợp chứa:
– Các bảng (tables) chứa dữ liệu có cấu trúc và các ràng
buộc(constraint) định nghĩa trên các bảng
Trang 4CSDL – lưu trữ vật lý
• Một database của SQL Server được lưu trữ bởi 3 loại tập tin:
– Tập tin dữ liệu (data file)
1 tập tin dữ liệu chính (primary data file), thường có đuôi “mdf”
– Chứa các dữ liệu khởi đầu của database
0-n tập tin dữ liệu thứ cấp (secondary data file), thường có đuôi “ndf”
– Chứa các dữ liệu không lưu trữ hết trong tập tin dữ liệu chính
Trang 5CSDL – lưu trữ vật lý
– Tập tin nhật ký giao tác (transaction log file)
1-n tập tin nhật ký, thường có đuôi “ldf”
– Chứa các thông tin về nhật ký giao tác, dùng để phục hồi database sau khi xảy ra sự cố
Trang 6Nội dung
• Khái niệm Database
• Tạo và quản lý Database
• Kiểu dữ liệu
• Tạo và quản lý bảng
• Ràng buộc toàn vẹn đơn giản
• Các thao tác trên dữ liệu
Trang 8Tạo Database (tt)
Với file_spec :: = ( Name = logical_file_name ,
Filename = 'os_file_name '
[ , Size = size [ KB | MB | GB | TB ] ] [ , Maxsize = { max_size | Unlimited } ]
[ , Filegrowth = growth_increment ] )
• Mặc định, các tập tin dữ liệu và log được lưu trong thư mục
MSSQL\ Data của thư mục cài đặt SQL Server
Trang 9Filegrowth = 10% )
Trang 10( Name = QLSV_Log,
Filename = „D:\ \QLSV_Log.ldf‟ )
Trang 11Thay đổi và xoá Database
• Xoá một CSDL đã tồn tại:
Drop Database database_name
• Thay đổi một CSDL
Alter Database database_name …
– Thêm/xoá/ thay đổi các các tập tin
– Thay đổi các tùy chọn cho database
Trang 12Nội dung
• Khái niệm Database
• Tạo và quản lý Database
• Kiểu dữ liệu
• Tạo và quản lý bảng
• Ràng buộc toàn vẹn đơn giản
• Các thao tác trên dữ liệu
Trang 13Kiểu dữ liệu được SQL Server cung cấp
Fixed point
– Decimal(p,s) – Numeric(p,s)
Trang 14Kiểu dữ liệu được SQL Server cung cấp (tt)
Trang 15Kiểu người dùng tự định nghĩa
• Định nghĩa một kiểu dữ liệu:
sp_addtype type_name, system_type [, „null_type‟ ]
– Ví dụ:
Exec sp_addtype MyString, nvarchar(88), „NULL‟
• Xóa một kiểu dữ liệu người dùng định nghĩa:
sp_droptype „type_name’
Trang 16
Nội dung
• Khái niệm Database
• Tạo và quản lý Database
• Kiểu dữ liệu
• Tạo và quản lý bảng
• Ràng buộc toàn vẹn đơn giản
• Các thao tác trên dữ liệu
Trang 17Tạo bảng
• Tạo bảng
– Xác định các cột (các thuộc tính) của bảng
– Xác định khóa chính
– Xác định các thuộc tính null/ not null
– Xác định thuộc tính identity (nếu có) (bắt buộc phải là kiểu số
nguyên mới có thuộc tính này)
• Lưu ý:
– Luôn tạo khóa chính cho một bảng
Trang 18[, [constraint constraint_name] primary key ( Column_name [,…n] ) ]
[, [constraint constraint_name] foreign key ( Column_name [,…n] )
referencesTable_name ]
)
– Lưu ý có thể tạo khóa chính/khóa ngoại trực tiếp khi có một thuộc tính, e.g
“column_name type primary key” và “column_name type references
table_name”
– Tên constraint là không bắt buộc
– Có thể tạo khóa ngoại ngay khi tạo bảng
Trang 19Tạo bảng – ví dụ
Create table HOCSINH
(
STT tinyint not null,
Lop char(5) not null default ‟11A1‟ ,
HoTen nvarchar(30) not null,
NgaySinh datetime not null,
DiaChi nvarchar(100),
constraint pk_HS primary key (STT, Lop)
)
Trang 20Thay đổi cấu trúc bảng / xóa bảng
• Thay đổi cấu trúc bảng
Alter table…
– Thêm/ xoá/ cập nhật kiểu dữ liệu… của một cột (column)
– Thêm/ xoá/ kiểm tra/ không kiểm tra ràng buộc (constraint)
– Enable/ disable trigger
• Xóa bảng
Drop table … – Nếu không có bảng này sẽ báo lỗi bảng không tồn tại
– Có thể kiểm tra nếu có thì mới xóa để tránh lỗi bằng lệnh if
exists(SFW) dùng table hệ thống SysObjects
Trang 21Thay đổi cấu trúc bảng – ví dụ
Alter table HOCSINH
Add DanToc nvarchar(20) null default „Kinh‟
Alter table HOCSINH
Alter column NgaySinh SmallDatetime not null
Trang 22– Ví dụ: đọc thông tin về các bảng trong database hiện hành:
Select * from sysobjects where type = „U‟
Trang 24Nội dung
• Khái niệm database
• Tạo và quản lý database
• Kiểu dữ liệu
• Tạo và quản lý bảng
• Ràng buộc toàn vẹn đơn giản
• Các thao tác trên dữ liệu
Trang 25Ràng buộc toàn vẹn đơn giản
• SQL cung cấp sẵn cơ chế để kiểm tra
– Khoá ngoại (foreign key constraint)
– Giá trị duy nhất (unique constraint)
Hữu dụng khi cài đặt thêm các khóa ứng viên khác ngoài khóa chính
– Check constraint ( Kiểm tra ràng buộc miền giá trị hoặc ràng buộc liên
thuộc tính trên một quan hệ)
Trang 26Khai báo ràng buộc trong lúc tạo bảng
Trang 27Khai báo ràng buộc trong lúc tạo bảng – Ví dụ
Create table SinhVien
(
MaSV char(10) not null,
HoTen nvarchar(30) not null,
Nam tinyint,
CMND char(10),
Khoa char(5),
constraint pk_SV primary key (MaSV),
constraint u_CMND unique (CMND),
Trang 28Khai báo ràng buộc trên bảng đã tồn tại
• Cú pháp:
Alter table table_name
[with check| with nocheck] Add
{ constraint constraint_name
Trang 29Khai báo ràng buộc trên bảng đã tồn tại – Ví dụ
Alter table SINHVIEN
with check add
constraint u_CMND unique (CMND),
constraint chk_Nam check (Nam in (1, 2, 3, 4) ),
constraint fk_SV_maKhoa foreign key (Khoa),
references KHOA(MaKhoa)
/* giả sử đã tồn tại bảng KHOA( MaKhoa, …) */
Trang 30Kiểm tra / không kiểm tra ràng buộc
• Cú pháp :
Alter table Table_name {Check| Nocheck} constraint { All | constraint_name [,…n] }
• Ví dụ
alter table SINHVIEN
nocheck constraint u_CMND, chk_Nam
Trang 31Alter table SINHVIEN
drop constraint u_CMND, chk_Nam
Trang 33Tạo rule
• Cú pháp:
Create rule rule_name
as logical_expression
– “logical_expression” phải chứa một biến Biến này tương
ứng với đối tượng sẽ được áp dụng rule
• Ví dụ:
create rule r_SoDuong
as @value >0
Trang 34Kết buộc/ gỡ kết buộc rule
• Kết buộc rule
sp_bindrule „rule_name‟, „object‟, [ „futureonly‟ ]
Tùy chọn futureonly chỉ dùng khi kết buộc rule với kiểu dữ liệu người
dùng định nghĩa, có nghĩa các cột thuộc kiểu dữ liệu này trước đó không bị ảnh hưởng bởi rule
Ví dụ:
sp_bindrule „r_SoDuong‟, „SinhVien.Nam‟
Rule mới kết buộc sẽ ngầm gỡ rule cũ trên đối tượng
• Gỡ kết buộc
sp_unbindrule „object‟, [ „futureonly‟ ]
Ví dụ:
Trang 35Xoá rule
• Cú pháp
• Chỉ xóa được rule khi nó không còn kết buộc với đối
tượng nào
• Nếu ngược lại, khi còn đang kết buộc nhưng vẫn còn
xóa đi, phải gỡ hết các kết buộc mới có thể xóa
Trang 36Nội dung
• Khái niệm database
• Tạo và quản lý database
• Kiểu dữ liệu
• Tạo và quản lý bảng
• Ràng buộc toàn vẹn đơn giản
• Các thao tác trên dữ liệu
Trang 37Thêm/ xoá/ cập nhật dữ liệu
• Chú ý khi thêm/ xóa / cập nhật
– Dữ liệu nhập phải phù hợp với kiểu dữ liệu
– Đảm bảo các ràng buộc toàn vẹn
– Chú ý định dạng của các giá trị:
kiểu chuỗi unicode N‟giá trị chuỗi Tiếng Việt có dấu hoặc Unicode‟
kiểu datetime „13 Jan 09‟ hay ‟13/01/09‟ hay „01/13/09‟ biểu thức nào
đúng? Nên dùng set dateformat dmy; để định dạng kiểu ngày tháng
dùng ở Việt Nam
– Nhập giá trị rỗng dùng từ khóa null (không phải chuỗi „null‟)
Trang 38Các dạng lệnh insert
• Thêm từng dòng dữ liệu vào bảng
Insert [into] Table_name[ (column_name[,…n] )]
values ( value [,…n] ) [, values (value [,…n] ), [,…n] ]
• Thêm các dòng dữ liệu từ bảng khác
Insert [into] Table_name
Select_statement
• Lưu ý: trong câu select, ta có thể đọc dữ liệu từ các
bảng trong database khác Khi đó, tên bảng được viết đầy đủ như sau:
Database_name.Owner.Table_name
– Ví dụ:
select * from QLSinhVien.dbo.SinhVien
Trang 39Truy vấn