• 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]
(1)Trường Đại học Khoa học Tự nhiên Khoa Công nghệ Thông tin
Bộ môn Hệ thống Thông tin
Chương 2: Xây dựng, quản lý và khai
thác Cơ sở liệu
Phạm Nguyên Thảo
(2)Nội dung
• Khái niệm Database
• Tạo quản lý Database
• Các kiểu liệu
• Tạo quản lý bảng
• Ràng buộc tồn vẹn đơn giản
(3)3 CSDL - Logic
• Một database tập hợp chứa:
– Các bảng (tables) chứa liệu có cấu trúc ràng buộc(constraint) định nghĩa bảng
– Các khung nhìn (view) – Các thủ tục/ hàm
– Các vai trò (role) người dùng (user) – …
(4)CSDL – lưu trữ vật lý
• Một database SQL Server lưu trữ loại
tập tin:
– Tập tin liệu (data file)
1 tập tin liệu (primary data file), thường có “mdf” – Chứa liệu khởi đầu database
(5)5 CSDL – 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ó “ldf”
(6)Nội dung
• Khái niệm Database
• Tạo quản lý Database
• Kiểu liệu
• Tạo quản lý bảng
• Ràng buộc tồn vẹn đơn giản
(7)7 Tạo Database
• Cú pháp lệnh tạo Database
Create Database database_name
[ On
[Primary]
{ file_spec [,…n] }
]
[ Log on
{ file_spec [,…n] } ]
• Lưu ý: Cú pháp đầy đủ lệnh nên xem thêm
(8)Tạ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 ] )
(9)9 Tạo Database – ví dụ
• Ví dụ 1:
Create Database QLSinhVien
• Ví dụ 2:
Create Database QLSinhVien
On
( Name = QLSV_Data
Filename = „C:\ \ QLSV_Data.mdf ‟,
Size = 1,
(10)Tạo Database – ví dụ (tt)
• Ví dụ
Create Database QLSinhVien On
( Name = QLSV_Data1,
Filename = „C:\ \ QLSV_Data.mdf ‟, Size = 1,
Maxsize = 10 MB,
Filegrowth = MB ) , ( Name = QLSV_Data2 ,
Filename = „C:\ \QLSV_Data1.ndf‟ ) Log on
( Name = QLSV_Log,
(11)11 Thay đổi xoá Database
• Xố CSDL tồn tại:
Drop Database database_name
• Thay đổi CSDL
Alter Database database_name …
(12)Nội dung
• Khái niệm Database
• Tạo quản lý Database
• Kiểu liệu
• Tạo quản lý bảng
• Ràng buộc tồn vẹn đơn giản
(13)13 Kiểu liệu SQL Server cung cấp
• Số
– Số nguyên: bit, tinyint, smallint, int, bigint – Số thực
Floating point: – float(n)
– real = float(24) Fixed point
(14)Kiểu liệu SQL Server cung cấp (tt)
• Chuỗi
char(n); nchar(n)
varchar(n); nvarchar(n) text; ntext
• Ngày
(15)15 Kiểu người dùng tự định nghĩa
• Định nghĩa kiểu liệu:
sp_addtype type_name, system_type [, „null_type‟ ]
– Ví dụ:
Exec sp_addtype MyString, nvarchar(88), „NULL‟
• Xóa kiểu liệu người dùng định nghĩa:
sp_droptype „type_name’
(16)Nội dung
• Khái niệm Database
• Tạo quản lý Database
• Kiểu liệu
• Tạo quản lý bảng
• Ràng buộc tồn vẹn đơn giản
(17)17 Tạo bảng
• Tạo bảng
– Xác định cột (các thuộc tính) bảng – Xác định khóa
– Xác định thuộc tính null/ not null
– Xác định thuộc tính identity (nếu có) (bắt buộc phải kiểu số
nguyên có thuộc tính này)
• Lưu ý:
– Ln tạo khóa cho bảng
(18)Tạo bảng (tt)
– Cú pháp lệnh tạo bảng
Create table Table_name
(
{ Column_name Data_type [null | not null]
[default default_value ]
[identity [( seed, increment)] ]
} [,…n]
[, [constraint constraint_name] primary key ( Column_name [,…n] ) ] [, [constraint constraint_name] foreign key ( Column_name [,…n] )
referencesTable_name ]
)
– Lưu ý tạo khóa chính/khóa ngoại trực tiếp có thuộc tính, e.g “column_name type primary key” “column_name type references
table_name”
– Tên constraint không bắt buộc
(19)19 Tạ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)
(20)Thay đổ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 liệu… 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 báo lỗi bảng không tồn
(21)21 Thay đổi cấu trúc bảng – ví dụ
Alter table HOCSINH
Add DanToc nvarchar(20) null default „Kinh‟
Alter table HOCSINH
(22)Quản lý bảng (tt)
• Các tên bảng, tên ràng buộc không trùng
trong database
• Tên cột bảng khơng trùng
nhau
• Thông tin bảng, ràng buộc lưu
bảng hệ thống sysobjects
– Ví dụ: đọc thơng tin bảng database hành:
(23)23 Quản lý bảng (tt)
• Một số thủ tục SQL Server cung cấp để quản lý bảng cấu trúc bảng:
– sp_databases
– sp_tables [„table_name‟] [, „owner‟][,‟database_name‟][, “ ‟type‟ ”]
Ví dụ:
Exec sp_tables null, null, null, “ „TABLE‟ ”
– sp_help [object_name]
sp_help cho biết thông tin đối tượng database (đối tượng có chứa sysobjects)
Ví dụ:
Exec sp_help HOCSINH
– sp_columns object [, owner] [, database] [,column] – sp_helpconstraint „table_name‟
(24)Nội dung
• Khái niệm database
• Tạo quản lý database
• Kiểu liệu
• Tạo quản lý bảng
• Ràng buộc tồn vẹn đơn giản
(25)25 Ràng buộc toàn vẹn đơn giản
• SQL cung cấp sẵn chế để kiểm tra
• Bao gồm:
– Có thể chứa giá trị rỗng hay khơng: null/not null Giá trị mặc định: default(value)
Các RB khai báo tạo bảng khai báo cho cột – Khóa (primary key constraint)
– Khoá ngoại (foreign key constraint) – Giá trị (unique constraint)
Hữu dụng cài đặt thêm khóa ứng viên khác ngồi khóa – Check constraint ( Kiểm tra ràng buộc miền giá trị ràng buộc liên
thuộc tính quan hệ)
(26)Khai báo ràng buộc lúc tạo bảng
• Cú pháp:
Create table Table_name
( …
[, [constraint Constraint_name ]
{ primary key (Column_name [,…n])
| unique ( Column_name [,…n])
| check ( logical_expression ) }
| foreign key ( Column_name [,…n]) references Table (
Column_name [,…n]) on_delete_update_handling
] […n]
(27)27 Khai báo ràng buộc 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),
(28)Khai báo ràng buộc bảng tồn • Cú pháp:
Alter table table_name
[with check| with nocheck] Add { constraint constraint_name
{ primary key ( column_name [,…n] )
| unique ( column_name [,…n] )
| check ( logical_expression )
| foreign key ( column_name [,…n] )
references ref_table ( ref_column [,…n] )
[ on delete {cascade| no action | set null | set default } ]
[ on update {cascade| no action | set null | set default } ]
} [,…n]
(29)29
Khai báo ràng buộc bảng tồn – 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)
(30)Kiể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
(31)31 Xoá ràng buộc
• Cú pháp
Alter table table_name
Drop { [constraint ] constraint_name } [,…n]
• Ví dụ:
Alter table SINHVIEN
(32)Rule
• Rule qui định chung tạo
database
• Một rule áp dụng cho nhiều thuộc tính
(33)33 Tạo rule
• Cú pháp:
Create rule rule_name
as logical_expression
– “logical_expression” phải chứa biến Biến tương ứng với đối tượng áp dụng rule
• Ví dụ:
create rule r_SoDuong as @value >0
(34)Kế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 dùng kết buộc rule với kiểu liệu người
dùng định nghĩa, có nghĩa cột thuộc kiểu liệu trước khơng bị ảnh hưởng rule
Ví dụ:
sp_bindrule „r_SoDuong‟, „SinhVien.Nam‟
Rule kết buộc ngầm gỡ rule cũ đối tượng
• Gỡ kết buộc
sp_unbindrule „object‟, [ „futureonly‟ ]
(35)35 Xoá rule
• Cú pháp
Drop rule {rule_name} [,…n]
• Chỉ xóa rule khơng cịn kết buộc với đối
tượng
• Nếu ngược lại, cịn kết buộc
(36)Nội dung
• Khái niệm database
• Tạo quản lý database
• Kiểu liệu
• Tạo quản lý bảng
• Ràng buộc tồn vẹn đơn giản
(37)37 Thêm/ xoá/ cập nhật liệu
• Chú ý thêm/ xóa / cập nhật
– Dữ liệu nhập phải phù hợp với kiểu liệu – Đảm bảo ràng buộc toàn vẹn
– Chú ý định dạng giá trị:
kiểu chuỗi unicode N‟giá trị chuỗi Tiếng Việt có dấu Unicode‟
kiểu datetime „13 Jan 09‟ hay ‟13/01/09‟ hay „01/13/09‟ biểu thức đúng? Nên dùng set dateformat dmy; để định dạng kiểu ngày tháng
dùng Việt Nam
(38)Các dạng lệnh insert
• Thêm dòng liệu vào bảng
Insert [into] Table_name[ (column_name[,…n] )]
values ( value [,…n] )
[, values (value [,…n] ), [,…n] ]
• Thêm dòng liệu từ bảng khác
Insert [into] Table_name Select_statement
• Lưu ý: câu select, ta đọc liệu từ
bảng database khác Khi đó, tên bảng viết đầy đủ sau:
Database_name.Owner.Table_name
– Ví dụ:
(39)