viôc qu ả n lý các lồi vh các giao dịch... PHẦN ITIẾP CẬN.
Trang 1I
Trang 3ĐAI H O C Q U Ố C GIA H À NÔ!
Trang 7LỜI NÓI ĐẦU
N g ô n ngữ SQL làm c h o việc q u ả n lý các dữ liệu tin học trở nên th u ận tiện một cách k h ô n g thể chối cãi được Nó c h o ph ép viết một cách đcrn giản các yê u cầu rất tinh vi Cùn g một yêu cãu n h ư vạy Ircng m ộ l n g ó n ngữ cổ điển ( ch ăng hriii nh ư c ,
X b a s e , C O B O L , ) sẽ đòi hỏi nhiéu chụ c, thậiri chí nhiều trăm d ò n g lệnh
L à m ộ t cô ng cụ m ạ n h m ẽ có lính ng u y ê n bản, SQL cũ n g c h o ph ép k h á m phá lâì n h a n h những điều bất ihườiig trong c ác dữ liệu, vạch ra n g u y ê n nhân c ủ a m ộ t ỉỗi xuất hiệ n do k h ác h hà ng th ôn g báo, và cũ ng thực hiện dược n h ữ n g lính loán Ihống
kê tinh vi
N g a v cả đối vói một nh à lập trình k h ô n g triển khai c ô n g việc n h ờ sự trợ giúp của vSQL thì việc bảo trì cá c b ả n g và các irình ứng dụng c ũ n g thuận lợi rất nhiều nếu biết q u ả n lý các dữ liệu b ằ n g cácli Irao đổi tương lác vói SQL
M ọ i hệ thống qu ản lý các dữ liệu, ne ay cả các dữ liệu k h ô n g phải d ạ n g quan
hệ, g i ò đây cũng có dược một c ô n g cụ cho c ác yêu cầu và các b á o c á o d ự a trôn vSQL C ũ n g vây, mọi c ô n g cụ để phát u i ể n các Ir'mh ứng dụ n g , là cổ điển h a v hư ón g đối tượng, cũn g đề nghị có n h ữ ng điểu kiện thuận liện cần ihiếl để truy n h ậ p các dữ liệu th ô n g qu a SQL
S Q L đ ã Irở nên cổn (hiết k h ô n g lliể bỏ qua được dối với m ộ t nh à phát triển
c h ư ơ n g trình chuy ên nghiệp
Tấ t nhiên, k h ổ n g phải vì thế m à tất cả đã hoàn toàn là mhu hồng N g ô n ngữ
SQ L lúc đầu được phát triển vào giữa Iiliữiig n ãm 1970, chỉ mới được chuẢn hoá vào
n ăm 1986 Tu y còn chưa Cu'iv đủ, nh ư n g ch uẩn đầu tiên nàv đã tạo thuận lợi ch o sự phát Iriổn vô vàn p hư ơn g Iigữ, Í1 nhiều k h ô n c tương Ihích với nhau, k hi ến c h o việc
m a n g một tiìnỉi ứng d.ụng sang ch ạy trên một nẻn k h ác trở nên k h ó kh ăn Chu ẩn yếu ỚI S QL -8 9 đã k h ô n g cải thiện được íình hình này
T u y nhiên, thế giới lin học đã có nhu cầu lo lớn về inột ngô n n g ữ c h ắ c chắn
và vạn n ă n g để Iruy nhộ]-) các dư liệu Các khái niệm cũng quan trọng n h ư việc để lâm tới c ác ràng bu ộc, tính loồn vẹn quv cliiếu, các giao dịch và cá c con trỏ có thể
c u ộ n được cò n chưa dược xem xél trong c ác chuíỉn 1986 và 1989 Mặl k h á c , người
ta đ a n g c h u ẩn bị cho sự lêii ngôi của cá c hệ thống có cấu trúc k h á c h h à n g - Ihiết bị dịch vụ (client-serveur) c h o ph ép sự trao dổi thông lin giũa các k h á c h h à n g và các
ihiêi bị dịch vụ phức lạp ĩiìù í n f ớ c Ììếí áó là sự k h ô n g tương thích Chỉ có mỌt ngôn
n g ữ S Q L duy nhấl, một ch u ẩ n thực sự mới c h o ph ép phát triển c á c hệ t h ố n g như vậy
V ậ y là trong những n ăm gán đâ y, c h ú n g la đã IhaiTi d ự vho hai sự kiện nổi bạt trong i h ế giới tin học cá c cơ sở dư liệu Trước hết là cuối n ăm 1992, sự th ô n g qua
c h u ẩ n SQL -92 , m ộ t tham k h ả o thực sự đã đưa n gô n ng ữ này vượt lên h ẳ n trình độ cùa c á c p hư ơng ng ữ k h ác nhau đ a n g được sử d ụ ng khi đó Sau đó, việc được thị trưòmg c h ấ p nhận vào n ăm 1993 và 1994 củ a các API (viết tắt của Application
P r o g r a m m i n g Interface - Giao diện lộp trình ứng dụ n g ) đã được c h u ẩ n hoá như là
O D B C và IDAP, đã cho p h é p kết nối với c ác thiết bị dịch vụ nào đó m à k h ô n g yêu cầu sự phù hợp với c h uẩ n mới của c h ú n a
Trang 8C h u á n 2ần dâv, S Q L - 9 2 , de m lại m(M cuộc cách m ạ n e thủt sự cho sự phất iriểr
i m ô n n g ữ nàv từ ỉ 0 0 trang ván bàn cùa ch u ẩ n dã lên tới 60 0 trang.!
S Q L mới Irước tiên rõ ràng là m é m d ẻo hơn cho viộc sử dụỉig, ch ả n g hạn chc
p h é p thưc hiện c á c vêu cẩu lỗng gh é p ừ inọi mứ c dộ cù a lệnh S EL EC T Đặc biệt nó
p h o n g p hú hơn rất nh iều , nhất là ve các loại dữ liệu, vicc mò tả íheo cách khai b;ì0
đ á y d ù c á c r àn g DUỘC v ề lí nh toàn vẹn ( in t é g r i t é ) , v i ệ c q uà n lý n g h i ệ p vụ c á c 2Ìắ
d ịc h ( tr an s ac ti o n) và một sư c h u ẩ n ho á ch o S Q L năng động
Đi th eo sư liến triển c ủ a n a ô n n a ữ SQL, lẩn xuất bản Iiàv cù a cuốn sách đã dòi hỏi n h i ề u hoàn c h ỉ n h sâu sắc so với lán xuất bản tmớc K h ô n g cầu toàn, ch ú n g tôi m u ố n thực hiện m ộ t c ổ n g trình trước hết dể dạy học T h e o quan điểm nàỵ
c h ú n g tôi luôn luôn ưu tiên việc aiải thích đầv đủ một khái n iệ m bằnR một thí dụ,
h ơ n là đi s â u vào c á c chi tiết phức tạp củ a cú pháp C h ú n s tồi m o n g rằng cuốn sách
n à v trờ t h à n h c u ố n s á c h b ổ su n g c h o các tài liẻu tra cứu cấn thiết vẻ hệ Gu’ip l'i co’
sờ d ữ liệu ( H Q T C S D L ) c ủ a q u v vị
C ô n g trình c ủ a c h ú n g tôi dược chia làm năm phẩn kh á rõ rệt Mỗi người liohn
lo àn c ó th ể tiếp c ậ n c u ố n s á c h nàv tuỳ theo m ứ c dồ tươna ứ ng vói nhu cdu của
m ì n h Đ ộ c giả n ao đ à q u á q u e n với S Q L tương tác (interaciif) có thể chu y ển n gay
s a n g p h á n thứ tư liên q u a n đ ến việc lộp trình m à k hô n g cả m thấv có k h ó khăn gì
N g ư ợ c lạị m ộ t n h à lộp trình mới làm quen với ngón nRỮ SQ L sỗ c ả m thấỵ íhoài mái
t r o n e p h á n n h ậ p m ô n (initiation), vì phần này k h ỏ n e đòi hỏi phải biết trước diều sì cả
P h á n ĩ T i ế p c ậ n n gô n n g ữ S Q í
Đ ể c ó thể d à n h n hi ều hơn cho việc ng h iên cứu c h ín h SQL, ch ú n g lôi dã rút
g ọ n p h ấ n n à y s o với lần xuất b ản dầu tiên
Đ ắ u tiên, c h ú n g tôi m u ố n định vị ng ôn ng ữ SQ L đối với c a c hệ qunn !ý các (lữ liệu hi ện Ihòi n h ằ m m ụ c đ íc h vạch ra cá c n e u y ê n lý vạ triếr lÝ của na,ôn ngữ mới này K h i chỉ ra sự p h à n c h i a m ộ t hệ qu ản trị c ơ sờ dữ liệu q u a n hệ ( H Q T C S D L )
th à n h ba m ứ c , c h ú n g tôi Ipm nổi bật tính cliất k h ỏ n g thủ tục củ a các yêu cầu S Q L , lợi ích c ơ b ả n c ủ a c á c k h u n g nhìn (vue/vievv) và việc tối ưu hoá cần thiết các céíu trúc b è n tr o n g b ằ n g c h ư ơ n g trình qu ản trị (th òn g qua SQL) Khi mò tả các k h á i niệin và c á c ưu đ i ể m nh iều m ặ t củ a cấu trúc k h á c h hàng - thiết bị dịch vụ, chún g tôi chỉ ra vai trò c h ủ c h ố t m à S Q L ch iế m giữ với tư cách là mộ t còng cụ van n ă n s và (ỉã
đ ư ợc tói im 'noá dà n h ch o th ô n g tin
Sau d ó c h ú n a tôi n h ắ c lại m ộ t cá ch ngắn gọn vài khá; ni ệm vể q uan hậ cíìn thiốt c h o việc khai thác n e ỏ n ngữ này có hiệu quà (khái r.iệm vô kh o á sơ cốp -
p r im a r y k e y , và k h o á n s o ạ i - foreign key, về các ràng bu ộ c, '-é từ điển .)
Ciiòi c ù n g c h ú n g lỏi đưa ra lập liợp cấ c n g u ổ n eỏc củ a ngỏii Iigữ và hình ihàiih
m ộ t lịch s ử tóm tắt nôu rõ q u á trình ch u ẩ n hoá và sự hAm r r , h i ệ n nay đối vói c á c
k ỹ thuàl iliuoc loại APỊ
Trang 9L ơ ! n o ỉ U ì u V
Ị’ hàn i l N h â p mòn
Sư bận tâm thứ nhất cu a c h ú n g tôi ià làm sao c h o việc tiếp cộn trờ nên có tính
> hnt giảng day nhiòu iiiiOt Moi khái niỌin déii (Urơc đề c â p th ổ n g qu a nhiều 1Ỉ1Í (lụ phứe tạp d ầ n 'lirơc (hực hiện trên một c ơ sở dữ liệu ihực tê m à tlộc giả có thể thiè! âị) và thao tác '<heo cách Ihức lương lấc trên H Q T C S D L c ủ a mình Troiig giai đo ạn làv, c h ú n g tôi dã iniiốn hỏ qua cá c chức năng đa d ạ n g tiéii tiến (các c hứ c n ă n s nàv
;ẽ tlirưc dưa ra Irona phần sau) dế tập trung vào c ác n g u y è n Iv c ơ bản c ủ a n g ô n ngữ
' ĩ r ư ớ c tiên m ò tà cấu trúc c ù a c ơ SỪ d ư liệu “ E x e m p l e ” c ủ a c h ú n g tôi, sau đ ó là
I rì nil bay c á c hàni vlc tao lAp vì\ điền (ỉữ liệu vno ch ú n g T i ế p Ihco c h ú n g tôi đ ề cfip
Ilieo c á c h ihức thẻin dfln các phấn tử k h ác nhau củ a m ộ t yêu cá u S E L E C T , có chú V lách riồns cá ch truv nh ập đoíii bản g (tức là truy nh âp tới m ộ t b ả n g d ữ liệu) từ các vẽu cáu d a bản g và cnc yêu cáu được lổng g h ép (tức là c á c yêu cầu đư ợc kêt nôi
P h á n III H oà n thiện
Khi đã có đư ợc các khái niệm cơ bản củ a ngôn n s ữ , bAy gi ờ cliúng ta có thể đồ
c á p tới c á c chứ c năn g m ạnh hơn của SQL
vSau khi đã m ò tả một c á c h nh an h c h ó n g ở c h ư ơ n g 8 c ấ c c h ứ c nă n g c ủ a s ơ dồ,
cù a kết nối và về phiên làin việc - gọi lắt là phiôn (ses sion) - với S Q L và hệ qu ả n trị
c ơ .sở dữ liệu, chúnR tôi dề cộp tới một Irong Iihữns c h ư ơ n g then chốt: cliương liôn
qu an tới c á c ràng buộc (contrainte) Các ràng bu ộc này được inô tả m ộ t c á c h rất ti
m i và đ ư ợ c m i n h ho a b ằ n g Iihiểu llií dụ, k h ô n g q u ê n c n c t r i g ư và c á c thù tục tin
được lưu trong bộ nliớ còn chư a dược dự kiến trong c h uẩ n C h ư ơ n g 10 đưa ra một vni biểu Ihức mới rất m ạnh củ a ch u ẩ n SQ L-9 2 C h ư ơ n g 1 1 đ ề na h ị giải qu yết cá c yèu cẩu ử m ứ c cao Chư ơng này dặc hiệt có ích Iiếu qu ý vị m u ố n ihành lộp inộl tộp hợp các tính loan th ống kê Cịuan trọng trên c á c dữ liệu c ủ a q u ý vị C h ư ơ n g 12 dồ cộp tới kh.ii niệm q uan trong về k h u n g nhìn (vue) và nh iều ưu đ i ể m c ủ a nó C ác thí clụ phức tạp ờ cuối chương hoàii utl một cá ch tôt d ẹp cá c thí dụ trình bòy ở c h ư ơ n g Irước, vì c á c k h u n g nhìn đã ciiiig cấ p inột trạng thái đ ộ n g c h o cá c h ả n g còn tĩnỉi ở
c h ư ơ n g 1 1 C h ư ơ n g 13 bàn ve c á c giao (lịch, khái ni ệm này đư ợc khni Iriển với một
sư chii ý đ ậ c biệt vì ch ú n g tôi c h o rằng, nó đã bị hiểu lầm và (hường là khôiiR được
sừ (lụng hết mức C h ư ơ n e 14 (iổ cộp tới các h àm q u a n trọng nià n h à qu ả n trị ỈIỘ tliông phải q u a n lâm tới c h ú n g nhiồu hơn (các q u y ể n truv nhộp liiệu năng vh từ diổn các d ữ liôu)
Ph ầ n IV I-,ảp trình
Đ;ìy !à giai đoạn cuôi cìing cùa viỌc học SQL 15 kết q u ả c ủ a việc tiếp lliu inoi khái niệm c ho tới lúc nồv C h ú n g lỏi dã l.ìiig clííng kể phÀn Iihy so với lán Kuấl b;’iii trưíýc vì mọi nhà Iriểii khai viẹc ứng tlụng dồii qu an tf\m tnrc liếp tới phÀii Iiày và là
piiủii Irưc liỏp b ồ ích hơn cn ở đAy c f i n g vẠy, c h ú n g tôi Iiioiig m u ỏ i i là nlũriig n g ư ờ i
giaiiií '-lụy và liến bộ C h ú n g lOi (lổ cẠp tấl c:i c á c kỹ thiiẠt lẠp Irình h ă n g SQ L mỏl
cá ch tì mỉ qua nhiỏu 111! du Irọn vẹn; ngổ n ngữ S(^L tích liợp, đ(tn ihè SQL S Q L ctỏiií’ và viôc lộp Irnih nliờ API O D B C cu a Microsofl C h ú n g tôi d ặc biệt nhốii mạiih
Trang 10viôc qu ả n lý các lồi vh các giao dịch Cuối cÌMig c h ú n g lôi kết thúc b ằn g inột inô lả
các lớp S Q L được viết bãiig C++, cá c lớp này đã lộn d ụ n g đ ư ợc clÀy đu cá c ưu (.liổm của cá c h liếp cận định hư ớn g đối urợng
P h ầ n V C á c p hụ lục
T a sẽ tim thấy trong đó:
• M ộ t m ô tả ngấn gọn về cá c m ứ c phù hợp cùa S Q L -9 2 ,
• M ộ t tra cứu chi tiết vể cú p h á p của S Q L -9 2, ciựa trên văn p h ạ m BNF,
• Đ á p án của cá c bài fập dược đưn ra Irong c u ố n sách,
• Một thư m ụ c ng ắ n gọii c á c c ô n g trình vh c á c bài b á o nôn biết,
• Một chỉ inục đầy đỉi (d anh sách đã s ắ p Ihứ tự tlieo ciiữ cái VC các từ cá c chù
đé, c á c dan h từ xuất hiện Irong mội c ô n g Irình m ộ t tu yển tộp, v.v và c ấ c q u y địiih tra cứu để lìm lại chúng)
C u ố n sách nàv ià kếl quả của gán mười n ã m g iả ng finy về c ơ sở d ữ liệu qiinn
hệ trong c á c trường tin học, và c ũ n g là kinh n g h i ệ m đư ợc íích ỉuỹ díìn trên iĩnh virc tin học th ưo ng mại C h ú n g tôi đã có dịp triển khai nhiều ứng d ụ n g k h á c nhnu
t r o n g m ô i Irường k h á c h h à n g - thiết bị d ị c h vụ với n h ữ n g c ơ s ở d ữ liộu m u ô n VC n hư
O R A C L E , I N F O R M I X , I N G R E S , RD B, N E T W A R E S Q L / B T R I E V E và
W A T C O M SQL ở đây c h ú n g lôi c a m ơn nhiều thê hệ sinh viên b ằ n g n h ữ n g c á c h
k h á c nh au, đôi khi còn bị hạn chế đã cuiìg cấ p tư liệu c h o k i n h n g h i ệ m c ủ a c h ú n g tôi
Cuối c ù n e c h ú n s tỏi c ũ n g xin c ả m ơn Ciirisiophe P Ỉ A N N O S S E T , cử nliân Ún học cù a Đại học tổng hợp Liège , người đã gi úp c h ú n g lôi thực hiện n h ữ n g khái
ni ệm vổ c á c lớp S Q L c ủ a sản p h ẩ m C C S Q L đã dược nói tới tro ne c h ư ơ n e 19
Sau lời nói đấu dài d ò n g này, cuối c ù n g c h ú n g tỏi có thể c h ú c qu ý vị đ ọ c lỏì
cu ố n sách này Đ ư ơ n g nhiên, k h ô n g có tliể nói hết và h ọ c được hết mọi thứ vổ SQ L chỉ trong m ộ t cô n g trình n h ỏ b é nh ư th ế này N h ư n g việc thực hàn h n g ô n n g ữ này
c h o m ỗ i yêu cầu, mõi c hư ơ ng tnnli đều là khơi n g u ổ n c h o c á c k h á m phá đ á n g say mê
Christian M A R E E
G u y L E D A N T
Trang 111 3 4 C’ltnycn (!ổi c:k' Idíti (iiì iicii
li
s
<)o
nm“i (ỊIKUI ly ino limli (|ii:ui ho1.1 MỞ(1;1||
1.2 S Q i IKinu k iCii 1I IIC CÌK' i('yịi ! I ( ) I ('1 )1
1 2 1 M n c k l i : í i I i i c i i i
1.2.2 M ú c
1 2 3 M i k ' 11 o n ^
1 2 4 ( V k ' l í n h c liAl c u;\ c f i c l i | i h : u ) ii;iN
1 3 2 Ỉ V i ể n ( ỉ i c i ) m o i l i ê n l i ê g i í ì : i ( ' ; i c h í i n g
1.1.3 B i c u flic'H (.-ííc Iiin'j huOc' v r línli I dà n \ ' cn■, •
1.3.7 N j i ô n iio,n l i n y nliAp (V iinVc CÌU1
1.4 Kiên Inic kliiicli hniig Plii.K' vu vii li iivcii lliôim (Ịu;i S'(^l, I I
l <i.2 ( ' ; í c t i ^ n y c n l ý c n : i i n o l k i r i i l i i i c k h i í c l i ÌIỈIIIỊI - I'’l i n c v u I ^
2 S ( ^ L S1I Miíìt ỉ i ìCmi nióỉ n^óii Iiịỉíi IU(VÌ A :)I1 IlAIl^ ’ '
2 2 liCp c â n k i c u t áp li(Tp v;i n j i ò n n g ũ (ini s o
2.2 1 ( Vif nmiycii (íic
2 2 2 ( ':u' I(1:ÍI1 m n j : n y c n l l i n v c ơ ỉ-i;ui
2 2, ' ' ( ’: k- l o í í n III n m i y ê n l l i u v p l i : i l s i i i l i
2.2/1 r ổ liợp c;k' Idán lủ Iiuiivcn llinỷ
2.2.5 D í i n g loiiíi (ìii;'il cíin I11Ó1 y c u cÀti S Q L
2 3 ( ' rui l i i U ’ l ổ i i n ( ị i K Í I c u : i I 1 Ị 2 Ô I 1 I I , u ữ
W)líi
Trang 12N g ô n nmi S í ^ l
9.4 Các ràiig biiỌc líiili loìiii vẹn (|11\' chiêu
1 2 5 3 C';k' (ỊViy l : i r Ị t hni l ô i i l i d i i í i ( l ể v ó l l i c s u ; i k l m i i j : n h ì n l i í u i u S ( ^ l
12.7.2 l)(in ^i;in Iihrin cácli lui:i ('(V s('t tlữ lien M ■
\ À ' 1 ’í i i l i (! (' »' I f t p g i i í ; ' ( ■: i c l i ì n l i l ì i i u ( l i u i n \ ' à l i ĩ í T c ( l ổ k l i í í i I i i c n i
Trang 1312.7.5 V i c c d ư a v à o c á c ranc, h u õ c VC tính toàn v c n 143
Trang 1416.2 (,)ti:i Imi i i pli;ii li i(:-n Ị
lfi-4.1 Ọiiiui lý vùng S Q I X ’A (Iiuov C'liiuin SỌ1.-92) I H*-)
1 6 5 ' r i i i i V i i i : h o | i c a c iziil I n N l I L I , I L)()
16.0 c:ác Icnh S L L E C T CC) (liiniz 111ÔỈ coil irci T()()If'.G.i Lvi.ii S K L E C r Ir.i lai Iihicii non Iiuil iiòi)<' ">()()
a K i i i u b á o c o n I r ó ( D E C L A R E ) 2 0 2
t 1 rich ci'ic dll lieu (FEriX'l I ) cii;i C(in ti'o, lime (long niộ! 20"^
WV6.3 C'ap Iiiiàl ( ' U P D A F f i ) v;i X(i;i ( I ) E L E i l : ) clòi iu l i i ệ n lli ời '^04
ci S E L E C T , c l u r a b i ê l CÍÍLI I n i t ' k è ! CỊU;1 ù ã ấ n c i i i ì ì i Ciie' i h ó n g s ó 2 ^ ( i
I H 2 2 C ; i c ' l Ị i i CÌLI CLKI c a c ỉ i IICỊ') c a i ) c ũ v c S Ụ L ( l o i i u
a L c n h k l i á c vSELECl ' ki i oi ì u c o lÌK 11111 S(')
b, L c i i l i k l i á c S E L E C ’ I , C(') e;i^' I h ó n o s o c n ( i i n i i
2 3 3 - - - - N í m ')( ì 11!MI N( )Ị
■
Trang 15c l cnli S E L E C ’ l , l)icl Ci'iii ti kcl ( i n ail (ỉịnli c á c i h ó i i g 2 3 5
D E C ' L A i ^ E \' à ALL( ) ( ' A1 ' F- C l l R S O K (klìai b á o và p h á n pl i ối C(in I r ỏ)
O P E N , F E T C H C ' L O S i i (mo' , n ÍCỈI láclì clón<i)
Trang 16X I V N u ỏ n imư S ( ) I.
22 Lòi ^iai cá c bài tậ|)
C ác liài lâp của cluĩoim 7
Trang 17PHẦN I
TIẾP CẬN