Tải bản đầy đủ (.pdf) (39 trang)

BẢNG ĐIỂM HỌC PHẦN SQL – LỚP CT15

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>


<i><b>Chương 2: Xây dựng, quản lý</b></i>

<i><b>và khai </b></i>



<i><b>thác Cơ sở dữ liệu </b></i>



<b>Phạm Nguyên Thảo </b>



</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

<i><b>Nội dung </b></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>


</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

<i>3 </i>

<i><b>CSDL - Logic </b></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)
– …


</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

<i><b>CSDL – lưu trữ vật lý </b></i>



• <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


</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

<i>5 </i>

<i><b>CSDL – lưu trữ vật lý </b></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”


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

<i><b>Nội dung </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>


</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

<i>7 </i>

<i><b>Tạo Database </b></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>


</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

<i><b>Tạo Database (tt) </b></i>




<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>


</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

<i>9 </i>

<i><b>Tạo Database – ví dụ </b></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,


</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

<i><b>Tạo Database – ví dụ (tt) </b></i>




• <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>


</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

<i>11 </i>

<i><b>Thay đổi và xố Database </b></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> ….



</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

<i><b>Nội dung </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 toàn vẹn đơn giản </b>


</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

<i>13 </i>

<i><b>Kiểu dữ liệu được SQL Server cung cấp </b></i>



• <b>Số </b>


– Số nguyên: bit, tinyint, smallint, int, bigint
– Số thực


Floating point:
– float(n)


– real = float(24)
Fixed point


</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

<i><b>Kiểu dữ liệu được SQL Server cung cấp (tt) </b></i>



• <b>Chuỗi </b>



char(n); nchar(n)


varchar(n); nvarchar(n)
text; ntext


• <b>Ngày giờ </b>


</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

<i>15 </i>

<i><b>Kiểu người dùng tự định nghĩa </b></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>


</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

<i><b>Nội dung </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>


</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=17>

<i>17 </i>

<i><b>Tạo bảng </b></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


</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=18>

<i><b>Tạo bảng (tt) </b></i>



– 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>


</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=19>

<i>19 </i>

<i><b>Tạo bảng – ví dụ </b></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)


</div>
<span class='text_page_counter'>(20)</span><div class='page_container' data-page=20>

<i><b>Thay đổi cấu trúc bảng / xóa bảng </b></i>



• <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.


</div>
<span class='text_page_counter'>(21)</span><div class='page_container' data-page=21>

<i>21 </i>

<i><b>Thay đổi cấu trúc bảng – ví dụ </b></i>




<b>Alter table</b> HOCSINH


<b>Add</b> DanToc nvarchar(20) null default „Kinh‟


<b>Alter table</b> HOCSINH


</div>
<span class='text_page_counter'>(22)</span><div class='page_container' data-page=22>

<i><b>Quản lý bảng (tt) </b></i>



• <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:


</div>
<span class='text_page_counter'>(23)</span><div class='page_container' data-page=23>

<i>23 </i>

<i><b>Quản lý bảng (tt) </b></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>‟


</div>
<span class='text_page_counter'>(24)</span><div class='page_container' data-page=24>

<i><b>Nội dung </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>



</div>
<span class='text_page_counter'>(25)</span><div class='page_container' data-page=25>

<i>25 </i>

<i><b>Ràng buộc toàn vẹn đơn giản </b></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ệ)


</div>
<span class='text_page_counter'>(26)</span><div class='page_container' data-page=26>

<i><b>Khai báo ràng buộc trong lúc tạo bảng </b></i>



• <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]


</div>
<span class='text_page_counter'>(27)</span><div class='page_container' data-page=27>

<i>27 </i>

<i><b>Khai báo ràng buộc trong lúc tạo bảng – Ví dụ </b></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),


</div>
<span class='text_page_counter'>(28)</span><div class='page_container' data-page=28>

<i><b>Khai báo ràng buộc trên bảng đã tồn tại </b></i>


• <b>Cú pháp: </b>


<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]



</div>
<span class='text_page_counter'>(29)</span><div class='page_container' data-page=29>

<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)


</div>
<span class='text_page_counter'>(30)</span><div class='page_container' data-page=30>

<i><b>Kiểm tra / không kiểm tra ràng buộc </b></i>



• <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


</div>
<span class='text_page_counter'>(31)</span><div class='page_container' data-page=31>

<i>31 </i>

<i><b>Xố ràng buộc </b></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


</div>
<span class='text_page_counter'>(32)</span><div class='page_container' data-page=32>

<i><b>Rule </b></i>



• <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>


</div>
<span class='text_page_counter'>(33)</span><div class='page_container' data-page=33>

<i>33 </i>

<i><b>Tạo rule </b></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


</div>
<span class='text_page_counter'>(34)</span><div class='page_container' data-page=34>

<i><b>Kết buộc/ gỡ kết buộc rule </b></i>



• <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>]


</div>
<span class='text_page_counter'>(35)</span><div class='page_container' data-page=35>

<i>35 </i>

<i><b>Xố rule </b></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>


</div>
<span class='text_page_counter'>(36)</span><div class='page_container' data-page=36>

<i><b>Nội dung </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>


</div>
<span class='text_page_counter'>(37)</span><div class='page_container' data-page=37>

<i>37 </i>

<i><b>Thêm/ xoá/ cập nhật dữ liệu </b></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.


</div>
<span class='text_page_counter'>(38)</span><div class='page_container' data-page=38>

<i><b>Các dạng lệnh insert </b></i>



• <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ụ:


</div>
<span class='text_page_counter'>(39)</span><div class='page_container' data-page=39></div>

<!--links-->

×