Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.27 MB, 39 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
<i>Trường Đại học Khoa học Tự nhiên </i>
<i>Khoa Công nghệ Thông tin </i>
<i>Bộ môn Hệ thống Thông tin </i>
• <b>Khái niệm Database </b>
• <b>Tạo và quản lý Database </b>
• <b>Các kiểu dữ liệu </b>
• <b>Tạo và quản lý bảng </b>
• <b>Ràng buộc tồn vẹn đơn giản </b>
<i>3 </i>
• <b>Một database là một tập hợp chứa: </b>
– 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
– Các khung nhìn (view)
– Các thủ tục/ hàm
– Các vai trò (role) và người dùng (user)
– …
• <b>Một database của SQL Server được lưu trữ bởi 3 loại </b>
<b>tập tin: </b>
– Tập tin dữ liệu (data file)
1 tập tin dữ liệu chính (primary data file), thường có đi “mdf”
– Chứa các dữ liệu khởi đầu của database
<i>5 </i>
– Tập tin nhật ký giao tác (transaction log file)
1-n tập tin nhật ký, thường có đi “ldf”
• <b>Khái niệm Database </b>
• <b>Tạo và quản lý Database </b>
• <b>Kiểu dữ liệu </b>
• <b>Tạo và quản lý bảng </b>
• <b>Ràng buộc tồn vẹn đơn giản </b>
<i>7 </i>
• <b>Cú pháp lệnh tạo Database </b>
<b>Create Database</b> <i>database_name </i>
[ <b>On</b>
[<b>Primary</b>]
{ <i>file_spec</i> [<b>,</b>…n] }
]
[ <b>Log on </b>
{ <i>file_spec</i> [<b>,</b>…n] }
]
• <b>Lưu ý: Cú pháp đầy đủ của lệnh nên được xem thêm </b>
<b>Với </b>
<b> </b><i>file_spec</i> ::<b> = (</b> <b>Name</b> <b>=</b> <i>logical_file_name </i><b>,</b>
<b>Filename</b> <b>=</b> <b>'</b><i>os_file_name </i><b>' </b>
[ <b>,</b> <b>Size</b> <b>=</b> <i>size [ KB | MB | GB | TB ] </i>]
[ <b>,</b> <b>Maxsize</b> <b>=</b> { <i>max_size</i> | <b>Unlimited</b> } ]
[ <b>,</b> <b>Filegrowth</b> <b>=</b> <i>growth_increment </i>] <b>) </b>
<i>9 </i>
• <b>Ví dụ 1: </b>
<b>Create Database</b> QLSinhVien
• <b>Ví dụ 2: </b>
<b>Create Database</b> QLSinhVien
<b>On </b>
( <b>Name</b> = QLSV_Data
<b>Filename</b> = „C:\ ...\ QLSV_Data.mdf ‟,
<b>Size</b> = 1,
• <b>Ví dụ 3 </b>
<b>Create Database QLSinhVien </b>
<b> On </b>
( <b>Name = QLSV_Data1, </b>
<b>Filename = „C:\ ...\ QLSV_Data.mdf ‟, </b>
<b>Size = 1, </b>
<b>Maxsize = 10 MB, </b>
<b>Filegrowth = 1 MB ) , </b>
( <b>Name = QLSV_Data2 , </b>
<b>Filename = „C:\...\QLSV_Data1.ndf‟ ) </b>
<b>Log on </b>
( <b>Name = QLSV_Log, </b>
<i>11 </i>
• <b>Xố một CSDL đã tồn tại: </b>
<b>Drop Database</b> <i>database_name </i>
• <b>Thay đổi một CSDL </b>
<b>Alter Database</b> <i>database_name</i> ….
• <b>Khái niệm Database </b>
• <b>Tạo và quản lý Database </b>
• <b>Kiểu dữ liệu </b>
• <b>Tạo và quản lý bảng </b>
• <b>Ràng buộc toàn vẹn đơn giản </b>
<i>13 </i>
• <b>Số </b>
– Số nguyên: bit, tinyint, smallint, int, bigint
– Số thực
Floating point:
– float(n)
– real = float(24)
Fixed point
• <b>Chuỗi </b>
char(n); nchar(n)
varchar(n); nvarchar(n)
text; ntext
• <b>Ngày giờ </b>
<i>15 </i>
• <b>Định nghĩa một kiểu dữ liệu: </b>
<b>sp_addtype</b> type_name, system_type [<b>,</b> <b>„</b><i>null_type‟ ] </i>
– Ví dụ:
Exec sp_addtype MyString, nvarchar(88), „NULL‟
• <b>Xóa một kiểu dữ liệu người dùng định nghĩa: </b>
<b>sp_droptype</b> <b>„</b><i>type_name<b>’</b></i>
• <b>Khái niệm Database </b>
• <b>Tạo và quản lý Database </b>
• <b>Kiểu dữ liệu </b>
• <b>Tạo và quản lý bảng </b>
• <b>Ràng buộc tồn vẹn đơn giản </b>
<i>17 </i>
• <b>Tạo bảng </b>
– 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 <i>identity</i> (nếu có) (bắt buộc phải là kiểu số
nguyên mới có thuộc tính này)
• <b>Lưu ý: </b>
– Ln tạo khóa chính cho một bảng
– Cú pháp lệnh tạo bảng
<b>Create table</b> <i>Table_name </i>
<b>( </b>
{ <i>Column_name Data_type</i> [<b>null</b> | <b>not null</b>]
[<b>default</b> <i>default_value </i>]
[<b>identity </b>[<b>( </b><i>seed</i><b>,</b> <i>increment</i><b>)</b>] ]
} [<b>,</b>…n]
[<b>,</b> [<b>constraint</b> <i>constraint_name]</i> <b>primary key</b> <b>( </b><i>Column_name</i> [<b>,</b>…n] <b>)</b> ]
[<b>,</b> [<b>constraint</b> <i>constraint_name]</i> <b>foreign key</b> <b>( </b><i>Column_name</i> [<b>,</b>…n] <b>) </b>
<b>references</b>Table_name ]
<b>) </b>
– 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
<i>table_name” </i>
– <i>Tên constraint là không bắt buộc </i>
<i>19 </i>
<b>Create table</b> HOCSINH
<b>( </b>
STT tinyint <b>not null</b>,
Lop char(5) <b>not null</b> <b>default</b> ‟11A1‟ ,
HoTen nvarchar(30) <b>not null</b>,
NgaySinh datetime <b>not null</b>,
DiaChi nvarchar(100),
<b>constraint</b> pk_HS <b>primary key</b> (STT, Lop)
• <b>Thay đổi cấu trúc bảng </b>
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
• <b>Xóa bảng </b>
Drop table …
– Nếu khơng có bảng này sẽ báo lỗi bảng khơng tồn tại.
<i>21 </i>
<b>Alter table</b> HOCSINH
<b>Add</b> DanToc nvarchar(20) null default „Kinh‟
<b>Alter table</b> HOCSINH
• <b>Các tên bảng, tên ràng buộc khơng được trùng nhau </b>
<b>trong cùng một database. </b>
• <b>Tên các cột trong cùng một bảng khơng được trùng </b>
<b>nhau. </b>
• <b>Thông tin về các bảng, các ràng buộc được lưu trong </b>
<b>bảng hệ thống </b><i>sysobjects </i>
– Ví dụ: đọc thơng tin về các bảng trong database hiện hành:
<i>23 </i>
• <b>Một số thủ tục SQL Server cung cấp để quản lý bảng và cấu trúc </b>
<b>bảng: </b>
– <b>sp_databases </b>
– <b>sp_tables</b> [<b>„</b><i>table_name</i><b>‟</b>] [<b>,</b> <b>„</b><i>owner</i><b>‟</b>][<b>,‟</b><i>database_name</i><b>‟</b>][<b>,</b> <b>“ ‟</b><i>type</i><b>‟ ”</b>]
Ví dụ:
Exec <b>sp_tables</b> null, null, null, <b>“ „TABLE‟ ” </b>
– <b>sp_help </b>[<i>object_name</i>]
sp_help cho biết các thông tin về đối tượng bất kỳ trong database (đối tượng có
chứa trong sysobjects)
Ví dụ:
Exec sp_help HOCSINH
– <b>sp_columns </b><i>object</i> [, <i>owner</i>] [, <i>database</i>] [,<i>column</i>]
– <b>sp_helpconstraint </b>„<i>table_name</i>‟
• <b>Khái niệm database </b>
• <b>Tạo và quản lý database </b>
• <b>Kiểu dữ liệu </b>
• <b>Tạo và quản lý bảng </b>
• <b>Ràng buộc tồn vẹn đơn giản </b>
<i>25 </i>
• <b>SQL cung cấp sẵn cơ chế để kiểm tra </b>
• <b>Bao gồm: </b>
– Có thể chứa giá trị rỗng hay không: null/not null
Giá trị mặc định: default(value)
Các RB này được khai báo ngay khi tạo bảng và khai báo cho từng cột.
– Khóa chính (primary key constraint)
– 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 ngồ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ệ)
• <b>Cú pháp: </b>
<b>Create table</b> <i>Table_name </i>
<b>( … </b>
[<b>,</b> [<b>constraint</b> <i>Constraint_name</i> ]
{ <b>primary key</b> <b>(</b><i>Column_name</i> [<b>,</b>…n]<b>) </b>
<b> </b> | <b>unique</b> <b>( </b><i>Column_name</i> [<b>,</b>…n]<b>)</b>
| <b>check</b> <b>( </b><i>logical_expression </i><b>)</b> }
<b> </b> | <b>foreign key</b> <b>( </b><i>Column_name</i> [<b>,</b>…n]<b>) references </b>Table (
<i>Column_name</i> [,…n]) <i><b>on_delete_update_handling</b></i>
] […n]
<i>27 </i>
<b>Create table</b> SinhVien
(
MaSV char(10) not null,
HoTen nvarchar(30) not null,
Nam tinyint,
CMND char(10),
Khoa char(5),
<b>constraint</b> pk_SV <b>primary key</b> (MaSV),
<b>constraint</b> u_CMND <b>unique</b> (CMND),
<b>Alter table</b> table_name
[<b>with check</b>| <b>with nocheck</b>] <b>Add</b>
{ <b>constraint</b> constraint_name
{ <b>primary key</b> <b>( </b>column_name [,…n] <b>) </b>
| <b>unique</b> <b>( </b><i>column_name [,…n] </i><b>) </b>
| <b>check</b> <b>( </b><i>logical_expression </i><b>) </b>
| <b>foreign key ( </b><i>column_name [,…n] </i><b>)</b>
<b>references</b> ref_table <b>( </b><i>ref_column [</i><b>,</b>…n] <b>)</b>
[ <b>on delete</b> {<b>cascade</b>| <b>no action | set null | set </b>
<b>default </b>} ]
[ <b>on update</b> {<b>cascade</b>| <b>no action | set null | </b>
<b>set default </b>} ]
} [<b>,</b>…n]
<i>29 </i>
<i><b>Khai báo ràng buộc trên bảng đã tồn tại – Ví dụ </b></i>
<b>Alter table</b> SINHVIEN
<b>with check add </b>
<b>constraint</b> u_CMND <b>unique</b> (CMND)<b>, </b>
<b>constraint</b> chk_Nam <b>check</b> (Nam in (1, 2, 3, 4) )<b>, </b>
<b>constraint</b> fk_SV_maKhoa <b>foreign key </b>(Khoa)<b>,</b>
<b>references</b> KHOA(MaKhoa)
• <b>Cú pháp : </b>
<b>Alter table</b> <i>Table_name </i>
{<b>Check</b>| <b>Nocheck</b>} <b>constraint</b> { <b>All </b>| <i>constraint_name </i>[<b>,</b>…n] }
• <b>Ví dụ </b>
<b>alter table</b> SINHVIEN
<i>31 </i>
• <b>Cú pháp </b>
<b>Alter table</b> <i>table_name </i>
<b>Drop</b> { [<b>constraint </b>] <i>constraint_name </i>} [<b>,</b>…n]
• <b>Ví dụ: </b>
<b>Alter table</b> SINHVIEN
• <b>Rule là một qui định chung được tạo ra trong một </b>
<b>database </b>
• <b>Một rule có thể được áp dụng cho nhiều thuộc tính của </b>
<i>33 </i>
• <b>Cú pháp: </b>
<b>Create rule</b> <i>rule_name </i>
<b>as</b> <i>logical_expression</i>
– “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.
• <b>Ví dụ: </b>
create rule r_SoDuong
as @value >0
• <b>Kết buộc rule </b>
<b>sp_bindrule</b> „<i>rule_name</i>‟, „<i>object</i>‟, [ <b>„futureonly‟</b> ]
Tùy chọn<i><b> futureonly</b></i> 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
• <b>Gỡ kết buộc </b>
<b>sp_unbindrule</b> „<i>object</i>‟, [ <b>„futureonly‟ </b>]
<i>35 </i>
• <b>Cú pháp </b>
<b>Drop rule</b> {rule_name} [<b>,</b>…n]
• <b>Chỉ xóa được rule khi nó khơng cịn kết buộc với đối </b>
<b>tượng nào. </b>
• <b>Nếu ngược lại, khi còn đang kết buộc nhưng vẫn còn </b>
• <b>Khái niệm database </b>
• <b>Tạo và quản lý database </b>
• <b>Kiểu dữ liệu </b>
• <b>Tạo và quản lý bảng </b>
• <b>Ràng buộc tồn vẹn đơn giản </b>
<i>37 </i>
• <b>Chú ý khi thêm/ xóa / cập nhật </b>
– 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 <b>N‟</b>giá trị chuỗi Tiếng Việt có dấu hoặc Unicode<b>‟ </b>
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 <b>set dateformat dmy; </b>để định dạng kiểu ngày tháng
dùng ở Việt Nam.
• <b>Thêm từng dòng dữ liệu vào bảng </b>
<b>Insert</b> [<b>into</b>] <i>Table_name</i>[ <b>(</b><i>column_name</i>[<b>,</b>…n] <b>)</b>]
<b>values</b> ( <i>value</i> [<b>,</b>…n] )
[, values (<i>value</i> [<b>,</b>…n] ), [<b>,</b>…n] ]
• <b>Thêm các dòng dữ liệu từ bảng khác </b>
<b>Insert</b> [<b>into</b>] <i>Table_name </i>
<i> Select_statement</i>
• <b>Lưu ý: trong câu select, ta có thể đọc dữ liệu từ các </b>
<b>bảng trong database khác. Khi đó, tên bảng được viết </b>
<b>đầy đủ như sau: </b>
<i>Database_name</i><b>.</b><i>Owner</i><b>.</b><i>Table_name</i>
– Ví dụ: