Đăng ký Đăng nhập
Trang chủ Giáo dục - Đào tạo Cao đẳng - Đại học Đại cương Kỹ thuật và thủ thuật lập trình hướng đối tượng php...

Tài liệu Kỹ thuật và thủ thuật lập trình hướng đối tượng php

.PDF
285
13
108

Mô tả:

Th.S: NGUYỄN MINH - LƯƠNG PHÚC và nhóm tin học thự c dụng Kỹ thuật và thủ thuật lập trình hướng đốì tưỢng P H P Khái niệm, kỹ thuật và viết mã ♦ T rọii bộ 2 tậ p hạn sẽ có cơ hội cọ x á t đ ẻ n ân g cao Icỹ n ăiig lậ p trm li tliôiig q u a việc tliự c h à n h s ủ dm iíỊ các tín h năng cao cáp, ch ẳn g h ạ n n h u các vấii íiti cơ sd d ứ liệii, MySQỊv, SQỊvite và P D O c tia P H P ♦ Với phươiiq p h áp hiíớnQ d ản t à n g ví d ụ b ạ n sẽ Idiỗnp Iiliửng d ể dàiiíỊ n ắ m b ắ t các Id iái mộiTL c ă n b ảii, nâng cao liơii ciiiiẹỊ Iiliit c ách SI^ dxuig các côniỊ cxx lậ p trù ili New Edition ciia P H P đ ễ v iế t các ch tíớ n g t r ì n h P I Ỉ P că n bảii ^ Mỗi chương cồn có n h iề u b à i tậ p tliụ c liảiứá n ià b ạn n ê n làm th e o đ ể n ắm vũnữ, n ộ l dting đtíỢc tr ìn h bày, b ao g è m sự cài đ ặ t phlui m ề m , c ú p h á p ngôn ngiì, các c ẩ u trứ c d ữ K ệư... ♦ Mà điểm đặc b iệ t ciia bộ sách chính là ở I>hươiig pliáỊ hướng d ẫ n r ẩ t đơn g iản và cỢc kỳ d ề tiế p tìiư NHÀ XƯẤT BẢN HỒNG ĐỨC I v ờ l NÓI ĐẦU B ộ s á c h " K j' t l i u ậ t v à th ủ t h u ậ t lậ i) tr ìn li liư ớ n g đ ố i tư ợ n íị P H P ” đ ư ợ c b i ê n so ạn n h ằ m m ụ c đ íc h d à n h clio n h ữ n g người m ớ i b ắ t đ ầ ii biíớc c h â n vào t h ế giới c ủ a ng ô n n g ữ lậ p ư ù i h P H P . K h ô n g giống n h ư n h ữ n g s á c h Idiác, s á c h n à y Id iô n g đ ò i h ỏ i b ạ n p h ả i h ọ c q u a trư ớ c các v ấ n đ ề c ă n b ả n v ề lậ p tr ìn li W eb ha}' cơ sỡ d ữ liệ u . M à đ iể m đ ặc b i ệ t c ủ a b ộ s á c h c h ú ih là ở p h ư ơ n g p h á p h ư ớ n g d ẫ n r ấ t đ ơ n g iả n v à cự c Icỳ d ể tiế p ứ iu . T liự c vậy, với p h ư ơ n g p h á p h ư ớ ng d ẫ n b ằ n g v í d ụ b ạ n s ẽ Id iô n g n h ữ n g d ễ d à n g n ắ m b ắ t các Id iá i n iệ m c ă n b ả n , m à tliồ n g q u a đ ó s ẽ d ầ n trở n ê n q u e n tíiu ộ c với các Id iái n iệ m n â n g cao h ơ n c ủ n g n h ư c á c h s ử d ụ n g các cồng c ụ lậ p trìn h củ a P H P đ ể các ch ư ơ n g t r ì n h P H P c ă n b ả n . H ơ n n ữ a , với tr ọ n b ộ 2 tậ p b ạ n s ẽ có cơ liộ i cọ x á t đ ể n â n g cao k ỷ n ă n g lậ p t r ì n h tliô n g q \ia việc tliự c lià iili s ử d ụ jig các t í n h n ă n g cao cấ p , c h ẳ n g h ạ n n h ư các v ấ n tin cơ sở d ử liệ u , M ySQ Ị/, S Q L ite v à PD O c ủ a P H P , c á c cô n g n g liệ XMIv, c á c coolcie, s e s s io n và lie a d e r, và các p liầ n m ở rộng c ủ a b ô n t h ứ b a. S á c h có b ố c ụ c rỗ rà n g th e o từ iig ch ư ơ n g và đ ề m ục, các b tíớ c h iíớ n g d ẫ n c ụ ứ iể và d ễ h ic ii. M ỗi cliiíơ ng còn có n h iề u b à i tậ p ứ iự c h à n li m à b ạ n n ê n là m th e o đ ể nắm ^àỈIlg n ộ i d m ig d ư ợ c tr ì n h b ày , b ao cỊồtn sự c à i đ ặ t p h ầ n n iè in , c ú p h á p n g ô ii n g ữ , các c ấ u ta*úc đ ữ liệ u , các th tíờ n g I x m li đ i c u I d i i t n , c á c lià n i c à i s ẵ n , v à n liiềa i t á c Aại liữ íi íc h k h á c . H y vọng s á c h s ẽ là n iộ t tà i liệ u h ọ c tậ p h ữ u íc h ch o b ạ n đ ọ c tro n g q u á t r ì n h ti-ỏ tlià n h m ộ t c h u y ê n g ia v ề PH P . T ấ c g iả C h ư ơ n g 7: Làm v iệ c vớ i các cơ sỏ dữ liệu và S Q L PHẨN 2 Làm viêc với dữ liêu từ những nguồn khác CbiửJ9ig 7: Làm v iệ c với cá c cơ s ở d ữ liệu và SQL Chươìig &• Làm việc với XML Chương 9: Làm việc với các Cookie, Sessiơn, và H ea d er Chươĩtg 10: X ử lý cá c lỗi Chiừýiìg 11: Bảo vệ an toàn PHP Cbươềig 12: M ờ rộng PH P 8 C h ư ớ n g 7: Làm v iệ c v ớ i các cơ sỏ dữ liêu và SQL ...................................................................... Làm việc với các cơ sd dữ liệu vò SQL Những kỹ năng và k h á i niêm chính Ị Ể! Hoc nbiÌỲìg kbái niệm cơ sở d ữ liộn I'à Stnicliired Qiierỵ Langỉiage • Thêm, biên tập, xóa và xem các record sứ dụng các MySQL và SQLiie CO' sở ciữ liệit M Tniy tìm các record cơ sứ d ũ liệu iĩới PHP • ỉỉiộii lực bóa và htli dữ liệu ĩihập Cíta ngííời dũng sang mộ! cơ sở dữ ìiC>ti ì'ới PHP » Viết các cbỉỉơtìg trình điền khiền bàng cơ sở đ ữ liệu kbả chìtyển (portable) M ột trong những lý do cho sự th ô n g dụng của PH P n h ư là m ột ngôn ngữ v iết script Web là nó hỗ trợ m ột dãy rộng các hệ th ố n g dữ liệu quan hệ. Sự hỗ trợ làm cho các n h à p h á t triển Web dễ dàng tạo các Web site điều k h iển bằng dữ liệu và tạo nguyên các ứng dụng Web m ột cách n h an h chóng và hiệu quả. C h ư ơ n g 7 : Làm v iệ c với các c ơ s ỏ dữ liệu và SQL PH P hỗ trợ hơn 15 bộ máy cơ sở dữ liệu khác nhau bao gồm Microsoft SQL Server, IBM DB2, PostgreSQ L, và Oracle. Cho đến P H P 5, sự hỗ trợ này đă được cung cấp qua các extension cơ sở dữ iiệu riêng, mỗi extension có chức n ăn g và tín h n ăn g riên g của nó. Tuy nhiên, điều này đã làm cho các n h à p h á t triể n khó th ay đổi từ m ộ t bộ máy cơ sở dữ liệu này san g m ột bộ m áy cơ sở đữ liệu khác. PH P 5 đã giải quyết tìn h huống n ày b ằn g việc giới thiệu m ột API chung cho sự truy cập cơ sở dữ liệu: extension P H P D ata Objects (PDO), cung cấp m ột giao diện hợp n h ấ t để làm việc với cơ sở dữ Uệu %'à giúp các n h à p h á t triể n xử lý những cơ sở dữ liệu k hác n h au một cách n h ấ t quán. T rong P H P 5.3, extension PDO đã được cải tiến th êm nữa với sự hỗ trợ cho các bộ m áy cơ sở dữ liệu mới và những tối ưu h ó a th ê m nữa cho an n in h và hiệu suất. Đ ể đ ạ t được k h ả n ăn g tương thích ngược, các extension cơ sở dữ liệu riên g cũng tiếp tục dược hỗ trợ. Bởi vì b ạn sẽ thường tự n h ậ n thấy m ình đã chọn giữa m ột extension riêng của m ình (m à có th ể n h an h hcm hoặc đưa ra nhiều tín h n àn g hơn) hoặc PDO (đưa ra tín h k h ả chuyển và tín h n h ấ t quán qua các bộ m áy cơ sở dữ liệu), chương n ày đề cập d ến h ai tùy chọn; chương giới thiệu về PDO và cũng th ảo luận h a i trong sô’ các extension riên g th ó n g dụng n h ấ t của PHP, extension MySQL Im proved và extension SQLite. Giới ỉh iệu các cơ sở dữ liệu và SQL Trong thờ i đại In tern et, th ô n g tin không còn được trìn h bày tro n g các tủ đựng hồ sơ nữa. T hay vào đó, nó được lưu trữ dưới dạng các số 1 và số 0 tro n g cấc kiểu dữ liệu điện tử vốn là những "hộp chứa" lưu trữ dữ liệu áp dặt m ột cấu trúc n h ấ t định về th ô n g tin . Những cơ sở dữ liệu điện tử này không chỉ chiếm ít không gian v ật lý hơn không gian gỗ và kim loại tương ứng m à chúng còn chứa đầy những công cụ để giúp người dùng lọc và truy tìm n h a n h thông tin sử dụng những tiêu chí khac ưhau. Cụ th ế hầu h ế t các cơ sở dữ liệu điện tử ngày nay là những cơ sở dữ liệu quan hệ (relational database) cho p h ép người dùng dịnh nghĩa mối quan hệ giữa các b ản g cơ sở dữ liệu khác n h au để tìm kiếm và phân tích hiệu quả hơn. H iện có sẵn m ột số lớn các hệ thông quản lý cơ sở dữ liệu, m ột số thương m ại và m ột số m iễn phí. Có lẽ b ạn đã nghe đến m ột vài hệ th ô n g này: Oracle, M icrosoft Access, My SQL, và PostgreSQL. N hững hệ th ô n g cơ sở dữ liệu này là những ứng dụng p h ần mềm m ạnh, phong phú tín h n ăn g có k h ả n áng tổ chức và tìm kiếm h àn g triệu record với những tốc độ r ấ t cao; do đó chúng dược sử dụng rộng rã i với các doanh nghiệp và v ăn phòng 10 C h ư ơ n g 7: Làm việc với các cờ s ở dữ liệu v à SQL chính phủ, thường cho những mục đích r ấ t quan trọng. Trước khi đi vào chi tiế t cụ th ể của việc xử lý các record cơ sở dữ liệu với P H P , trước tiê n cần p h ải hiểu rõ các k h á i niệm cơ sở dữ liệu cơ bản. Nếu b ạ n mới làm quen với cơ sở dữ liệu này, các p h ần sau dầy cung cấp m ột n ền tả n g v à cũng cho bạn th ử nghiệm với m ột bài tập thực tiễn tro n g S tructured Query Language (SQL). Thông tin này sẽ hữu dụng để hiểu nội dung n â n g cao hơn tro n g các p h ần tiếp theo. Tìm hiểu các cớ sỏ dữ liệu, record, v à khóa chính (Prím a ry Key) Mọi cơ sở dữ liệu gom m ôt hoặc nhiều b ản g (table). N hữ ng b ản g n ày tạo cấu trúc dữ liệu th à n h các h àn g và cột, áp đ ặt sự tổ chủc lên dữ liệu. H ình 7.1 m inh h ọ a m ột bảng điển hình. Bàng này chứỉt các sõ’ jiệ'j b án h ãn g oho vỊ !;rj k h ác n h au vt'i hàny hoặc record (bản ghi) chứa thòng tin cho m ôt vị rri va n ăm kỉiác. Mồi recorđ được p h ân chia trở th à n h các cột hoặc field (trường) với mỗi trường chứa m ột đoạn thông tin khác. Cấu trúc dạng b ản g n ày làm cho dễ tìm kiếm trê n b ản g để tìm ra các record khớp với tiêu chí (criteria) cụ thể: ví dụ, tấ t cả vị tr í có doanh sô' lớn hơn $10,000 hoặc doanh s ố cho t ấ t cả vị trí tro n g n ăm 2008. Các record tro n g b ản g không được sắp xếp theo b ấ t kỳ th ứ tự cụ th ể chúng có th ể được p h ân loại theo thứ tự bảng chữ cái, th eo năm , theo tổng doanh số, theo vị trí hoặc theo b ấ t kỳ tiêu chí m à b ạ n chọn xác định. Do đó để làm cho dễ n h ậ n dạng m ột record cụ th ể, cần p h ải th ê m m ộ t thuộc tín h n h ận d ạn g duy n h ấ t vào mỗi record chẳng h ạn như m ột số serial hoặc m ã trìn h tự. T rong ví dụ trước, mỗi record được n h ậ n d ạn g b àn g m ột trường 'record ID' duy n h ất; trường này ảược gọi là p rim ary key (khóa chính) clio bảng. ỊD Yưíìr Lĩcaiìơìi Sales {ĩ) 2007 ỏdấỉĩiỉi [ W fi •y 8574 2007 Chicaco ì 2007 Washincion 12929 Tị 2007 Ncw York 13636 5 2007 Lo*; Aiìícles S748 6 2.sAnkĩcles 12 2008 Ba^ion 4745 Hình 7.1 Một bảng mẫu 11 C h ư ơ n g 7: Làm v iệ c với các cơ sở dữ liệu và SQL Thủ thuật M ộ t cách dễ dàng đ ể hiểu những khái niệm này là bằng m ộ t sự tương dồng. H ăy xem m ộ t c ơ sở dữ liệu như là m ột th ư viện và m ỗi bảng là m ột kệ sách bên trong th ư viện này. D o đó m ột record là sự dại diện diện tử của m ột cuốn sách trê n m ộ t kệ sách với tựa dề của cuốn sách là khóa chính của record. Nếu thiếu tựã đề này, không th ể dễ dàng phân b iệ t m ột cuốn sách này với m ột cuô'n sách khác. (Cách duy n h ấ t d ể làm điều nàỵ là m ở m ỗi cuô'n sách và kiểm tra nội dung của nó - m ộ t tiế n trình mâ't thời gian mà khóa ch ín h sẽ giúp bạn tránh được). M ột khi bạn đã đưa thông tin vào m ột bảng, bạn thường muốn sử dụng aó để tr ả lời các câu hỏi cụ th ể ■ví dụ, bao nhiêu vỊ trí có doanh số lớn hơn $5000 tro n g 2008? N hững câu hỏi này được gọi là các query (mẫu truy vấn) và k ế t quả được tr ả về bởi cơ sở dữ liệu nhằm phản hồi lại những query này được gọi là các tậ p hợp k ế t quả (result set). Các query được thực th i sử dụng Structured Query Language. Tìm hiểu các m ối quan hệ và khóa ngoại (Poreign Key) Bạn đã b iết rằ n g m ột cơ sở dữ liệu có th ể chứa nhiều bảng. Trong m ột hệ thô ng cơ sở dữ liệu quan hệ, những bảng này có th ể được liên k ết với nhau bằng m ột hoặc nhiều trường chung được gọi là các khóa ngoại (foreign key). N hững kh ó a ngoại này làm cho có th ể tạo các mô’i quan hệ m ột đô'i một (one-to-one) hoặc m ột đối nhiều (one-to-many) giữa các bảng k hác nhau và k ế t hợp dữ liệu từ nhiều b ản g để tạo các tậ p hợp k ế t quả to àn diện hơn. Để m inh họa, h ãy xem xét hình 7.2 trìn h bày ba b ản g được liên kết. G a it t lD 1 H oítoí 2 Crim c Roni;mcc AitỉhorỉD 1 2 3 AufỊiorS N ora Rohcrts BnoklD BookNahie j T h c S h io iiự 2 ShuUer ĩslíìnd Piỉỉ SeoiaUưy 4 Tha Overlook 5 Sisters 6 Safc HnrKnír T a n ik Musk* 8 Blood Bix)thers G e tu rỉí) AuỉhorlD i ì ì 3 l 1 3 l 4 *J 3 1 3 2 4 5 Hình 7.2 Các môi quan hệ bảng 12 C h ư d n g 7: Làm việc v ò i các c d sò dữ liệu và SQL H ình 7.2 m in h h ọ a ba bảng, chứa thông tin về các tá c giả (bảng A), các th ể loại (bảng G), và các sách (bảng B). Các b ản g G và B k h á đơn giản: chúng chứa m ột d an h sách các tê n th ể loại (genre) và tá c giả, với mỗi record được n h ậ n dạng bằng m ột khóa chính duy n h ấ t. Bỗng B hơi phức tạp hơn: mọi sách tro n g bảng được liên k ế t với m ộ t th ể loại cụ th ể bằng khóa chính của genre (từ bảng G) và với m ột tác g iả cụ th ể qua khóa chính của author (từ b ản g A). B ăng cách dò th eo những khóa này đi đến các b ản g nguồn tuơng ứng caa chúng, b ạn có th ể dễ d àn g n h ậ n dạng tác giả và th ể loại cho m ộ t cuốn sách cụ thể. Ví du, cú th ể tliây vằng tựa đề "The Shin.ing" được v iết bởi "Stephon ĩliiig" và thuộc về th ể loại "HoiTOr". Tương tự, b ắ t đầu từ dầu k ia có t}iể th ấ y rằ n g tác giả "M ichael Connelly" đã viết hai cuôn sách "The Overlook' và "Trunk Music". N hững mố.l quaii hệ n(iư vậy được thấy trong ỉiình 7.2 tạo nen néii tản g của m ột hệ th ố n g cơ sd dử liệu quan hệ. Liẻn k ế t các bảng sử dụng các khóa ngoại cũng hiệu quả hơn lựa chọn khác: trong k h i tạ o m ột b ản g mọi thứ ngoại trừ bồn rửa n h à bếp để chứa tấ t cả thông tin th o ạ t n h ìn trô n g tiện lợi, cập n h ậ t m ột b ản g như vậy luôn là m ột tiến tr ìn h th ủ cóng (và dễ sai sót) để tìm mọi trường hợp của m ột giá trị cụ th ể và th a y th ế nó b ằn g m ột giá trị mới. P h â n ch ia th ông tin th à n h các b ản g độc lập và liên k ế t những bảng n ày b ằn g các k h ó a ngoại sẽ bảo đám rằn g m ộ t m ẫu th ô n g tin cụ th ể xuất h iện m ột lầ n và chỉ m ột lần trong cơ sở dữ liệu; điều này loại bỏ những p hần dư thừa, đơn giản hóa các th ay đổi (bằng việc cục bộ h ó a chúng sang m ột vị trí) và làm cho cơ sô dữ liệu gọn hơn và dễ q u ản lý hơn. Tiến trìn h hợp lý hóa m ột cơ sd dữ liệu b ằn g việc d in h n g h ĩa và thực thi các môi quan hệ m ột đôi m ột và m ột đôi nhiều giữa các b ản g th à n h phần của nó được gọi là sự chuẩn hóa cơ sớ dữ liẹu (d atab ase norm alization) và nó là m ột tá c vụ ch ín h m à m ột kỹ sư cơ sở dữ liệu p h ả i đối m ậ t k h i tạo m ột cơ sd dữ liệu mới. T rong tiế n trìn h chuẩn hóa, kỹ sư cơ sở dữ liệu cũng n hận dạng các mô'i quan hệ chéo và những sự phụ thuộc k hông chính xác giữa các bảng và tối ưu hóa việc tổ chức dữ liệu sao cho các query SQL thực thi với hiệu su ất tối đa. Cũng có m ột sô" dạng chuẩn giúp b ạn te s t p h ạm vi m ột cơ sở dữ liệu được chuẩn hóa; những dạng chuẩn n ày cung cấp nhữ ng hướng dẫn hữu dụng để giúp bảo đảm việc th iế t k ế cơ sở dữ liệu vừa n h ấ t quán về cấu trúc vừa hiệu quả. C h ư d n g 7 : Làm v iệ c v ớ i c á c c o s ò dữ liệu và SQ L_____________________________1 3 Tìm hiểu các câu lệnh SQL S tructured Query Language hoặc SQL là ngôn ngữ chuẩn được sử dụng để giao tiếp với m ộ t cơ sở dữ liệu, th êm hoặc th a y đổi các record và các đặc quyền người dùng và thực th i các query. Ngôn ngữ n ày trỏ th à n h m ột chuẩn ANSI vào n àm 1989 và h iện được sử dụng bởi hầu n h ư t ấ t cả RDBM thương m ại ngày nay. Các câu lệ n h SQL bao gồm m ột trong ba h ạn g mục: • Data DeýìniHon Language (DDL). DDL gồm nhũng câu lệnh định nghĩa cấu tníc và những mối quan hệ của một cơ sở dĩỉ Ỉiệỉi và các bảng của nó. Nhũng căn ỉệnh này tbĩCờng được sứ dụng đ ể tạo, xóa và chỉnh sửa các cơ sở d ữ liệu và bảng; xác định các tên và loại tníờngi và xác lập các index. K D ata M aniupulation Language (DML) . Các căn lệnh DML liên quan đến việc thav đổi và trích X i i ấ t d ũ liệu từ một cơ sở d ữ liệu. Những câu lệnh này điíợc sứ dụng đ ể thêm các record vào và xóa các record ra khỏi m ột cơ sỗ d ữ liệu; thực thi các query, tniv tìm các record bảng khớp ifớí một hoặc nhiều tiêu cbí do ngtcời dùng xác định; và nối các bảng lại I)ới nhan sứ dụng các tníờng chung của chứng. It Data Controỉ Language (DCL). Các căn lệnh DCL điiợc sử dụng để định nghĩa các cấp tniy cập và các đăc quyền an ninh trong một cơ sở d ứ liệu. B ạn thĩCờng 5ÍỈ’dụng nhũng cân lệnh nàv đ ể cho phép hoặc từ chối các đặc quyền ngtíời dùng; phãn công các I>ai trò; thay đổi các passỉiorđ- x e m các qtiyền (permission); í>à tạ o c á c tậ p b ợ p q u v tắ c (n ú o se t) đ ề bảo vệ việc tniy cập d ữ liộu. Các lệnh SQL giống như tiếng Anh nói, n h ằm lầm cho ngôn ngữ dễ học hơn. Cú pháp cũng k h á trực giác: Mọi câu lện h SQL b ắ t đẩu với m ột "từ h à n h động ' n h ư DELETE, INSERT, ALTER, hoặc DESCRIBE và k ẽ t thúc bằng m ột dấu chấm phẩy. K hoảng trắn g , các tab và các ký tự trở về đầu đòng được bỏ qua. Sau đây là m ột vài ví dụ về những câu lện h SQL hợp lệ: CREATE DATABASE library ; SELECT movie FROM movies WHERE rating > 4; DELETE FROM cars WHERE year_of_manufacture < 1980; B ảng 7.1 liệ t kê cú p h áp cho m ột sô' câu lệnh SQL phổ biến với các giải thích. 14 C h ư d n g 7: Làm v iệ c với c á c c ơ sở dữ liệu v à SQL Bảng 7.1 Các câu lệnh SQL thống thường C â u lệ n h SQ L C hức n ă n g CREATE DATABASE database-nam e Tạo một cơ sở dữ liệu mới CREATE TABLE table-name (fieldl, field2, ...) Tạo một bảng mới INSERT INTO table-name (lìeldl, rield2,„) VALUES (valuel, vali:e2,...) Chèn một record mới vào một bảiig c6 cát; giá trị được xác định UPDATE table-nam e SET íie ld l= v a lje l, fíeld2-value2,.. (WHERE condition) CỊp n h ật các record trong một bảng có cac giá trị mới DELETE FROM tabỉe-name {VVHERE conaitionl Xóa các record ra khỏi một bảng SELECT fỉeldl, íieM2,.. FROM table-name iWHERE conditionJ Truy tìm các record tương họ‘ĩ) iừ một bảag RENAME tabỉe-name TO new-table-name Đổi tên một bảng DROP TABLE table-name Xóa một bảng DROP DATABASE database-nam e Xéa một cơ sở dữ liệu Hỏí chuyên gia Hỏi: S Q L đ ư ợ c h ỗ trỢ rộ n g nh ư th ế nào? Đ á p ; SQL v ừ a ỉồ n ộ t c h u ẩ n A N S l vừa là c h u ẩ n IS O , v à d ư ợ c h õ trợ rộng rã i b ỏ i c á c h ệ th ố n g c ơ s ỏ dữ liệu S Q L tư ơ n g th ích c á c c h u ẩ n . N oi nh ư v ậ y , n h iề u n h à c u n g cấ p c ơ s ờ a ữ liệu c ũ n g đ ã tn ở rộ n g S Q L "c h u ẩ n " b ằ n g c á c e x te n s io n đ ộ c q u yền d ể m a n g đ ế n c h o c á c k h á c h h à n g m ộ t lậ p h ợ p tín h n ă n g cải tiế n h o ặ c h iệ u s u ấ t tố t h ơ n . N h ữ n g e x te n s io n n à y k h á c n h a u g iữ a c á c n h à cu n g cấ p v à c á c câ u lệ n h S Q L s ử d ụ n g nhữ ng e x te n s io n n à y c ó th ể kh ô ng làm v iệ c th e o c ù n g m ộ t c á c h trẽ n tấ t c ả hệ th ố n g c ơ s ỏ d ữ liệu, Do đó, sẽ lu ô n khôn n g o a n n ế u th a m k h ả o tà i liệu c ủ a hệ th ố n g c ơ s ở dữ liệu và tìm h iể u c á c e x te n s io n đ ộ c q u y ể n n à o n ế u c ó m à n ó c u n g c ấ p và xe m c á c e x te n s io n n à y ả n h h ư ở n g đ ế n n h ữ n g c â u lệ n h S Q L m à bạn v iế t nh ư th ế n à o. Thực hành 7.1: Tạo và tập hợp lại m ột cơ sở dữ liệu Bây giờ k h i b ạn đă hiểu những điểm cơ bản, h ãy th ử m ộ t bài tậ p thực h àn h giúp b ạn làm quen với việc sử dụng cơ sở dữ liệu và SQL. T rong phần C h ư d n g 7 : Làm v iệ c vcii các cơ sò dữ liệu và SQL____________________________15 này b ạn sẽ sử dụng C lient dòng lện h MySQL tương tá c đ ể tạo m ộ t cơ sở dữ liệu và các bảng, th êm và b iên tậ p các record và tạo các tậ p hợp k ế t quả khớp với những tiêu chí khác nhau. ------------------------------------------------------------------------------------- Qua suốt bài tập sau đây, chữ in đậm biểu íhị các lệnh mà bạn nên gõ nhập tại dòng nhắc dồng lệnh MySQL. Các lệnh có thể được nhập bằng hoặc chữ hoa hoặc chữ thường. Trước khi bắt đầu vổi bài tập, hãy chắc chắn rằng bạn đã cài đặt, câu hình và test hệ thống cơ sở dữ liệu MySQL theo những hướng dẫn trong những phụ lục của sách này. B ắt đầu b ằn g việc khởi động Client dòng lện h MySQL và k ế t nôi với cơ sở dữ liệu MySQL bằng usernam e và password: shell> m ysql -u user -panel Passvvord: ****■•* Nếu mọi th ứ đều diễn ra tố t đẹp, b ạn sẽ th ấy m ột th ô n g báo chào đón và m ột dòng nhắc SQL tương tác n h ư sau: mysql > Bây giờ b ạn có th ể tiế n h à n h n h ập các câu lện h SQL tạ i dòng nhắc này. N hững câu lệ n h n ày sẽ dược chuyển san g và được thực th i tr ê n server MySQL và k ế t quả sẽ được h iển th ị trê n các dòng sau dòng nhắc. N hớ k ết thúc mồi câu lệ n h b ằn g m ột dấu chấm phẩy. Tao • cơ sở dữ liêu • Vì t ấ t cả b ản g được lưu trữ tro n g m ột cơ sở dữ liệu, bước đầu tiê n là tạo m ột cơ sở dữ liệu, sử dụng câu lện h CREATE DATABASE: mysql> CREATE DATABASE m usic; Query OK, 1 row affected (0, 05 sec) Tiếp theo, chọn cơ sở đữ liệu mới tạo này làm cơ sở dữ liệu m ặc định cho t ấ t cả lệ n h tương lai bằng câu lện h USE: mysql> USE m usic; Database changeđ Thêm các bảng M ột k h i b ạn đã khởi tạo cơ sở dữ liệu, đã đến lúc th êm m ộ t sô' bảng vào nó. L ệnh SQL để thực h iệ n điều này là câu lệnh CREATE TABLE, câu lệnh 16___________________________ C h ư d n g 7: Làm v iệ c vớỉ các c d s ò dữ liệu và SQL này đòi hỏi m ộ t tê n b ản g và m ột mô tả chi tiế t về các trư ờ ng của bạn. Sau đây là m ột ví dụ: m ysql> CREATE TABLE a rtists ( -> a r tis L id INT(4) NOT NULL PRIMARY KEY AUTO.INCREMENT, •> a rtis L n a m e VARCHAR (50) NOT NULL, -> a rtis L c ũ u n tĩV CHAR (2) NOT NULL -> ): Ouery OK, 0 rows affected (0.Ư7 sec) Cău lện h n ày tạo m ột b ản g có tê n là a rtis ts có ba trư ờ ng a rtis t.id , artist_nam e, và artist_country. Chú ý rằn g theo sau mỗi tê n trường là một ph ần k h ai báo kiểu (type declaration); p h ần khai báo n ày n h ậ n dạng kiểu dữ liệu ntà tiư ò n g sẽ chứa chũ dù là striiig (chuỗi), num eiic (số), tem poral (thớỊ giaiu, hoặc Booleai'-.. MySQL hỗ trợ m ột 30' kíểi. dữ liệu k hác nhau và các kiểu dữ liệu quan trọiig nhấc được tóm tá t iro n g b ản g 7.2Có th êm m ột vài ràn g buộc (modifier) được xác lập cho b ản g tro n g câu lệnh trước: # Modiỷier NOTNỤLL bảo đảm rằng tníờng không th ể chấp nhận một giá írị NULL sau mỗi định nghĩa tncờng. K Modiýier PRIMARY KEY đánh dấu tníờng tương icng là khóa chinh (pritnary key) của bảng. !ẵ ModiJỉerAUTO_INCREMENT, chỉcósãnchocáctníờngsố, vêỉtcẩuMySQL tự động tạo một giá trị cho mcờng n à y mòi lần một record mới đĩcợc chèn i>ào bảng, tdinggiá trị tntòc lên 1. Bằng 7.2 Các kiểu dữ liệu MySQL K iểu trư ờ n g Mô tả INT Một kiểu SỐ có th ể chấp nhận các giá trị trong dăy -2147483648 đến 2147483647 DECIMAL Một kiểu số có hỗ trợ các sô' dấu động và số thập phân DATE Một trường ngày th á n g th eo đinh dang YỸYY-MM-DD TIME M ột trư ờ n g th ờ i g ia n th e o đ in h d an g HH:MM:SS DATETIME Một kiểu ngày tháng/thời gian k ết hơp theo dịnh dạng YYYY-MM-DD HH:MM:SS C h ư ớ n g 7: Làm việc với các c o sõ dữ liệu và SQL____________________________ Ị_7 YEAR Một trường cự thể cho năm hiển thị trong dãy 1901 đến 2155 theo định dạng YYYY hoặc Y Y TIMESTAMP Một kiểu tem thời gian theo định dạng YỸYYMMDDHHMMSS CHAR Một kiểu chuỗi có kích cỡ tối đa 255 ký tự và một chiều dài cố định VARCHAR Một kiểu chuỗi có kích cỡ tối da 255 ký tự và một chiều dài khả biến. TEXT Một kiểu chuỗi có kích cờ tối da 65535 ký tự BLOB Một kiểu nhị phân cho dữ liệu biến. ENUM Một kiểu chuỗi có th ể châp nhận một giá trị từ một danh sách các giá trị có thề có được định nghĩa trước dó. SET Một kiểu chuỗi có th ể chấp nhận zero hoặc nhiều giá trị từ một tập hợp giá trị có th ể có được định nghĩa trước dó. Bây giờ hãy tiến h à n h tạo thêm hai bảng sử dụng các câu lện h SQL này: m ysql> CREATE TABLE ratings ( -> ra tin g _ id INT{2) NOT NULL PRIMARY KEY, -> rating_nam e VARCHAR (50) NOT NULL -> ): Query OK, 0 rows atíected (0,13 sec) m ysql> CREATE TABLE songs ( -> s o n g .id 1NT(4) NOT NULL PRIMARY KEY AUTO.INCREMENT, -> so n g _title VARCHAR(IOO) NQT NULL, -> lk _ s o n g _ a rtis í INT{4) NOT NULL, -> lk_song_ratÌng 1NT(2) NOT NULL ■> ): Query OK, 0 rows affected (0,05 sec) Thêm các Record T hêm m ột record vào m ột bảng chỉ đơn giản là gọi câu lện h INSERT với nhữ ng giá trị th íc h hợp. Sau đây là m ột ví dụ, ví dụ n ày th ê m m ộ t record vào bản g a rtis ts b ằn g việc xác định các giá trị cho các trường artist_ id và a r tis tn a m e : 1 8 _____________________________C h ư ờ n g 7: Làm v iệ c v d i c á c c ờ s ò d ư liệ u v à S Q L m ysql> INSERT INTO a rtists (a rtis t_ id , a rlis L n a m e , a rtis L c o u n try ) -> VALUES c r , 'Aerosmith', ‘US’); Query OK, 1 row affected (0.00 sec) Từ p h ần trước b ạn sẽ nhớ rằ n g trường artist_ id đã được đ án h dấu bằng cờ (flag) AUTO_INCREMENT. Đây là m ột p h ần mô rộ n g MySQL cho SQL chuẩn yêu cầu MySQL tự động g án m ột giá trị vào trường n ày nếu nó không được xác định. Để th ấ y trực tiế p điều này, hãy th ử th êm m ột reeord mới 5 Ứ dụng cáu lệ n h sau đây; m ysql> INSERT INTO artists (artist..n3m e, artỉst_cQiintry> > VALUES (‘Ahba’ , ‘SE’ ); Query OK, 1 row affented (O.GO sec) Tương tự, th ẳ m m ột số rccord vàc bảng rEtings: n y s q l> INSERT INTO ra tin gs ( r a tin g jd , ra tin g_n a m e ) VA1.UES (4, ‘Goort’ }Query OK, 1 row affected (0.00 sec) m y s q b INSERT INTO ratings ( r a tin g jd , ra tin g _n a m e ) VALUES (5, ‘ExGelle n t'): Query OK, 1 row affected (0.00 sec) Thêm m ột số record vào b ản g songs: mysq[> INSERT INTO songs (so n g_títle , fk _ s o n g „a rtis t, fk_so n g _ratin g ) -> VALUES (‘JanieVs Got A Gun’ , 1, 4); Query OK, 1 row affecteđ (0.04 sec) mysql> INSERT INTO songs (s o n g J ỉtle , fk _ s o n g _ a rtis t, !k _ s o n g ,ra tin q ) -> VALUES (‘Crazy’ , 1, 5); Query OK, 1 row affected (0,00 sec) Chú ý rằn g các record trong bảng songs được liên k ế t với các record trong các bảng a rtis ts và ratings thông qua các khóa ngoại (foreign key). B ạn sẽ th ây trực tiếp nhừ ng môi queưi hệ khóa ngoại n ày tro n g p h ần tiếp theo. Q iid a ________________________________________________________ Nguồn lưu trữ mã cho sách này có một danh sách đầy đỏ các câu lệnh SQL INSERT để tập hỢp lại ba đoạn được sử dụng trong bài tập này, Chạy các câu lệnh này và hoàn tất việc xây dựng các bảng _______t r ự ^ khi_^ ^ 'n ^ á c phần tiếp theo. C h ư ở n g 7 : L à m v iệ c với c á c cO s ò d ữ liệu và SQL_____________________________ 19 Thực thi các query M ột k h i dữ liệu n ăm trong cơ sở dữ liệu, đã đến lúc làm m ột điều p đó với nó. SQL cho phép b ạn tìm kiếm các record khớp với n h ữ n g tiêu chí cụ th ể sử dụng câu lệ n h SELECT. Sau đây là một ví dụ, ví dụ n ày tr ả về tâ t cả recorđ từ b ản g artists: m ysql> SELECT a rtis t.id , a rtis L n a m e FROM artists; artist_icJ 6 artist_nam e 1 Aerosmith 2 Abba 3 Timbaland 4 Take That 5 Girls Alouđ 6 Cubanismo rows in set (0.00 sec) T rong hầu h ế t các trường hợp, bạn sẽ muốn th êm các bộ lọc (filter) vào query để giảm kích cỡ của tập hợp k ế t quả và bảo đảm rằ n g nó chứa chỉ các record khớ p với những tiêu chí n h ấ t định. Điều này được h o àn t ấ t bằng việc th êm m ột m ện h đề W HERE vào câu lệnh SELECT cùng với m ộ t hoặc nhiều biểu thức có điều kiện. Sau đáy là m ột ví dụ, ví dụ này liệ t kê chỉ các nghệ sĩ từ nước Mỹ: m ysql> SELECT a r tis U d , artist_nam e FROM artists -> WHERE a rtis L c o u n try = ‘US’ ; artist_ld artisLnam e 1 Aerosmith 3 Timbaland 2 rows in set (0.00 sec) T ấ t cả to á n tử so sán h chuẩn m à bạn đã quen thuộc từ P H P được hỗ trợ bởi SQL. Ví dụ trước m inh họa toán tử đảng thức (=); ví dụ tiế p th eo sau đây m inh họa to á n tử lớn hơn hoặc bằng {>=) bằng việc liệ t kê t ấ t cả b ản nhạc có ra tin g từ 4 trở lên: m ysql> SELECT s o n g _title , fk_song_rating FROM songs -> WHERE fk_song_rating >= 4; song_titie fk_son9_raíing Janie’s Got A Gun 4 2 0 _____________________________C h ư ớ n g 7; Làm việc v ớ i các c o s ò d ữ iiệ u v à S Q L Crazy 5 En Las Delicious 5 Pray 4 Apologize 4 SOS 4 Dancing Queen 4 7 rows in set ^0.00 sec) B ạn co th ể k ế i hợp những biểu thức có điều k iện sử dụng cấc to án tứ logic AND, OR, vè MOT ín h ư v đ i câu lệnh có điếu k iện P K P thóiig thường). Sau đây ià m ột ví dụ, ví dụnãy liệ t kê các nghệ sì từ nước Mỷ hoặc vương quốc Anh: mysql> SELECT artist_nam e, arti3t_ccuntry PRCIVI a rtists > VVHERE ă rtis t .CGuMry = ‘US -> OR a rtis L c o u n try = UK’; a rtisL n a m e artist_CDuntfy Aerosm ith us Timbaland us ■■■ake T h ít UK Girls Alũud UK 4 rows in set (0.02 sec) Sắp xếp th ứ tự và giới hạn các tập hợp kết quả Nếu b ạn muô'n th ấ y dư liệu lừ một báng đuợc sáp xếp th ú tự theo một trường cụ thể, SQL ổưr\ ra ĩnônh dề ORDER BY. M ệnh đề n à j chc bạr., địnli nghĩa tê n trường để p h ân loại và hướng p h ân loại (tăn g d ần hoặc giảm dần). Ví dụ dể th â y m ột d an h sách ản g nhạc dược p h ân loại theo th ứ tự bảng chữ cái, sử dụng câu lện h SQL sau đây: mysqỉ> SELECT s o n g J ille FROM songs -> ORDER BY s o n g J itle ; song,Jiỉle Another Crack In My Heart Apologize Babe C h ư ớ n g 7 : L à m v iệ c v ổ i các c d s ỏ d ũ liệu v à S Q L_____________________________21 Crazy Dancing Queen En Las Delicious Gimme Gimme Gimme Janie’s Got A Giin Pray SOS Sure Voijlez Vous 12 rows in set (0.04 sec) Đ ể p h â n loại đảo ngược đ an h sách này, thêm m odiíĩer DESC như trong ví dụ tiếp theo: m ysql> SELECT so n g_title FROM songs -> ORDER BY s o n g .title DESC; s o n g J itle s o n g Jỉtle Sure SOS Pray Jariie's Got A Gun Gimme Qimme Gimme En Las Delicious Dancing Queen Crazy Babe Apologize Another Crack In My Heart 12 rows in seí (0,00 sec) SQL cũng cho bạn giới h ạn bao nhiêu record x u ất h iện tro n g tậ p hợp k ết quả bằng từ k h ó a LIM IT, từ k h óa này chấp n h ận h ai th a m sô': o íĩset record để b ắ t đầu {bắt đầu với 0) và số record để hiển thị. Ví dụ, để h iển th ị các hàng 4-9 của m ột tậ p hợp k ế t quả, sử dụng câu lện h sau dây: 2 2 ___________________________ C h ư ớ n g 7: Làm việc với các Cờ s ò dư liệu v à S QL mysql> SELECT s o n g .titie FROM songs -> ORDER BY s o n g J ille -> LIM IT 3.6; song_tit[e Crazy Dancing Cueen En Las Deliciủus Gimme Gimme Gimme Janie's Got A Gun Pray 5 rows in set {0.00 sec) S ử dụng các ký lự đại diện (Wiỉdcard) Câu lệnh SQL SELECT cũng hỗ trợ m ột m ệnh đề LIKE, m ệnh đề này có th ể được sử dụng để tìm kiếm b ên trong các trường te x t sử dụng nhữ ng k j tự đại diện (vvildcard). Cõ hai ioại vvildcard được cho phép trong m ột m ệnh đề LIKE: ký tự % được sử dụng để báo hiệư zero hoậc nhiều trường hợp của m ột ký tự và ký tự _ được sử đụng để báo hiệu chính xác m ột trường hợp của m ột ký tự. Ví dụ sau đây m in h họa tiếp m ột m ệnh dề LIKE, tìm kiếm các tự a đề bản nhạc có ký tự 'g' tro n g đó: mysql> SELECT s o n Q _ id , s o n g J itle FROM songs -> WHERE s o n g _title LIKE ‘ % g% ’ ; song,Jd song ,title 1 Janie’s Got A Gun 7 Apologize 8 Gimme Glmme Gimme 10 Dancing Queen 4 rows in set (0.00 sec) NỐì cấc bảng Cho đến bây giờ, tấ t cá query m à b ạn đă th ấ y đã được tậ p tru n g một bảng. N hưng SQL cũng cho phép b ạn truy vấn mỗi lần h ai hoặc nhiều bảng và hiển th ị m ột tậ p hợp k ế t quả k ế t hợp. v ề m ặt kỹ th u ậ t, đây được gọi là
- Xem thêm -

Tài liệu liên quan