Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 12

Chöông 3 - Data Definition Language 62

CHÖÔNG 3. SQL Primer: Data Definition Language (DDL)


CAÙC ÑOÁI TÖÔÏNG CÔ SÔÛ DÖÕ LIEÄU

I. TAÏO CÔ SÔÛ DÖÕ LIEÄU: Ñeå taïo ñöôïc cô sôû döõ lieäu, ta login vaøo vôùi
loginname laø sa hay vôùi 1 loginname coù quyeàn taïo cô sôû döõ lieäu.
Cuù phaùp: Create Database <tenCSDL>
Ví duï1: Create Database QLVT
- Treân dóa seõ coù 2 files: qlvt_data.mdf vaø qlvt_log.ldf
Ngoaøi ra, ta coù theå chæ ñònh caùc tham soá caàn thieát cho vieäc taïo cô sôû döõ
lieäu, chaúng haïn nhö:
Create Database QLVT
On Primary
( Name = Qlvt1,
Filename = 'c:\thu\data\qlvt1.mdf' ,
Size = 10MB ,
MaxSize = 100MB,
FileGrowth = 10MB)
Log On
( Name = QlvtlLog,
Filename = 'c:\thu\data\qlvt1_log.ldf' ,
Size = 10MB ,
MaxSize = 100MB,
FileGrowth = 10MB)
Caùc giaù trò maëc ñònh:
- Size: döïa vaøo kích thöôùc cuûa file model.mdf
- MaxSize : khoâng giôùi haïn
- FileGrowth : 10%

Sau khi taïo xong 1 cô sôû döõ lieäu, ta coù theå:


* Theâm 1 file vaøo cô sôû döõ lieäu ñaõ ñöôïc taïo:
Alter Database QLVT
Add File
( Name = Qlvt2,
Filename = 'c:\thu\data\qlvt2.Ndf' ,
Size = 10MB ,
MaxSize = 100MB,
FileGrowth = 10MB)
* Xoùa 1 file khoûi cô sôû döõ lieäu QLVT:
Alter Database QLVT
Remove File Qlvt2
* Hieäu chænh laïi caùc tuøy choïn ñaõ ñònh:
Alter Database QLVT
Modify File
( Name = Qlvt1,
FileGrowth = 5MB)
* Xoùa toaøn boä cô sôû döõ lieäu : Drop Database QLVT
Löu yù: Ta coù theå taïo 1 cô sôû döõ lieäu trong SQL Server qua coâng cuï
Enterprise Manager (xem V trong chöông 2, p.52)
Chöông 3 - Data Definition Language 63

II. TAÏO TABLE:


Cho cô sôû döõ lieäu QLVT, trong ñoù coù caùc Table sau :
a. Table Nhanvien
Field Name Type Constraint
MANV int Primary key
HO nvarchar(40) Not Null
TEN nvarchar(10) Not Null
PHAI nvarchar(3) Default : ‘Nam’, Nam or Nữ

DIACHI nvarchar(50) Not Null, Default : ‘ ‘


NGAYSINH SmallDateTime
LUONG Money >=5000000 vaø <=20000000
Default : 5000000
GHICHU nText

b. Table Kho:
Field Name Type Constraint
MAKHO nChar(2) Primary Key
TENKHO nvarchar(30) Unique, Not Null
DIACHI nvarchar(70) Not Null

c. Table Vattu:
Field Name Type Constraint
MAVT nChar(4) Primary Key
TENVT nvarchar(30) Unique, Not Null
DVT nvarchar(15) Default : ‘ ‘
Chöông 3 - Data Definition Language 64

d. Table Phatsinh:
Field Name Type Constraint
PHIEU nChar(8) Primary Key
NGAY DateTime Default : GETDATE()
LOAI nChar(1) chæ nhaän ‘N’, ‘X’, ‘T’, ‘C’
Default : ‘N’
HOTEN nvarchar (40) Description: ho ten khach hang
THANHTIEN money Default : 0, THANHTIEN >=0
MANV int Foreign key

-Table CT_Phatsinh:
Field Name Type Properties
PHIEU nChar(8) Foreign key
MAVT nChar(4) Foreign key
SOLUONG int >0
DONGIA money >0
MAKHO nChar(2) Foreign Key
LYDO nvarchar(30)
Khoùa chính : PHIEU+MAVT
Cuù phaùp: Ta xem cuù phaùp cuûa leänh Taïo Table qua ví duï sau:
Ví duï 2: Taïo table Vattu vôùi khoùa chính laø MAVT.
USE QLVT
Create Table Vattu
( MAVT nChar (4) Not Null ,
TENVT nVarChar (30) unique Not Null,
DVT nVarChar (15) Default ' '
Constraint PK_Vattu Primary Key (MAVT) )

Ví duï 3: Taïo caáu truùc Table NhanVien


Create Table QLVT.dbo.Nhanvien
( MANV int Primary key,
HO NVarChar (40) Not Null,
TEN NVarChar(10) Not Null,
Phai NVarchar(3) Default 'Nam'
CHECK (PHAI = ‘NAM’ OR PHAI = N‘NỮ’),
DIACHI NVarChar (50) Default ' ' ,
NGAYSINH SmallDateTime ,
LUONG Money Default 5000000
Check ( Luong >=5000000 And Luong <=20000000) ,
GHICHU NText )

Trong leänh Create Table, ta coù theå :


Chöông 3 - Data Definition Language 65
1. Taïo raøng buoäc veà khoùa ngoaïi vaø field töï ñoäng tính.
Ví duï 4: Xem ví duï taïo table CT_Phatsinh, trong ñoù coù theâm field
TRIGIA = SOLUONG*DONGIA:
Create Table QLVT.dbo.CT_PhatSinh
( PHIEU nChar(8) Not Null,
MAVT nChar(4) Not Null,
MAKHO nChar(2) Not Null,
SOLUONG int Not Null Check (SOLUONG > 0 ) ,
DONGIA money Not Null Check (DONGIA > 0 ) ,
LYDO nvarchar(30)
Constraint PK_CTPS Primary Key (PHIEU, MAVT) ,
Constraint FK_CTPS_PS Foreign Key (PHIEU)
References dbo.PHATSINH(PHIEU)
ON DELETE CASCADE ON UPDATE CASCADE,
Constraint FK_CTPS_VT Foreign Key (MAVT)
References dbo.VATTU(MAVT)
ON DELETE CASCADE ON UPDATE CASCADE,
Constraint FK_CTPS_KHO Foreign Key (MAKHO)
References dbo.KHO(MAKHO)
ON DELETE CASCADE ON UPDATE CASCADE
)

2. Taïo Unique Key :


Ví duï 5: Cho teân kho laø field khoâng ñöôïc truøng
….
Constraint UK_TENKHO UNIQUE (TENKHO)

3. Kieåm tra döõ lieäu ôû möùc record:
Constraint <teânRB> Check (ñk)
<ñk> trong Constraint Check chæ ñöôïc thöïc hieän khi naøo ta ghi döõ lieäu ñang
nhaäp vaøo table.
4. Boû qua vieäc kieåm tra caùc raøng buoäc trong nhaân baûn döõ lieäu:
Constraint <teânRB> Check Not For Replication (ñk)

Sau khi taïo xong Table, ta coù theå:


* Theâm hay xoùa 1 raøng buoäc:
Ví duï 6: Xoùa raøng buoäc FK_CTPS_Kho trong table CT_PhatSinh
- Alter Table QLVT.dbo.CT_PhatSinh
Drop Constraint FK_CTPS_Kho

- Theâm raøng buoäc veà khoùa ngoaïi treân field MAKHO cuûa table CT_PhatSinh.
Alter Table QLVT.dbo.CT_PhatSinh
Add Constraint FK_CTPS_KHO Foreign Key (MAKHO)
References dbo.KHO(MAKHO)
Löu yù: Ñeå kieåm tra taát caû caùc records ñaõ coù trong table phaûi thoûa 1 raøng
buoäc naøo ñoù thì ta theâm vaøo tuøy choïn With Check
Ví duï 7: Alter Table QLVT.dbo.CT_PhatSinh
With check
Check Constraint FK_CTPS_KHO
Chöông 3 - Data Definition Language 66
* Theâm, Xoùa, thay ñoåi field trong Table:
- Theâm 1 field :
Ví duï 8: Theâm Field Dongia vaøo Table Vattu
Alter Table QLVT.dbo.Vattu
Add Dongia Int Check ( Dongia > 0)
- Thay ñoåi kieåu cuûa Field
Ví duï 9: Cho ñoä roäng cuûa TENVT laø 40 kyù töï
Alter Table QLVT.dbo.VATTU
Alter Column TENVT Varchar (40) Not Null
Löu yù: ta khoâng theå thay ñoåi treân caùc field coù kieåu Text, Image, Timestamp,
caùc field töï ñoäng tính vaø caùc field duøng trong vieäc nhaân baûn döõ lieäu. Ta
cuõng khoâng theå thay ñoåi treân caùc field coù duøng trong field töï ñoäng tính,
duøng trong 1 raøng buoäc hay trong 1 chæ muïc.
- Xoùa 1 field:
Ví duï 10: Xoùa field DONGIA trong table VATTU
Alter Table QLVT.dbo.VATTU
Drop Column Dongia
* Xoùa Table: xoùa table VATTU khoûi cô sôû döõ lieäu QLVT.
Drop Table QLVT.dbo.VATTU

III. TAÏO VIEW: Trong SQL, 1 view laø 1 ñoái töôïng xuaát hieän nhö table aûo ñeå
user thöïc hieän 1 query hay thöïc hieän trong 1 chöông trình öùng duïng. Tuy nhieân,
view khoâng chöùa döõ lieäu. Thay vì vaäy, view ñöôïc ñònh nghóa treân 1 hay
nhieàu table cô sôû (hay treân caùc view khaùc), vaø vì vaäy ta coù theå xem nhö view
laø 1 phöông tieän ñeå truy nhaäp tôùi caùc table cô sôû. Ta coù theå duøng View
thöïc hieän caùc vieäc sau:
- Choïn ra 1 taäp caùc records trong 1 table cô sôû
- Taïo ra caùc coät môùi döïa treân caùc coät ñaõ coù trong caùc table cô sôû
- Keát noái nhieàu records töø caùc table cô sôû thaønh 1 record trong view
- Noái caùc record töø nhieàu table
- Thay ñoåi döõ lieäu treân table .
Ví duï 11: Choïn ra caùc nhaân vieân Nam trong cô sôû döõ lieäu QLVT
Create View V_NV_nam
As
Select * From Nhanvien
Where Phai='Nam'
Hay:
Create View V_NV_nam As
Select * From [QLVT].dbo.Nhanvien
Where Phai='Nam'

Sau khi cho leänh naøy thöïc hieän, ta seõ coù 1 View teân V_NV_Nam trong ñoái
töôïng View. Vaø töø ñaây veà sau, ta coù theå duøng noù nhö 1 table trong 1 phaùt
bieåu SQL khaùc.
Ví duï 12: Taêng löông nam nhaân vieân teân Thu theâm 1%
Update V_NV_Nam
Chöông 3 - Data Definition Language 67
Set Luong = Luong + Luong *0.01
Where Ten=’Thu’
Ta löu yù raèng trong ñieàu kieän cuûa leänh Update ta khoâng ñöa vaøo ñieàu kieän
Phai='Nam' vì ñieàu kieän naøy ta ñaõ coù trong View V_NV_Nam, vaø do ñoù, ta
seõ keá thöøa ñieàu kieän Phai='Nam' trong caâu leänh Update.
Ví duï 13: Taïo View teân NV_Nam_Luong2000000 chöùa caùc nam nhaân vieân coù
löông 2000000 ñoàng
Create View NV_Nam_Luong2000000 AS
SELECT * FROM NV_NAM WHERE LUONG =2000000
Chöông 3 - Data Definition Language 68
* Döõ lieäu trong View coù theå laáy töø nhieàu Table:
Ví duï 14. Taïo view teân Vattu_Nhap coù caùc coät sau: Soá phieáu, Teân vt,
Solg, dongia, teân kho, Hoï NV, Teân NV
Create View Vattu_Nhap As
Select dbo.Phatsinh.Phieu, Tenvt, Soluong, dongia, Ho, Ten
From dbo.Phatsinh, dbo.CT_Phatsinh,
dbo.Vattu, dbo.Nhanvien
Where dbo.Phatsinh.Phieu = dbo.CT_Phatsinh.Phieu
AND dbo.CT_Phatsinh.MAVT = dbo.Vattu.MAVT
AND dbo.Phatsinh.MANV = dbo.Nhanvien.MANV
AND Loai = 'N'

* Neáu meänh ñeà Select trong 1 view coù duøng Group by thì view ñoù coù thuoäc tính
Read Only.
Ví duï 15: Taïo View teân TriGia_Phieu cho bieát trò giaù cuûa caùc phieáu ñaõ
laäp.
Create View TriGia_Phieu (Phieu, Thanhtien) As
Select Phieu, Sum(SOLG * DONGIA)
From CT_Phatsinh
Group By Phieu
* View chöùa Subquery cuõng coù thuoäc tính ReadOnly

* With Check Option: Neáu trong View coù theâm tuøy choïn With Check Option thì
caùc leänh Insert, Update treân view naøy seõ khoâng thöïc hieän treân caùc Field
laøm vi phaïm ñieàu kieän cuûa View.
Ví duï 16: Ta coù View sau:
Create View NV_nam As
Select * From [QLVT].dbo.Nhanvien
Where Phai='Nam'
With Check Option
thì caâu leänh sau seõ khoâng thöïc hieän:
Update Nv_nam
Set Phai ='Nu'
Löu yù: Tuøy choïn naøy seõ aûnh höôûng treân taát caû View ñöôïc taïo töø View
chöùa noù.

* Derived Column : field môùi ñöôïc xaây döïng töø caùc field ñaõ coù .
Ví duï 17: Taïo View gheùp hoï vaø teân nhaân vieân laïi thaønh 1 field
Create View dbo.Luong_nv As
Select MANV, HOTEN=HO + ' '+ TEN , LUONG From Nhanvien

* Xoùa 1 View: Drop View <teân view>

IV. TAÏO INDEX:


Thoâng thöôøng, khi ta taïo table coù khoùa chính (Primary Key) hay Unique thì SQL
Server ñaõ töï ñoäng taïo 1 chæ muïc treân table ñoù. Nhöng trong thöïc teá, ñoâi khi
ta muoán taïo 1 chæ muïc treân caùc field khoâng phaûi laø khoùa ñeå taêng hieäu
quaû truy xuaát; luùc naøy, ta duøng leänh Create Index
Cuù phaùp:
Chöông 3 - Data Definition Language 69
Create [Clustered] Index <teân Index>
On < teân csdl >.dbo.< teân table>
(danh saùch caùc field trong index)
[On <teân file nhoùm chöùa index>]
Ví duï 18: Taïo chæ muïc teân IX_Tenho_nv theo thöù töï Ten taêng daàn, truøng
teân thì saép qua hoï.
Create Index IX_Tenho_nv
On [QLVT].dbo.Nhanvien (Ten, Ho)
 Muoán xoùa 1 index : Drop Index Table_name.Index_name
 Lieät keâ danh saùch nhaân vieân theo thöù töï ten, ho:
select * from Nhanvien with (index(IX_Tenho_nv))
Löu yù: Phaûi thaän troïng khi duøng leänh Drop vì khi ta xoùa 1 ñoái töôïng thì taát
caû caùc ñoái töôïng coù lieân quan ñeán ñoái töôïng ñoù cuõng seõ maát theo. Ví duï
nhö khi ta xoùa 1 table thì caùc constraint, index, view döïa vaøo table ñoù cuõng seõ
maát theo.
V. CAÁP VAØ XOÙA QUYEÀN TREÂN TABLE CHO USER:
Muoán caáp, thu hoài quyeàn thöïc hieän caùc leänh treân töøng table, ta coù theå
duøng coâng cuï Enterprise Manager. Giaû söû trong cô sôû döõ lieäu QLDSV, ta ñaõ
coù 1 user kythu vaø 1 nhoùm PDT. Ta muoán caáp quyeàn/ thu hoài quyeàn select ,
insert, update, delete, exec cho user/nhoùm naøo treân table Sinhvien thì: right click
treân table Sinhvien, choïn Properties / Permissions:

Click Search, để chọn User hoặc Role: click nút Browse để tìm danh sách các
User/Role
Chöông 3 - Data Definition Language 70

Sau đó, ta đánh dấu check trên từng quyền muốn cấm (Deny) hoặc cho phép (Grant)

Ngoaøi ra, ta coøn coù theå thöïc hieän vieäc caáp/ xoùa quyeàn qua leänh Grant /
Revoke
1. Caáp quyeàn:
Grant <danh saùch caùc quyeàn>
On <teân ñoái töôïng>
To <danh saùch caùc users>
- Baûng sau ñaây cho ta bieát töø khoùa söû duïng trong danh saùch caùc quyeàn :
Töø khoùa Leänh Sql ñöôïc quyeàn thöïc hieän hay bò caám thöïc hieän
Chöông 3 - Data Definition Language 71
treân ñoái töôïng
Delete Delete
Insert Insert
References Add 1 Foreign Key
Select Select , Create View
Update Update
With Grant Grant
Option Revoke
All Taát caû caùc leänh
- Teân ñoái töôïng : coù theå laø teân cuûa table, view, Stored Procedure
Ví duï 19: Cho user lnkthu chæ ñöôïc quyeàn xem döõ lieäu treân caùc table
Nhanvien
Grant Select
On Nhanvien
To lnkthu
2. Thu hoài quyeàn:
Revoke <danh saùch caùc quyeàn>
On <teân ñoái töôïng>
To <danh saùch caùc users>
* Column-Level Security:
Leänh Grant/ Revoke coøn cho pheùp ta caáp quyeàn treân töøng Field cuûa table.
Ñieàu naøy seõ giuùp ngöôøi quaûn trò cô sôû döõ lieäu baûo maät döõ lieäu cao hôn.
Ví duï 20: Cho user lnkthu chæ ñöôïc quyeàn hieäu chænh döõ lieäu treân caùc
field (HO, TEN, PHAI, DIACHI, NGAYSINH, GHICHU) cuûa table Nhanvien.
Grant Select
(MANV, HO, TEN, PHAI, DIACHI, NGAYSINH, LUONG, GHICHU)
On Nhanvien
To lnkthu
Grant Update
(HO, TEN, PHAI, DIACHI, NGAYSINH, GHICHU)
On Nhanvien
To lnkthu

* Caáp/ thu hoài quyeàn taïo caùc ñoái töôïng:


Ví duï 21: Ngöôøi chuû cô sôû döõ lieäu coù theå caáp quyeàn taïo View, Stored
Procedure cho 1 user naøo ñoù (lnkthu) qua caâu leänh sau:
Grant Create View,
Create Procedure
To lnkthu

Caùc leänh SQL sau coù theå duøng ñöôïc trong leänh Grant/Revoke:
Create Database, Create Table, Create View, Create Procedure, Create Default,
Create Rule, Backup Database, Backup Log.
Löu yù: Trong moãi cô sôû döõ lieäu ñeàu coù 1 taäp caùc table heä thoáng, caùc
table naøy löu tröõ caùc thoâng tin maø ta ñaõ moâ taû trong quaù trình taïo cô sôû
Chöông 3 - Data Definition Language 72
döõ lieäu (caáp phaùt vuøng nhôù cho cô sôû döõ lieäu, caùc coät cuûa table, caùc
raøng buoäc, vaø chæ muïc…. )

Baûng sau ñaây cho ta bieát caùc table heä thoáng ñoù (goïi laø catalog)
Table Noäi dung
sysallocations Caáp phaùt vuøng nhôù cho file cô sôû döõ
lieäu
syscolumns Moâ taû ñònh nghóa caùc coät
syscomments Moâ taû views, rules, default, trigger, check
constraint, vaø Stored Procedure.
sysconstraint Aùnh xaï caùc constraint tôùi caùc ñoái
töôïng.
sysfiles, sysfiles1 Thoâng tin veà teân file cô sôû döõ lieäu
treân dóa, vaø vò trí cuûa chuùng
sysforeignkeys Caùc ñònh nghóa veà khoùa ngoaïi
sysmembers Thoâng tin veà thaønh vieân cuûa nhoùm
sysusers Chöùa caùc user vaø caùc roles

VI. TAÏO DIAGRAMS: Diagram laø ñoái töôïng duøng ñeå taïo, quaûn lyù, vaø xem
caùc ñoái töôïng cô sôû döõ lieäu döôùi daïng ñoà hoïa. Khi ta taïo caùc khoùa ngoaïi
thì thöïc chaát ta ñaõ thieát laäp ñoái töôïng diagram baèng leänh.
Khi taïo caùc moái quan heä giöõa caùc table treân diagram, SQL Server seõ töï
ñoäng phaùt sinh caùc trigger kieåm tra caùc raøng buoäc döõ lieäu veà khoùa ngoaïi
töông öùng, vaø ñieàu naøy giuùp baûo veä söï toaøn veïn veà döõ lieäu.
Caùch taïo:
Right click treân ñoái töôïng Diagram/ New Database Diagram, chọn caùc table
caàn taïo moái quan heä, sau ñoù ta duøng mouse drag teân field quan heä ôû table
naøy qua field ôû table kia.
Sau khi hoaøn thaønh, ta coù diagram sau:
Chöông 3 - Data Definition Language 73

Löu yù: Trong diagram, ta coù theå hieån thò caáu truùc cuûa table theo nhieàu
daïng khaùc nhau, vaø theâm vaøo caùc chuù giaûi.

You might also like