Você está na página 1de 202

PART I

Introduction

CHAPTER 1

Introduction

0\64/ SURQRXQFHG0\(VV&XH(OO LVPRUHWKDQMXVWWKHZRUOGVPRVWSRSXODU


RSHQVRXUFHGDWDEDVHDVWKHGHYHORSHUVDWWKH0\64/$%FRUSRUDWLRQ KWWSZZZ
P\VTOFRP  FODLP 7KLV PRGHVWVL]HG GDWDEDVH KDV LQWURGXFHG PLOOLRQV RI HYHU\GD\
FRPSXWHUXVHUVDQGDPDWHXUUHVHDUFKHUVWRWKHZRUOGRISRZHUIXOLQIRUPDWLRQV\VWHPV
0\64/LVDUHODWLYHO\UHFHQWHQWUDQWLQWRWKHZHOOHVWDEOLVKHGDUHDRIUHODWLRQDOGDWDEDVH
PDQDJHPHQW V\VWHPV 5'%0V  D FRQFHSW LQYHQWHG E\ ,%0 UHVHDUFKHU (GJDU )UDQN
&RGGLQ'HVSLWHWKHDUULYDORIQHZHUW\SHVRIGDWDUHSRVLWRULHVRYHUWKHSDVW
\HDUVUHODWLRQDOGDWDEDVHVUHPDLQWKHZRUNKRUVHVRIWKHLQIRUPDWLRQZRUOG7KH\SHU
PLWXVHUVWRUHSUHVHQWVRSKLVWLFDWHGUHODWLRQVKLSVEHWZHHQLWHPVRIGDWDDQGWRFDOFXODWH
WKHVHUHODWLRQVKLSVZLWKWKHVSHHGQHHGHGWRPDNHGHFLVLRQVLQPRGHUQRUJDQL]DWLRQV
,WVLPSUHVVLYHKRZ\RXFDQJRIURPGHVLJQWRLPSOHPHQWDWLRQLQMXVWDIHZKRXUVDQG
KRZ HDVLO\ \RX FDQ GHYHORS ZHE DSSOLFDWLRQV WR DFFHVV WHUDE\WHV RI GDWD DQG VHUYH
WKRXVDQGVRIZHEXVHUVSHUVHFRQG
:KHWKHU\RXUHRIIHULQJSURGXFWVRQDZHEVLWHFRQGXFWLQJDVFLHQWLILFVXUYH\RUVLP
SO\WU\LQJWRSURYLGHXVHIXOGDWDWR\RXUFODVVURRPELNHFOXERUUHOLJLRXVRUJDQL]DWLRQ
0\64/JHWV\RXVWDUWHGTXLFNO\DQGOHWV\RXVFDOHXS\RXUVHUYLFHVFRPIRUWDEO\RYHU
WLPH,WVHDVHRILQVWDOODWLRQDQGXVHOHGPHGLDDQDO\VW&OD\6KLUN\WRFUHGLW0\64/
ZLWKGULYLQJDZKROHQHZW\SHRILQIRUPDWLRQV\VWHPKHFDOOVVLWXDWHGVRIWZDUH
FXVWRPVRIWZDUHWKDWFDQEHHDVLO\GHVLJQHGDQGEXLOWIRUQLFKHDSSOLFDWLRQV
,QWKLVERRNZHSURYLGHGHWDLOHGLQVWUXFWLRQVWRKHOS\RXVHWXS0\64/DQGUHODWHG
VRIWZDUH:HOOWHDFK\RX6WUXFWXUHG4XHU\/DQJXDJH 64/ ZKLFKLVXVHGWRLQVHUW
UHWULHYHDQGPDQLSXODWHGDWD:HOODOVRSURYLGHDWXWRULDORQGDWDEDVHGHVLJQH[SODLQ
KRZWRFRQILJXUH0\64/IRULPSURYHGVHFXULW\DQGRIIHU\RXDGYDQFHGKLQWVRQJHW
WLQJHYHQPRUHRXWRI\RXUGDWD,QWKHODVWILYHFKDSWHUVZHVKRZKRZWRLQWHUDFWZLWK
WKHGDWDEDVHXVLQJWKH3+3DQG3HUOSURJUDPPLQJODQJXDJHVDQGKRZWRDOORZLQWHU
DFWLRQZLWK\RXUGDWDRYHUWKHPHGLXPPRVWSHRSOHSUHIHUWKHVHGD\VWKH:HE

Why Is MySQL so Popular?


7KH0\64/GHYHORSPHQWSURFHVVIRFXVHVRQRIIHULQJDYHU\HIILFLHQWLPSOHPHQWDWLRQ
RIWKHIHDWXUHVPRVWSHRSOHQHHG7KLVPHDQVWKDW0\64/VWLOOKDVIHZHUIHDWXUHVWKDQ
LWV FKLHI RSHQ VRXUFH FRPSHWLWRU 3RVWJUH64/ RU WKH FRPPHUFLDO GDWDEDVH HQJLQHV
1HYHUWKHOHVVWKHVNLOOV\RXJHWIURPWKLVERRNZLOOVHUYH\RXZHOORQDQ\SODWIRUP
0DQ\ GDWDEDVH PDQDJHPHQW V\VWHPVHYHQ RSHQ VRXUFH RQHVSUHFHGHG 0\64/
:K\KDV0\64/EHHQWKHFKRLFHIRUVRPDQ\EHJLQQHUVDQGVPDOOVLWHVDQGQRZIRU
VRPHKHDY\ZHLJKWGDWDEDVHXVHUVLQJRYHUQPHQWDQGLQGXVWU\":HFDQVXJJHVWDIHZ
IDFWRUV
6L]HDQGVSHHG
0\64/FDQUXQRQYHU\PRGHVWKDUGZDUHDQGSXWVYHU\OLWWOHVWUDLQRQV\VWHP
UHVRXUFHVPDQ\VPDOOXVHUVVHUYHXSLQIRUPDWLRQWRWKHLURUJDQL]DWLRQVE\UXQQLQJ
0\64/RQPRGHVWGHVNWRSV\VWHPV7KHVSHHGZLWKZKLFKLWFDQUHWULHYHLQIRU
PDWLRQKDVPDGHLWDORQJVWDQGLQJIDYRULWHRIZHEDGPLQLVWUDWRUV
2YHUWKHSDVWIHZ\HDUV0\64/$%KDVDGGUHVVHGWKHQHHGRIODUJHUVLWHVE\DGGLQJ
IHDWXUHVWKDWQHFHVVDULO\VORZGRZQUHWULHYDOEXWLWVPRGXODUGHVLJQOHWV\RXLJQRUH
WKHDGYDQFHGIHDWXUHVDQGPDLQWDLQWKHVXSSOHQHVVDQGVSHHGIRUZKLFK0\64/
LVIDPRXV
(DVHRILQVWDOODWLRQ
3DUWO\EHFDXVH0\64/LVVPDOODQGIDVWLWZRUNVWKHZD\PRVWSHRSOHZDQWVWUDLJKW
RXWRIWKHER[,WFDQEHLQVWDOOHGZLWKRXWDORWRIGLIILFXOWDQGVRSKLVWLFDWHG
FRQILJXUDWLRQ1RZWKDWPDQ\/LQX[GLVWULEXWLRQVLQFOXGH0\64/LQVWDOODWLRQ
FDQEHDOPRVWDXWRPDWLF
7KLVGRHVQWPHDQ0\64/LVIUHHRIDGPLQLVWUDWLYHWDVNV,QSDUWLFXODUZHOOFRYHU
DIHZWKLQJV\RXQHHGWRGRDWWKHVWDUWWRWLJKWHQVHFXULW\9HU\OLWWOHFRQILJXUDWLRQ
LVVKRZQLQWKLVERRNKRZHYHUZKLFKLVDWULEXWHWRWKHGDWDEDVHHQJLQHVFRQ
YHQLHQFHDQGQDWXUDOTXDOLWLHV
$WWHQWLRQWRVWDQGDUGV
$VZHOOH[SODLQLQWKH6WUXFWXUHG4XHU\/DQJXDJHVHFWLRQODWHULQWKLVFKDSWHU
PXOWLSOHVWDQGDUGVH[LVWLQWKHUHODWLRQDOGDWDEDVHZRUOGDQGLWVLPSRVVLEOHWR
FODLPWRWDOFRQIRUPDQFH%XWOHDUQLQJ0\64/FHUWDLQO\SUHSDUHV\RXIRUPRYLQJ
WRRWKHUGDWDEDVHHQJLQHV0RYLQJFRGHIURPRQHGDWDEDVHHQJLQHWRDQRWKHULV
QHYHUWULYLDOEXW0\64/GRHVDUHDVRQDEOHMRERISURYLGLQJDVWDQGDUGHQYLURQ
PHQWDQGJHWVEHWWHUDVLWGHYHORSVPRUHIHDWXUHV
5HVSRQVLYHQHVVWRFRPPXQLW\
:LWKDIHZKXQGUHGHPSOR\HHVVFDWWHUHGDURXQGWKHJOREH0\64/$%LVDYHU\
IOH[LEOHRUJDQL]DWLRQWKDWNHHSVFRQVWDQWWDEVRQXVHUQHHGV$WLWVFRQIHUHQFHV
OHDGGHYHORSHUVJHWRXWLQIURQWDQGPDNHWKHPVHOYHVDYDLODEOHWRHYHU\RQHZLWKD
JULSHRUDQHZLGHD7KHUHDUHDOVRORFDO0\64/XVHUJURXSVLQDOPRVWHYHU\PDMRU
FLW\7KLVUHVSRQVLYHQHVVLVKHOSHGE\WKHIDFWWKDW0\64/LVRSHQDQGIUHHDQ\

4 | Chapter 1:Introduction

VXIILFLHQWO\VNLOOHGSURJUDPPHUFDQORRNDWWKHSURJUDPFRGHWRILQGDQGSHUKDSV
KHOSLQIL[LQJSUREOHPV
0\64/DFWXDOO\KDVDGXDOOLFHQVHDSSURDFKLI\RXZDQWWREXLOG\RXURZQSURG
XFWDURXQGLW\RXSD\0\64/$%DOLFHQVHIHH,I\RXMXVWZDQWWRXVH0\64/WR
VHUYH \RXU RZQ GDWD \RX GRQW KDYH WR SD\ WKH OLFHQVH IHH 0\64/ DOVR RIIHUV
WHFKQLFDOVXSSRUWDVGRQXPHURXVRWKHUFRPSDQLHVDQGFRQVXOWDQWVVRPHRIWKHP
SUREDEO\QHDU\RX
(DV\LQWHUIDFHWRRWKHUVRIWZDUH
,WLVHDV\WRXVH0\64/DVSDUWRIDODUJHUVRIWZDUHV\VWHP)RUH[DPSOH\RXFDQ
ZULWH SURJUDPV WKDW FDQ LQWHUDFW GLUHFWO\ ZLWK D 0\64/ GDWDEDVH 0RVW PDMRU
SURJUDPPLQJODQJXDJHVKDYHOLEUDULHVRIIXQFWLRQVIRUXVHZLWK0\64/WKHVHLQ
FOXGH&3+33HUO3\WKRQ5XE\DQGWKH0LFURVRIW1(7ODQJXDJHV0\64/DOVR
VXSSRUWVWKH2SHQ'DWDEDVH&RQQHFWLYLW\ 2'%& VWDQGDUGPDNLQJLWDFFHVVLEOH
HYHQZKHQ0\64/VSHFLILFIXQFWLRQDOLW\LVQWDYDLODEOH

Elements of MySQL and Its Environment


<RXQHHGWRPDVWHUVHYHUDOVNLOOVWRUXQDGDWDEDVHV\VWHP,QWKLVVHFWLRQZHOOOD\RXW
ZKDWJRHVLQWRXVLQJ0\64/DQGKRZZHPHHWWKRVHQHHGVLQWKLVERRN
$0\64/LQVWDOODWLRQKDVWZRFRPSRQHQWVDVHUYHUWKDWPDQDJHVWKHGDWDDQGFOL
HQWVWKDWDVNWKHVHUYHUWRGRWKLQJVZLWKWKHGDWDVXFKDVFKDQJHHQWULHVRUSURYLGH
UHSRUWV7KHFOLHQWWKDW\RXOOSUREDEO\XVHPRVWRIWHQLVWKHmysql0\64/PRQLWRU
SURJUDPSURYLGHGE\WKH0\64/$%FRPSDQ\DQGDYDLODEOHLQPRVW0\64/LQVWDO
ODWLRQV7KLVDOORZV\RXWRFRQQHFWWRD0\64/VHUYHUDQGUXQ64/TXHULHV2WKHU
VLPSOHFOLHQWVDUHLQFOXGHGLQDW\SLFDOLQVWDOODWLRQIRUH[DPSOHWKHmysqladminSURJUDP
LVDFOLHQWWKDWDOORZV\RXWRSHUIRUPYDULRXVVHUYHUDGPLQLVWUDWLRQWDVNV
,QIDFWDQ\SURJUDPWKDWNQRZVKRZWRWDONWRWKH0\64/VHUYHULVDFOLHQWDSURJUDP
IRUDZHEEDVHGVKRSSLQJVLWHRUDQDSSOLFDWLRQWRJHQHUDWHVDOHVJUDSKVIRUDPDUNHWLQJ
WHDPFDQERWKEHFOLHQWV,Q&KDSWHU\RXOOOHDUQWRXVHWKH0\64/PRQLWRUFOLHQW
WRDFFHVVWKH0\64/VHUYHU,Q&KDSWHUVWKURXJKZHOOORRNDWKRZZHFDQXVH
3+3WRZULWHRXURZQFXVWRPFOLHQWVWKDWUXQRQDZHEVHUYHUWRSUHVHQWDZHEIURQWHQG
WR WKH GDWDEDVH IRU WKLV :HOO XVH WKH $SDFKH ZHE VHUYHU KWWSKWWSGDSDFKHRUJ 
$SDFKHKDVDORQJKLVWRU\RIUHOLDEOHVHUYLFHDQGKDVEHHQWKHPRVWSRSXODUZHEVHUYHU
LQWKHZRUOGIRURYHU\HDUV7KH$SDFKHZHEVHUYHURU+773VHUYHUSURMHFW
LV PDQDJHG E\ WKH $SDFKH )RXQGDWLRQ KWWSZZZDSDFKHRUJ  $OWKRXJK WKH ZHE
VHUYHUDQG0\64/VHUYHUDUHVHSDUDWHSURJUDPVDQGFDQUXQRQVHSDUDWHFRPSXWHUV
LWVFRPPRQWRILQGVPDOOWRPHGLXPVFDOHLPSOHPHQWDWLRQVWKDWKDYHERWKUXQQLQJ
RQDVLQJOHFRPSXWHU,Q&KDSWHUVWKURXJKZHOOH[SORUHKRZWKH3HUOSURJUDP
PLQJODQJXDJHFDQEHXVHGWREXLOGFRPPDQGOLQHDQGZHELQWHUIDFHVWRWKH0\64/
VHUYHU

Elements of MySQL and Its Environment | 5

7RIROORZWKHFRQWHQWLQWKLVERRN\RXZLOOQHHGVRPHVRIWZDUHIRUWXQDWHO\DOOWKH
VRIWZDUHZHXVHLVRSHQVRXUFHIUHHIRUQRQFRPPHUFLDOXVHDQGHDVLO\GRZQORDGHG
IURPWKH,QWHUQHW7RFRYHUDOOSDUWVRIWKLVERRN\RXQHHGD0\64/GDWDEDVHVHUYHU
3HUODQGDZHEVHUYHUWKDWFDQWDONWR0\64/XVLQJWKH3+3DQG3HUOSURJUDPPLQJ
ODQJXDJHV:HOOH[SORUHIRXUDVSHFWVRIXVLQJ0\64/
0\64/VHUYHU
:HH[SODLQKRZWRFUHDWH\RXURZQ0\64/LQVWDOODWLRQDQGKRZWRFRQILJXUHDQG
DGPLQLVWHULW
64/
7KLVLVWKHFRUHRI0\64/XVHDQGWKHPDMRUWRSLFLQWKLVERRN,WVLQWURGXFHGLQ
6WUXFWXUHG4XHU\/DQJXDJH
3URJUDPPLQJODQJXDJHV
64/LVQRWDVLPSOHRULQWXLWLYHODQJXDJHDQGLWFDQEHWHGLRXVWRUHSHDWHGO\SHU
IRUPFRPSOH[RSHUDWLRQV<RXFDQLQVWHDGXVHDJHQHUDOSXUSRVHSURJUDPPLQJ
ODQJXDJHVXFKDV3+3RU3HUOWRDXWRPDWLFDOO\FUHDWHDQGH[HFXWH64/TXHULHVRQ
WKH0\64/VHUYHU<RXFDQDOVRKLGHWKHGHWDLOVRIWKHLQWHUDFWLRQZLWKWKHGDWDEDVH
EHKLQGDXVHUIULHQGO\LQWHUIDFH:HOOVKRZ\RXKRZWRGRWKLV
:HEGDWDEDVHDSSOLFDWLRQV
:HH[SODLQKRZ\RXFDQXVH3+3RU3HUOWRFUHDWHG\QDPLFGDWDEDVHGULYHQZHE
DSSOLFDWLRQVWKDWFDQSXEOLVKLQIRUPDWLRQIURPWKHGDWDEDVHWRWKH:HEDQGFDS
WXUHLQIRUPDWLRQSURYLGHGE\XVHUV
+70/LVWKHOLQJXDIUDQFDRIWKH:HE$OWKRXJKOHDUQLQJ+70/LVQRWZLWKLQWKH
VFRSHRIWKLVERRNWKHUHDUHPDQ\JUHDW+70/JXLGHVDYDLODEOHLQFOXGLQJ+70/DQG
;+70/7KH'HILQLWLYH*XLGHE\&KXFN0XVFLDQR 25HLOO\ :HUHFRPPHQGWKDW
\RXSLFNXSWKHEDVLFVRI+70/EHIRUHUHDGLQJ&KDSWHUVRU

The LAMP Platform


,WVYHU\FRPPRQWRILQGZHEGDWDEDVHDSSOLFDWLRQVGHYHORSHGXVLQJWKH/LQX[RSHU
DWLQJV\VWHPWKH$SDFKHZHEVHUYHUWKH0\64/GDWDEDVHPDQDJHPHQWV\VWHPDQG
WKH3HUORU3+3VFULSWLQJODQJXDJH7KLVFRPELQDWLRQLVRIWHQUHIHUUHGWRE\WKHDFURQ\P
/$03DWHUPLQYHQWHGDW25HLOO\0HGLD
/LQX[LVWKHPRVWFRPPRQGHYHORSPHQWDQGGHSOR\PHQWSODWIRUPEXWDVZHOOVKRZ
LQWKLVERRN\RXFDQUXQDOOWKHWRROVRQRWKHURSHUDWLQJV\VWHPV,QIDFWZHOOJLYH
GLUHFWLRQVIRUJHWWLQJVWDUWHGRQ/LQX[:LQGRZVDQG0DF26;0RVWRIWKHFRQWHQW
LQWKLVERRNFDQEHXVHGIRURWKHURSHUDWLQJV\VWHPVZLWKOLWWOHPRGLILFDWLRQ
7KH3LQ/$03RULJLQDOO\VWRRGIRU3HUOEXWRYHUWKHSDVWGHFDGHXVHUVKDYHLQFUHDV
LQJO\WXUQHGWR3+3IRUGHYHORSLQJG\QDPLFZHESDJHV3+3LVYHU\FOHDQDQGHIILFLHQW
IRUUHWULHYLQJGDWDDQGGLVSOD\LQJLWZLWKPLQLPDOSURFHVVLQJ,I\RXKDYHWRGRKHDY\
GDWDFUXQFKLQJDIWHUWKHGDWDLVUHWXUQHGIURP0\64/3HUOPD\VWLOOEHDEHWWHUFKRLFH
:HGLVFXVV3+3DQG3HUOODUJHO\LQGHSHQGHQWO\\RXFDQSLFNXSRQHZLWKRXWQHHGLQJ
6 | Chapter 1:Introduction

WROHDUQWKHRWKHUDOWKRXJKZHEHOLHYHWKDW\RXOOEHQHILWIURPOHDUQLQJERWKODQJXDJHV
,QIDFWDOPRVWDQ\PRGHUQODQJXDJHFDQEHXVHGWRSHUIRUPWKLVWDVNPRVWRIWKHP
KDYHWKHQHFHVVDU\LQWHUIDFHVWRERWKZHEVHUYHUVDQGGDWDEDVHHQJLQHV

Structured Query Language


,%0LVWREHFUHGLWHGQRWRQO\ZLWKLQYHQWLQJWKHUHODWLRQDOGDWDEDVHEXWGHYHORSLQJ
WKHODQJXDJHVWLOOXVHGWRGD\WRLQWHUDFWZLWKVXFKGDWDEDVHV64/LVDOLWWOHRGGEHDULQJ
WKHVW\OLVWLFPDUNVRILWVWLPHDQGLWVGHYHORSHUV,WVDOVRJRWWHQUDWKHUEORDWHGRYHUWKH
\HDUVDSURFHVVPDGHZRUVHE\LWVEHLQJVWDQGDUGL]HG PXOWLSOHWLPHV EXWLQWKLV
ERRNZHOOVKRZ\RXWKHHVVHQWLDOV\RXUHDOO\QHHGDQGKHOS\RXEHFRPHIOXHQWLQWKHP
64/VKRZVPDQ\RIWKHSUREOHPVWKDWDUHFRPPRQO\DWWULEXWHGWRFRPSXWLQJVWDQG
DUGVLWWULHVWRDFFRPSOLVKWRRPXFKLWIRUFHVQHZIHDWXUHVLQWRROGPROGVWRPDLQWDLQ
EDFNZDUG FRPSDWLELOLW\ DQG LW UHIOHFWV XQHDV\ FRPSURPLVHV DQG WUDGHRIIV DPRQJ
SRZHUIXOYHQGRUV$VDUHVXOWWKHUHDUHVHYHUDOVWDQGDUGVWKDWGDWDEDVHPDQDJHPHQW
V\VWHPVFDQDGKHUHWR64/GDWHVEDFNWRDQGSURYLGHVMXVWDERXWHYHU\WKLQJ
WKDW\RXZLOOQHHGIRUEHJLQQLQJZRUN+RZHYHULWODFNVIHDWXUHVGHPDQGHGE\VRPH
PRGHUQDSSOLFDWLRQV64/ZDVVWDQGDUGL]HGLQDQGDGGVDKXJHQXPEHURI
QHZIHDWXUHVPDQ\RIWKHPFRQVLGHUHGRYHUNLOOE\VRPHH[SHUWV7KHUHLVDOVRDPRUH
UHFHQWVWDQGDUG64/WKDWZDVSXEOLVKHGLQDQGDGGVVXSSRUWIRU;0/GDWD
(DFKGHYHORSPHQWWHDPKDVWRGHFLGHRQWKHWUDGHRIIVEHWZHHQWKHIHDWXUHVUHTXHVWHG
E\XVHUVDQGWKHQHHGWRNHHSVRIWZDUHIDVWDQGUREXVWDQGVRGDWDEDVHHQJLQHVJHQ
HUDOO\GRQWFRQIRUPWRWDOO\WRDQ\RQHVWDQGDUG)XUWKHUPRUHKLVWRULFDOGLIIHUHQFHV
KDYHVWD\HGDURXQGLQOHJDF\GDWDEDVHHQJLQHV7KDWPHDQVWKDWHYHQLI\RXXVHIDLUO\
VLPSOHYDQLOOD64/\RXPD\KDYHWRVSHQGWLPHZKHQSRUWLQJ\RXUVNLOOVDQG\RXU
FRGHWRDQRWKHUGDWDEDVHHQJLQH
,QWKLVERRNZHOOVKRZ\RXKRZWRXVH0\64/VIODYRURI64/WRFUHDWHGDWDEDVHV
DQGVWRUHDQGPRGLI\GDWD:HOODOVRVKRZ\RXKRZWRXVHWKLV64/YDULDQWWRDG
PLQLVWHUWKH0\64/VHUYHUDQGLWVXVHUV

MySQL Software Covered in This Book


<RXFDQEHYHU\SURGXFWLYHZLWK0\64/ZLWKRXWGHGLFDWLQJDORWRIWLPHWRFRQILJX
UDWLRQDQGDGPLQLVWUDWLRQ,Q&KDSWHUZHOOORRNDWVHYHUDOFRPPRQZD\VRIVHWWLQJ
XSWKHVRIWZDUH\RXOOQHHGIRUWKLVERRN:KLOH\RXFDQVNLSPRVWRIWKHLQVWUXFWLRQV
LI\RXDOUHDG\KDYHDZRUNLQJ0\64/LQVWDOODWLRQZHUHFRPPHQG\RXDWOHDVWVNLP
WKURXJKWKHPDWHULDOIRU\RXURSHUDWLQJV\VWHPZHOOIUHTXHQWO\UHIHUWRSDUWVRIWKLV
FKDSWHUODWHURQ$VSDUWRIWKLVFKDSWHUZHH[SODLQKRZ\RXFDQFRQILJXUH\RXU0\64/
VHUYHUIRUJRRGVHFXULW\
0\64/SURYLGHVPDQ\RWKHUWRROVIRUDGPLQLVWUDWLRQLQFOXGLQJFRPSLOHWLPHRSWLRQV
DODUJHFRQILJXUDWLRQILOHDQGVWDQGDORQHXWLOLWLHVGHYHORSHGE\ERWK0\64/$%DQG

MySQL Software Covered in This Book | 7

H[WHUQDOGHYHORSHUV:HOOJLYH\RXWKHEDVLFVWKDWZLOONHHS\RXXSDQGUXQQLQJLQ
PRVWHQYLURQPHQWVDQGZLOOEULHIO\GHVFULEHHYHQVRPHUHODWLYHO\DGYDQFHGWRSLFV
:HZRQWFRYHUDOOWKHSURJUDPVWKDWFRPHZLWKWKH0\64/GLVWULEXWLRQDQGZHZRQW
VSHQGWRRORQJRQHDFKRQHWKH0\64/UHIHUHQFHPDQXDOGRHVDJRRGMRERIFRYHULQJ
DOOWKHRSWLRQV:HOOLQVWHDGORRNDWWKHSURJUDPVDQGRSWLRQVWKDW\RXUHPRVWOLNHO\
WRXVHLQSUDFWLFHWKHVHDUHWKHRQHVZHYHXVHGRXUVHOYHVDUHDVRQDEOHQXPEHURIWLPHV
RYHUVHYHUDO\HDUVRIZRUNLQJZLWK0\64/

The Books Web Site


:HYHVHWXSWKHZHEVLWHKWWSZZZOHDUQLQJP\VTOFRPZKLFKFRQWDLQVWKHVDPSOH
GDWDEDVHVGDWDILOHVDQGSURJUDPFRGH:HUHFRPPHQG\RXPDNHJRRGXVHRIWKHZHE
VLWHZKLOH\RXUHDGWKLVERRN

8 | Chapter 1:Introduction

CHAPTER 2

Installing MySQL

/HDUQLQJ0\64/LVHDVLHVWLI\RXKDYHDGDWDEDVHVHUYHULQVWDOOHGRQ\RXUFRPSXWHU
%\DGPLQLVWHULQJ\RXURZQVHUYHU\RXFDQJREH\RQGTXHU\LQJDQGOHDUQKRZWRPDQ
DJHXVHUVDQGSULYLOHJHVFRQILJXUHWKHVHUYHUDQGPDNHWKHEHVWXVHRILWVIHDWXUHV
,PSRUWDQWO\\RXDOVROHDUQWKHVWHSVUHTXLUHGWRLQVWDOODQGFRQILJXUH0\64/ZKLFK
LVXVHIXOZKHQ\RXQHHGWRGHSOR\\RXUDSSOLFDWLRQVHOVHZKHUH
7KLVFKDSWHUH[SODLQVKRZWRFKRRVHDQGFRQILJXUHDVXLWDEOHHQYLURQPHQWIRUOHDUQLQJ
0\64/:HFRYHUWKHIROORZLQJWRSLFV
:KDWWRLQVWDOOKRZWRGHFLGHEHWZHHQSUHFRPSLOHGSDFNDJHVDQLQWHJUDWHGZHE
GHYHORSPHQWHQYLURQPHQWDQGFRPSLOLQJIURPWKHVRXUFHFRGH
:KHUHWRLQVWDOO/LQX[0LFURVRIW:LQGRZVRU0DF26;"
:K\ZKHQDQGKRZWRXSJUDGH0\64/
+RZ0\64/KDVFKDQJHGDQGKRZWRPLJUDWHEHWZHHQYHUVLRQV
+RZWRFRQILJXUHWKH$SDFKHZHEVHUYHUDQGVXSSRUWIRUWKH3+3DQG3HUOVFULSWLQJ
ODQJXDJHV
0\64/LVDYDLODEOHLQVHYHUDOIRUPVDQGIRUPDQ\RSHUDWLQJV\VWHPV,QWKHQH[WVHFWLRQ
ZHH[DPLQHWKHFKRLFHVDYDLODEOHDQGKRZ\RXFDQGHFLGHZKDWVXLWV\RX

Installation Choices and Platforms


$VZHPHQWLRQHGEHIRUH\RXOOQHHG0\64/WKH$SDFKHZHEVHUYHU3+3DQG3HUO
IRUWKLVERRN+RZ\RXFKRRVHWRLQVWDOOWKHVHGHSHQGVRQZKDW\RXZDQWWRGRKRZ
FRQILGHQW\RXDUHLQXVLQJ\RXURSHUDWLQJV\VWHPHQYLURQPHQWDQGWKHOHYHORISULYL
OHJHV\RXKDYHRQ\RXUV\VWHP,I\RXUHSODQQLQJWRXVHWKHLQVWDOODWLRQIRUOHDUQLQJ
DQGGHYHORSPHQWRQO\DQGQRWIRUDSURGXFWLRQVLWHWKHQ\RXKDYHJUHDWHUFKRLFHDQG
\RXQHHGQRWEHVRFRQFHUQHGDERXWVHFXULW\DQGSHUIRUPDQFH:HOOGHVFULEHWKHPRVW
FRPPRQZD\VWRLQVWDOOWKHVRIWZDUH\RXQHHG
<RXFDQILQGWKHUHDG\WRXVH0\64/SURJUDPV NQRZQDVELQDULHV RQWKH0\64/
$%ZHEVLWHDQGRQ/LQX[LQVWDOODWLRQ&'VDQGZHEVLWHV<RXFDQDOVRGRZQORDGWKH
9

VRXUFHFRGHIRU0\64/IURPWKH0\64/$%ZHEVLWHDQGSUHSDUHRUFRPSLOHWKH
H[HFXWDEOHSURJUDPV\RXUVHOI%\GRLQJWKHFRPSLOLQJ\RXUVHOI\RXHQVXUHWKDW\RX
KDYHWKHPRVWXSWRGDWHYHUVLRQRIWKHVRIWZDUHDQG\RXFDQRSWLPL]HWKHFRPSLOHU
RXWSXWIRU\RXUSDUWLFXODUQHHGV7KH0\64/PDQXDOVD\VWKDW\RXFDQJHWDSHUIRUP
DQFHLQFUHDVHRIXSWRSHUFHQWLI\RXFRPSLOHWKHFRGHZLWKWKHLGHDOVHWWLQJVIRU
\RXUHQYLURQPHQW+RZHYHUUROOLQJ\RXURZQLQVWDOODWLRQIURPVRXUFHFRGHFDQDOVR
EHDWHGLRXVDQGHUURUSURQHSURFHVVVRZHVXJJHVWWKDW\RXVWLFNZLWKWKHUHDG\PDGH
ELQDULHVXQOHVV\RXUHH[SHULHQFHGDQGUHDOO\QHHGWRVTXHH]HHYHU\RXQFHRISHUIRUP
DQFHIURP\RXUVHUYHU&RPSLOLQJIURPVRXUFHXQGHU:LQGRZVDQG0DF26;LVHYHQ
PRUHLQYROYHGVRLWVXQFRPPRQDQGZHGRQWGLVFXVVLWLQWKLVERRN
<RXFDQDOVRLQVWDOO0\64/DVSDUWRIDQLQWHJUDWHGSDFNDJHWKDWLQFOXGHVWKH$SDFKH
3+3DQG3HUOVRIWZDUHWKDW\RXOOQHHGODWHULQWKLVERRN8VLQJDQLQWHJUDWHGSDFNDJH
DOORZV \RX WR IROORZ D VWHSE\VWHS LQVWDOODWLRQ ZL]DUG ,WV HDVLHU WKDQ LQWHJUDWLQJ
VWDQGDORQHSDFNDJHVDQGPDQ\RIWKHLQWHJUDWHGSDFNDJHVLQFOXGHRWKHUWRROVWKDWKHOS
\RXDGMXVWFRQILJXUDWLRQILOHVZRUNZLWK0\64/RUFRQYHQLHQWO\VWDUWDQGVWRSVHUY
LFHV8QIRUWXQDWHO\PDQ\RIWKHLQWHJUDWHGSDFNDJHVDUHDFRXSOHRIPLQRUUHOHDVHV
EHKLQGWKHFXUUHQWYHUVLRQDQGPD\QRWLQFOXGHDOOWKH3+3OLEUDULHVWKDW\RXUHTXLUH
$QRWKHU GLVDGYDQWDJH LV WKDW DQ LQWHJUDWHG SDFNDJH GRHVQW DOZD\V ILW LQ ZLWK \RXU
FXUUHQWVHWXSIRUH[DPSOHHYHQLI\RXDOUHDG\KDYHD0\64/LQVWDOODWLRQ\RXOOJHW
DQRWKHURQHDVSDUWRIWKHLQWHJUDWHGSDFNDJHDQG\RXOOKDYHWRWDNHFDUHWRDYRLG
FODVKHV'HVSLWHWKHGLVDGYDQWDJHVZHUHFRPPHQG\RXIROORZWKLVDSSURDFK7KHUH
DUH VHYHUDO LQWHJUDWHG SDFNDJHV DYDLODEOH ZH IHHO WKDW ;$033 LV SUREDEO\ WKH EHVW
SURGXFHGRIWKHVHDQGZHOOGHVFULEHKRZWRLQVWDOODQGXVHWKLV;$033LQFOXGHV
0\64/WKH$SDFKHZHEVHUYHUZLWK3+3DQG3HUOVXSSRUWDQGRWKHUXVHIXOVRIWZDUH
VXFKDVSKS0\$GPLQ:HUHFRPPHQGWKDW\RXVWDUWRXWE\XVLQJ;$033DQGZH
ZRQWVSHQGWLPHGHVFULELQJKRZWRVHSDUDWHO\LQVWDOODQGFRQILJXUH$SDFKH3+3DQG
3HUOWRZRUNWRJHWKHURQ\RXUV\VWHP
7KH VRIWZDUH SDFNDJHV \RX QHHG0\64/ $SDFKH 3+3 DQG 3HUODUH DYDLODEOH
UHDG\ WR LQVWDOO RQ PDQ\ RSHUDWLQJ V\VWHPV DQG FDQ EH FRPSLOHG WR UXQ RQ D ODUJH
QXPEHURIRWKHUV+RZHYHUFKDQFHVDUHWKDW\RXUHUXQQLQJRQHRIWKUHHPDMRURSHU
DWLQJV\VWHPV/LQX[:LQGRZVRU0DF26;VRZHOOSURYLGHGHWDLOHGLQVWUXFWLRQV
IRURQO\WKHVHWKUHH/HWVVHHKRZWKH\FRPSDUHDV0\64/GHYHORSPHQWDQGSURGXF
WLRQSODWIRUPV

Linux
/LQX[LVDQRSHQVRXUFHRSHUDWLQJV\VWHPWKDWLVFORVHO\PRGHOHGRQ8QL[ZKLFKLV
ZK\LWVRIWHQFDOOHGD8QL[FORQH(YHQWKRXJKLWVIUHH/LQX[LVYHU\SRZHUIXODQG
YHU\VHFXUHZLWKYHUVLRQVDYDLODEOHIRUDZLGHUDQJHRIKDUGZDUH
<RXW\SLFDOO\JHW/LQX[LQWKHIRUPRIDGLVWULEXWLRQVXFKDV5HG+DWRU0DQGULYD$
GLVWULEXWLRQSDFNDJHVWKHRSHUDWLQJV\VWHPWRJHWKHUZLWKDODUJHUDQJHRIXVHIXOVRIW
ZDUHIRUWKLQJVVXFKDVZRUGSURFHVVLQJQHWZRUNLQJZHEDQGGDWDEDVHGHYHORSPHQW

10 | Chapter 2:Installing MySQL

DQGHYHQJDPHV7KHVHGLVWULEXWLRQVDUHIUHHWRGRZQORDGDQGGLVWULEXWH\RXFDQDOVR
EX\ORZFRVW&'FRSLHVRUPRUHH[SHQVLYHVKULQNZUDSSHGSDFNVZLWKSULQWHGPDQ
XDOV0DQ\RIWKHPRVWSRSXODUZHEVLWHVUXQRQ/LQX[DQGLWVDQH[FHOOHQWFKRLFHIRU
OHDUQLQJ0\64/

Live CDs
<RXFDQLQVWDOO/LQX[RQLWVRZQRUDORQJVLGH:LQGRZVRQDVLQJOHFRPSXWHU WKLVLV
NQRZQ DV GXDOERRWLQJ  ,I \RX ZDQW WR WU\ RXW /LQX[ ZLWKRXW LQVWDOOLQJ LW RQ \RXU
FRPSXWHU\RXFDQXVHDERRWDEOHRUOLYH&'GLVWULEXWLRQ7KLVDOORZV\RXWRERRW
\RXUFRPSXWHUIURPD&'WRJHWDIXOO\ZRUNLQJ/LQX[V\VWHPZLWKRXWPDNLQJDQ\
FKDQJHVWR\RXUKDUGGLVN:KHQ\RXUHPRYHDOLYH&'DQGUHERRWHYHU\WKLQJLVEDFN
WRZKDW\RXKDGEHIRUH\RXGRQWKDYHWRZRUU\DERXWGRLQJDQ\GDPDJHZKLOH\RX
OHDUQKRZWRXVH/LQX[)RUH[DPSOHWKH.QRSSL[ KWWSZZZNQRSSL[RUJ OLYH&'
LQFOXGHVDOOWKHVRIWZDUH0\64/WKH$SDFKHZHEVHUYHU3+3DQG3HUOWKDW\RX
QHHGIRUWKLVERRN+RZHYHUZHUHFRPPHQGWKDW\RXXVHDOLYH&'RQO\WREHFRPH
IDPLOLDUZLWK/LQX[:KLOHLWVSRVVLEOHWRVDYHILOHVIURPDOLYH&'RQWRWKHKDUGGLVN
D86%IODVKGLVNRUDQRWKHUFRPSXWHUWKURXJKDQHWZRUNFRQQHFWLRQWKLVLVWHGLRXV
)RUDQ\WKLQJWKDWLQYROYHVXVLQJ/LQX[IRUH[WHQGHGSHULRGVRIWLPH\RXUHEHWWHURII
ZLWKDIXOOLQVWDOODWLRQWRKDUGGLVN

Windows
0LFURVRIW:LQGRZVLVE\IDUWKHPRVWFRPPRQFRPPHUFLDO3&RSHUDWLQJV\VWHPWRGD\
DQGQHZ3&VRIWHQFRPHZLWK:LQGRZVSUHLQVWDOOHG:LQGRZV;3UHOHDVHGLQ
LVDYDLODEOHRQPRVWFXUUHQW3&V:LQGRZV9LVWDLVWKHODWHVWYHUVLRQRI:LQGRZVDW
WKHWLPHRIZULWLQJLWVLQUHOHDVHFDQGLGDWH IRUWHVWLQJ IRUPDQGGXHWREHSXEOLVKHG
LQWKHQH[WIHZPRQWKV
:HYHWHVWHGWKHLQVWUXFWLRQVLQWKLVERRNXVLQJERWK;3DQG9LVWD:KLOHZHZRXOGQW
UHFRPPHQGXVLQJHLWKHUYHUVLRQIRUDSURGXFWLRQVHUYHUWKH\UHTXLWHDSSURSULDWHIRU
OHDUQLQJWKHPDWHULDOLQWKLVERRN:HDVVXPH\RXUHXVLQJHLWKHU;3RU9LVWD\RXFDQ
VHWXSDVXLWDEOHHQYLURQPHQWRQROGHUYHUVLRQVRI:LQGRZVVXFKDVDQG0HEXW
WKHSURFHVVLVOHVVVWUDLJKWIRUZDUG:KHQZHVD\:LQGRZVLQWKLVERRNZHPHDQ
;3RU9LVWD

Mac OS X
$OOQHZ$SSOHFRPSXWHUVVLQFHKDYHFRPHZLWK26;UHFHQWYHUVLRQVLQFOXGH
 3DQWKHU DQG 7LJHU ZLWK /HRSDUG GXHIRUUHOHDVHLQWKHQH[WIHZ
PRQWKV26;KDVDQLFHJUDSKLFDOXVHULQWHUIDFHRYHUD8QL[OLNHKHDUWZKLFKPHDQV
LWVQRWKDUGWRXVHVRIWZDUHRULJLQDOO\GHVLJQHGIRU8QL[RU/LQX[0RVWQHZ$SSOH
FRPSXWHUVEXLOWIURPRQZDUGKDYHDQ[W\SHSURFHVVRUROGHUV\VWHPVKDYHD
3RZHU3&SURFHVVRU<RXFDQHDVLO\FKHFNZKLFKRSHUDWLQJV\VWHPYHUVLRQRUSURFHVVRU
\RXUV\VWHPKDVE\FOLFNLQJRQWKH$SSOHPHQXDQGFKRRVLQJWKH$ERXW7KLV0DFHQWU\
Installation Choices and Platforms | 11

,WVQRWFRPPRQWRILQGDSURGXFWLRQ0\64/VHUYHUUXQQLQJRQ26;EXWLWVDJRRG
HQYLURQPHQWIRUOHDUQLQJ0\64/

So, What Should I Do?


$VZHPHQWLRQHGHDUOLHU\RXFDQXVHDOPRVWDQ\PDMRURSHUDWLQJV\VWHPZKHQSUDF
WLVLQJWKHPDWHULDOFRYHUHGLQWKLVERRNEXWWRNHHSWKLQJVVHQVLEOHZHOODVVXPH\RXUH
XVLQJRQHRIWKHELJWKUHHMXVWOLVWHG:KHUHWKHSURFHVVYDULHVEHWZHHQRSHUDWLQJV\V
WHPVZHOOFOHDUO\H[SODLQWKHQHFHVVDU\VWHSV,WVKRXOGQWEHWRRKDUGWRLQWHUSUHWWKH
LQVWUXFWLRQVIRURWKHURSHUDWLQJV\VWHPVWKDWZHGRQWIRFXVRQLQWKLVERRN)RUH[
DPSOHPDQ\RIWKH/LQX[LQVWUXFWLRQVFDQEHXVHGZLWKOLWWOHDGDSWDWLRQRQ6RODULVRU
)UHH%6'
7RLQVWDOOD0\64/VHUYHUZLWKWKHVWDQGDUGGLUHFWRULHVDQGVHWWLQJVIRUDV\VWHPZLGH
LQVWDOODWLRQ \RXOOJHQHUDOO\ QHHG VXSHUXVHU DOVRNQRZQDVWKH V\VWHPURRWXVHURU
DGPLQLVWUDWRU SULYLOHJHVRQ\RXUV\VWHP$OZD\VEHFDUHIXOZKHQXVLQJVXSHUXVHUDF
FHVV7KHVXSHUXVHUFDQGRDQ\WKLQJRQDV\VWHPVR\RXPLJKWEHWHPSWHGWRDOZD\V
ORJLQXQGHUWKHVXSHUXVHUDFFRXQW+RZHYHUDQ\WKLQJPHDQVDQ\WKLQJLQFOXGLQJ
DFFLGHQWDOO\GHOHWLQJYLWDOV\VWHPILOHVDQGPDNLQJWKHV\VWHPXQXVDEOH7KHUHDUHDOVR
VHFXULW\ULVNVDVVRFLDWHGZLWKXVLQJWKLVOHYHORIDFFHVVE\GHIDXOWVRZHVWURQJO\VXJJHVW
\RXVWLFNWRDQRUGLQDU\RUQRQSULYLOHJHGXVHUDFFRXQWDQGVZLWFKWRWKHSULYLOHJHG
DFFRXQWRQO\ZKHQQHFHVVDU\:HOOH[SODLQKRZWRFRQILJXUHD0\64/VHUYHULQVWDOOHG
RQD/LQX[RU0DF26;V\VWHPWRUXQDVDOHVVSULYLOHJHGXVHUDQ\ILOHVDQGGLUHFWRULHV
WKDWWKHVHUYHUFUHDWHVDUHWKHQRZQHGE\WKLVDFFRXQW
,I \RX GRQW KDYH VXSHUXVHU DFFHVVIRU H[DPSOH \RXUH XVLQJ D VKDUHG XQLYHUVLW\
FRPSXWHURUZDQWWRH[SHULPHQWZLWKRXWWRXFKLQJWKHV\VWHPZLGH0\64/LQVWDOODWLRQ
\RXFDQJHQHUDOO\LQVWDOODORFDO0\64/VHUYHUXVLQJQRQVWDQGDUGVHWWLQJVZHOODOVR
H[SODLQKRZ\RXFDQGRWKLV+RZHYHUZHUHFRPPHQGWKDW\RXJRZLWKWKHGHIDXOW
VHWWLQJVLI\RXFDQDWOHDVWZKLOH\RXUHVWLOOOHDUQLQJDORWDERXW0\64/<RXUHIDU
OHVVOLNHO\WRPDNHPLVWDNHVDQGOHVVOLNHO\WRUXQLQWRGLIILFXOWLHVZLWKWKHVRIWZDUH
SURJUDPVDUHUDUHO\WHVWHGDVZHOORQQRQVWDQGDUGFRQILJXUDWLRQVDVWKH\DUHRQWKH
GHIDXOWVHWWLQJV
)LQDOO\WKHUHDUHFDVHVZKHQWKHGDWDEDVHVHUYHUPD\DOUHDG\EHVHWXSIRU\RX0DQ\
KRVWLQJFRPSDQLHVIRUH[DPSOHDOORZ\RXWRDGPLQLVWHU\RXUGDWDEDVHVXVLQJRQO\D
ZHEEDVHG0\64/FOLHQWVXFKDVSKS0\$GPLQ:HOOWDNHDEULHIORRNDWSKS0\$G
PLQLQ&KDSWHU

Using the Command-Line Interface


7KHWKUHHRSHUDWLQJV\VWHPVZHXVHLQWKLVERRNDOOKDYHJUDSKLFDOXVHULQWHUIDFHV\RX
FDQVWDUWSURJUDPVE\FOLFNLQJRQLFRQV\RXFDQVHOHFWWDVNVIURPPHQXVDQG\RXFDQ
GUDJDQGGURSILOHVDQGIROGHUV+RZHYHURQFH\RXVWDUWWRXVHPRUHSRZHUIXODVSHFWV
RIWKHRSHUDWLQJV\VWHPDQGDSSOLFDWLRQV\RXOOTXLFNO\ILQGWKDWVRPHWDVNVDUHPRUH
12 | Chapter 2:Installing MySQL

HDVLO\GRQHE\W\SLQJLQFRPPDQGV)RUH[DPSOH\RXFDQWHOOWKHRSHUDWLQJV\VWHPWR
OLVWFHUWDLQILOHVLQDIROGHURUUXQDJLYHQSURJUDPLQDSDUWLFXODUZD\
/LQX[:LQGRZVDQG0DF26;DOOKDYHDFRPPDQGOLQHLQWHUIDFHWKDWDOORZV\RXWR
GRWKLV,Q/LQX[DQG0DF26;\RXXVHD7HUPLQDOSURJUDPWRVKRZ\RXWKHFRP
PDQGOLQH LQWHUIDFH ZKLFK LV FDOOHG WKH VKHOO ,Q :LQGRZV \RX XVH WKH &RPPDQG
3URPSW:LQGRZSURJUDPWRVKRZ\RXWKH&RPPDQG3URPSWVRPHWLPHVFDOOHGWKH
'26SURPSW
,QWKLVVHFWLRQZHOOGHVFULEHKRZHDFKFRPPDQGOLQHLQWHUIDFHZRUNV\RXFDQVNLS
WKHGHVFULSWLRQVIRUWKHRSHUDWLQJV\VWHPV\RXGRQWXVH

The Linux and Mac OS X Shell


7RDFFHVVWKHVKHOOXQGHU/LQX[RSHQDWHUPLQDOSURJUDPVXFKDV konsole rxvtRU
xtermWKHVHDUHRIWHQOLVWHGLQWKHPDLQPHQXXQGHUWKH6\VWHPRU6\VWHP7RROVJURXS
DQG PD\ EH VLPSO\ ODEHOHG 7HUPLQDO 7R DFFHVV WKH VKHOO XQGHU 0DF 26 ; RSHQ D
WHUPLQDOZLQGRZE\GRXEOHFOLFNLQJRQWKH7HUPLQDOLFRQLQWKH8WLOLWLHVIROGHUXQGHU
WKH$SSOLFDWLRQVJURXS
8QGHU/LQX[\RXOOVHHDSURPSWVLPLODUWRWKLVRQH
[adam@eden ~]$

ZKLOHXQGHU0DF26;\RXOOVHHVRPHWKLQJOLNHWKLV
eden:~ adam$

7KLVVKHOOSURPSWLQGLFDWHVZKDWXVHUDFFRXQW\RXUHORJJHGLQXQGHUZKDWFRPSXWHU
\RXUHORJJHGLQWRDQGZKDWGLUHFWRU\\RXUHZRUNLQJIURP<RXOOJHQHUDOO\EHILUVW
ORJJHG LQ DV DQ RUGLQDU\ XVHU ZHYH VKRZQ WKH XVHU adam KHUH  RQ WKH FRPSXWHU
(eden DQGZRUNLQJIURP\RXUKRPHGLUHFWRU\7KHWLOGH ~ FKDUDFWHULVDVKRUWFXW
V\PEROWRDXVHUVKRPHGLUHFWRU\RQDQ\8QL[OLNHV\VWHPLQFOXGLQJ/LQX[DQG0DF
26;IRUH[DPSOHDXVHUVKRPHGLUHFWRU\FRXOGEH/home/adamEXW\RXFDQUHIHUWR
LWDV~adamRULI\RXUHORJJHGLQDVadamVLPSO\DV~7KHVDPSOHSURPSWVKRZVWKDW
WKHXVHUadamLVORJJHGLQWRWKHFRPSXWHUedenDQGZRUNLQJIURPKLVKRPHGLUHFWRU\
7RNHHSWKLQJVVLPSOHZHOOMXVWVKRZDGROODUVLJQWRLQGLFDWHWKH/LQX[RU0DF26;
VKHOOSURPSWDVEHORZ
$

)URPWKHVKHOO\RXFDQUXQPDQ\XVHIXOFRPPDQGVZHOOVHHVRPHDVZHSURJUHVV
WKURXJKWKLVERRN7ZRVWDQGDUGFRPPDQGVWKDWDUHLPSRUWDQWWRNQRZIRUWKLVERRN
DUH
cd

&KDQJHV\RXUZRUNLQJIROGHURUGLUHFWRU\RQGLVN)RUH[DPSOH\RXFDQFKDQJH
WRWKH/tmpGLUHFWRU\E\W\SLQJ
$ cd /tmp

Using the Command-Line Interface | 13

<RXFDQDOVRFKDQJHWR\RXUKRPHGLUHFWRU\E\XVLQJWKHWLOGHVKRUWFXW
$ cd ~

,Q IDFW \RX FDQ OHDYH RXW WKH WLOGH cd RQ LWV RZQ PHDQV FKDQJH WR P\ KRPH
GLUHFWRU\
ls

/LVWVWKHILOHVDQGGLUHFWRULHVLQ\RXUZRUNLQJIROGHU)RUH[DPSOH\RXFDQOLVWWKH
ILOHVLQ\RXUKRPHGLUHFWRU\E\W\SLQJ
$ ls ~

7RJHWKHU WKH cd DQG ls FRPPDQGV DUH WKH WH[W HTXLYDOHQW RI XVLQJ D JUDSKLFDO ILOH
PDQDJHUVXFKDV.RQTXHURURU1DXWLOXVXQGHU/LQX[RUWKH)LQGHUXQGHU0DF26
;WRJRWRGLIIHUHQWGLUHFWRULHVDQGYLHZWKHLUFRQWHQWV

Command completion and history


&RPPDQGFRPSOHWLRQLVDJUHDWWLPHVDYLQJIHDWXUHZKHQ\RXVWDUWWRW\SHWKHQDPH
RIDFRPPDQGILOHRUGLUHFWRU\SUHVVLQJWKH7DENH\F\FOHVWKURXJKQDPHVWKDWFRXOG
PDWFK7KHEHVWZD\WRXQGHUVWDQGWKLVLVWRWU\LW)RUH[DPSOHZKHQ\RXW\SH
$ cd /t

DQGWKHQUHSHDWHGO\SUHVVWKH7DENH\\RXOOVHHLWHPVEHJLQQLQJZLWKWKHOHWWHUWLQ
WKH/ ILOHV\VWHPURRW GLUHFWRU\,IDQDPHKDVVSDFHVDEDFNVODVKFKDUDFWHULVDGGHG
DXWRPDWLFDOO\EHIRUHHDFKVSDFHIRUH[DPSOHMy\Important\Notes.txt0RVW/LQX[
DQG0DF26;V\VWHPVDUHFRQILJXUHGWRXVHWKHbashVKHOODQGZHDVVXPH\RXUHXVLQJ
WKLVWRR,I\RXUHXVLQJDGLIIHUHQWVKHOOYDULDQWVXFKDVtcsh\RXOOQHHGWRSUHVVWKH
&WUO'NH\FRPELQDWLRQLQSODFHRIWKH7DENH\
3UHVVLQJWKHupDQGdownDUURZNH\VZLOOF\FOHWKURXJKWKHODVWFRPPDQGV\RXW\SHG
\RXFDQXVHWKHDUURZNH\VWRHGLWDSUHYLRXVFRPPDQGDQG\RXFDQSUHVVWKH(QWHU
NH\WRUXQDGLVSOD\HGFRPPDQG<RXFDQVHHDOLVWRIUHFHQWO\XVHGFRPPDQGVZLWK
WKHhistoryFRPPDQGDVEHORZ
$ history
1 cd Photos/
2 lt
3 find . -name "*AMES*"
4 cfdisk /dev/hda
5 ssh ubuntu@192.168.1.1

<RXFDQTXLFNO\UXQDFRPPDQGDJDLQE\W\SLQJWKHQXPEHUSUHFHGHGE\DQH[FODPD
WLRQPDUN ! FKDUDFWHU)RUH[DPSOHWRUXQWKHFRPPDQGQXPEHUHG3LQWKHKLVWRU\
OLVW\RXFDQW\SH!3DQGSUHVVWKHEnterNH\

Performing restricted operations


&HUWDLQUHVWULFWHGRSHUDWLRQVRQD/LQX[RU0DF26;V\VWHPDUHDOORZHGRQO\LI\RX
KDYHVXSHUXVHURUURRWSULYLOHJHV2QD/LQX[V\VWHP\RXFDQORJLQDVWKHV\VWHPURRW
14 | Chapter 2:Installing MySQL

XVHUE\W\SLQJWKH su - VZLWFKXVHU FRPPDQG:KHQSURPSWHGW\SHLQWKHV\VWHP


URRWXVHUVSDVVZRUGDQGSUHVVWKH(QWHUNH\
[adam@eden ~]$ su Password: the_system_root_password
[root@eden ~]#

7KLVLVDOPRVWLGHQWLFDOWRWKHFDVHIRU0DF26;
eden:~ adam$ su Password: the_system_root_password
eden:~ root#

$IWHU\RXW\SHLQWKHSDVVZRUG\RXOOEHORJJHGLQDVWKHXVHUrootRQWKHVDPHFRP
SXWHU LQWKLVH[DPSOH eden DQGEHZRUNLQJIURPWKDWXVHUVKRPHGLUHFWRU\ DOVR
LQGLFDWHGE\DWLOGH 
1RWLFHKRZWKHODVWFKDUDFWHURIWKHSURPSWLVDGROODUVLJQ $ ZKHQ\RXUHQRWWKHURRW
XVHUDQGWKHKDVKRUSRXQG # VLJQZKHQ\RXDUH,QWKLVERRNZHOOXVHWKHVHV\PEROV
WRLQGLFDWHZKHWKHU\RXVKRXOGUXQDFHUWDLQFRPPDQGDVDQRUGLQDU\XVHURUDVWKH
URRWXVHU:KHQ\RXYHILQLVKHGGRLQJWKHUHVWULFWHGRSHUDWLRQV\RXFDQORJRXWIURP
WKHV\VWHPURRWDFFRXQWE\W\SLQJexit
# exit
$

<RXFDQJHQHUDOO\XVHWKH sudoFRPPDQGWRSHUIRUPDFWLRQVZLWKV\VWHPVXSHUXVHU
SULYLOHJHVHYHQWKRXJK\RXUHQRWDFWXDOO\ORJJHGLQDVroot<RXFDQDOVRXVHWKHsudo
-sFRPPDQGWRORJLQDVWKHURRWXVHU LQSODFHRIsu - ,I\RXORJLQDVWKHV\VWHPURRW
XVHU\RXFDQWKHQRPLWWKHsudoNH\ZRUG$JDLQZHHPSKDVL]HWKDW\RXFDQLQDGYHU
WHQWO\GRDJUHDWGHDORIGDPDJHLI\RXXVHWKHURRWDFFRXQWDQGZHUHFRPPHQGWKDW
\RXORJLQDVWKHV\VWHPURRWXVHUDVLQIUHTXHQWO\DV\RXFDQ6RPHFRQILJXUDWLRQLV
QHFHVVDU\WRDOORZRUGLQDU\/LQX[XVHUVWRXVHWKHsudoFRPPDQGEXWLWVHQDEOHGE\
GHIDXOWXQGHU0DF26;DQGZHOOXVHWKLVDSSURDFKZKHQGLVFXVVLQJLQVWDOODWLRQIRU
WKLVRSHUDWLQJV\VWHP
<RXFDQDGGWKHDPSHUVDQGV\PERO & DWWKHHQGRIDFRPPDQGWRVWDUWWKHFRPPDQG
LQWKHEDFNJURXQGDOORZLQJ\RXWRXVHWKHVKHOOIRURWKHUZRUN,WVEHWWHUWRDYRLG
XVLQJWKLVV\PEROLQFRQMXFWLRQZLWKWKHsudoFRPPDQGVLQFH\RXZRQWVHHDQ\V\VWHP
SURPSWIRU\RXWRHQWHU\RXUSDVVZRUG:KHQZHZDQW\RXWRUXQD sudoMRELQWKH
EDFNJURXQGZHOODVN\RXWRVWDUWWKHMREQRUPDOO\WKHQSUHVVWKH&75/=NH\FRP
ELQDWLRQ WR VXVSHQG WKLV QHZ MRE <RX FDQ WKHQ W\SH WKH FRPPDQG bg WR VHQG WKH
VXVSHQGHGMREWRWKHEDFNJURXQG

Restricting access to files and directories


%HIRUHZHHQGRXUGLVFXVVLRQRIWKH/LQX[DQG0DF26;VKHOOOHWVORRNDWKRZDFFHVV
WRILOHVDQGGLUHFWRULHVLVFRQWUROOHGXQGHUVXFK8QL[OLNHRSHUDWLQJV\VWHPV(DFKILOH
RUGLUHFWRU\FDQKDYHUHDGZULWHDQGH[HFXWHSHUPLVVLRQVVHWIRUWKHXVHUZKRRZQV
LWWKHJURXSDVVRFLDWHGZLWKLWDQGHYHU\RWKHUXVHU
Using the Command-Line Interface | 15

:KHQWKHRSHUDWLQJV\VWHPLVDVNHGWRDOORZDFFHVVWRDILOHRUGLUHFWRU\LWORRNVWRVHH
ZKRWKHXVHULVDQGZKDWJURXSVWKLVXVHUEHORQJVWR,WWKHQFKHFNVWKHXVHUDQGWKH
JURXSDVVRFLDWHGZLWKWKDWILOHRUGLUHFWRU\DQGDOORZVDFFHVVRQO\LIWKHSHUPLVVLRQ
VHWWLQJVDUHDSSURSULDWH
<RXUJURXSRQD/LQX[RU0DF26;V\VWHPLVW\SLFDOO\WKHVDPHDV\RXUXVHUQDPHVR
IRUH[DPSOHWKHXVHUQDPHDQGJURXSIRUWKHXVHUadamZRXOGERWKEHadam7KHXVHU
DQGJURXSDVVRFLDWHGZLWKDILOHRUGLUHFWRU\FDQEHFKDQJHGE\XVLQJWKHchownFRP
PDQGDQGVSHFLI\LQJWKHXVHUQDPHDQGJURXSDVusername:group)RUH[DPSOH\RXFDQ
VHWWKHRZQHURIP\ILOHW[WWREHadamDQGWKHDVVRFLDWHGJURXSWREHmanagersE\W\SLQJ
# chown adam:managers myfile.txt

2QO\WKHVXSHUXVHULVDOORZHGWRFKDQJHWKHRZQHURIDILOHRUGLUHFWRU\
<RXFDQDOORFDWHSHUPLVVLRQVWRDILOHRUGLUHFWRU\E\XVLQJWKH chmodFRPPDQG7R
DOORZWKHXVHUZKRRZQVWKHILOHP\ILOHW[WWRUHDGDQGZULWH PRGLI\ LWEXWDOORZRWKHU
XVHUVWRRQO\UHDGLW\RXZRXOGZULWH
$ chmod u=rw,g=r,o=r myfile.txt

<RXFDQDOVRHQVXUHWKDWRQO\WKHXVHUZKRRZQVWKHILOHFDQUHDGDQGZULWHWRWKHILOH
DVIROORZV
$ chmod u=rw,g=,o= myfile.txt

+HUHWKHJURXSDQGRWKHUXVHUVKDYHEHHQDVVLJQHGQRSHUPLVVLRQV6LPLODUO\\RXFDQ
JLYHHYHU\RQHUHDGZULWHDQGH[HFXWHSHUPLVVLRQVWRWKHGLUHFWRU\P\GLUE\W\SLQJWKH
FRPPDQG
$ chmod u=rwx,g=rwx,o=rwx mydir

:KHQUHDGLQJRWKHUGRFXPHQWDWLRQ\RXOOSUREDEO\DOVRFRPHDFURVVFDVHVZKHUHDQ
RFWDOYDOXH RUPDVN LVXVHGZLWKWKHchmodFRPPDQG,QWKLVQRWDWLRQUHDGDFFHVVKDV
WKHYDOXHZULWHDFFHVVKDVWKHYDOXHDQGH[HFXWHDFFHVVKDVWKHYDOXH6RUHDG
RQO\DFFHVVKDVWKHYDOXHEXWUHDGDQGZULWHDFFHVVKDVWKHYDOXH 2XUSUH
YLRXVWZRH[DPSOHVZRXOGEHZULWWHQDV
$ chmod 644 myfile.txt

DQG
$ chmod 777 mydir

7KHchownRUchmodRSHUDWLRQFDQEHDSSOLHGWRDOOILOHVDQGGLUHFWRULHVXQGHUDVSHFLILHG
GLUHFWRU\E\XVLQJWKH--recursiveRSWLRQ XQGHU/LQX[ RUWKH-RRSWLRQ XQGHU0DF
26;DVZHOODV/LQX[ :HOOVHHH[DPSOHVRIWKLVODWHULQWKLVFKDSWHU

16 | Chapter 2:Installing MySQL

The Windows Command Prompt


8QGHU:LQGRZV\RXFDQRSHQDFRPPDQGSURPSWZLQGRZE\FOLFNLQJRQWKH&RP
PDQG3URPSWHQWU\XQGHUWKH$FFHVVRULHVVXEPHQX<RXFDQDOVRW\SHcmdLQWKH6WDUW
PHQXVHDUFKER[ 9LVWD RULQWKH6WDUWPHQX5XQILHOG ;3 
7KHFRPPDQGSURPSWW\SLFDOO\VKRZV\RXWKHFXUUHQWZRUNLQJGLVNDQGGLUHFWRU\
C:\Documents and Settings\Adam>

,QWKLVH[DPSOHWKHFXUUHQWZRUNLQJGLUHFWRU\LVWKHKRPHGLUHFWRU\ \Documents and


6HWWLQJV?$GDPRQWKHC:GLVN8QGHU9LVWDWKHORFDWLRQRIWKHKRPHGLUHFWRU\LVVOLJKWO\
GLIIHUHQW
C:\Users\Adam>

)URPWKHFRPPDQGSURPSW\RXFDQUXQPDQ\XVHIXOFRPPDQGVZHOOVHHVRPHDV
ZHSURJUHVVWKURXJKWKLVERRN7ZRVWDQGDUGFRPPDQGVWKDWDUHLPSRUWDQWWRNQRZ
IRUWKLVERRNDUH
cd

&KDQJHV\RXUZRUNLQJIROGHURUGLUHFWRU\RQGLVN
dir

/LVWVWKHILOHVDQGGLUHFWRULHVLQ\RXUZRUNLQJIROGHU
7RJHWKHUWKH cdDQG dirFRPPDQGVDUHWKHWH[WHTXLYDOHQWRIXVLQJDJUDSKLFDOILOH
PDQDJHU VXFK DV :LQGRZV ([SORUHU WR JR WR GLIIHUHQW GLUHFWRULHV DQG YLHZ WKHLU
FRQWHQWV
:LQGRZV XVHV WKH YDULDEOH %HOMEPATH% WR UHIHU WR \RXU KRPH GLUHFWRU\ VR \RX FDQ
DOZD\VFKDQJHWR\RXUKRPHGLUHFWRU\E\W\SLQJ
C:\> cd %HOMEPATH%
C:\Documents and Settings\Adam>

Command completion and history


&RPPDQGFRPSOHWLRQLVDIHDWXUHWKDWFDQVDYH\RXDORWRIW\SLQJ:KHQ\RXVWDUWWR
W\SHWKHQDPHRIDFRPPDQGILOHRUGLUHFWRU\SUHVVLQJWKHFRPSOHWLRQNH\VHTXHQFH
F\FOHVWKURXJKPDWFKHV7KHFRPSOHWLRQNH\YDULHVEHWZHHQV\VWHPVLWLVJHQHUDOO\WKH
7DENH\RUWKH&WUO'RU&WUO)NH\FRPELQDWLRQ
8QGHU:LQGRZV\RXFDQDFWLYDWHWKHFRPPDQGFRPSOHWLRQIHDWXUHLI\RXVWDUWWKH
FRPPDQGSURPSWZLWKWKH/f:onRSWLRQ FRPPDQGFRPSOHWLRQLVDFWLYHE\GHIDXOWLQ
9LVWD ,IWKH /f:onVZLWFKGRHVQWZRUNRQ\RXUV\VWHPWU\FDOOLQJWKH cmdSURJUDP
ZLWKRXWWKHVZLWFK<RXFDQDOVRFRQILJXUH:LQGRZV;3WRKDYHFRPPDQGFRPSOHWLRQ
DFWLYHE\GHIDXOWEXWZHZRQWGHVFULEHKRZWRGRWKLVKHUH
7KHEHVWZD\WRXQGHUVWDQGFRPPDQGFRPSOHWLRQLVWRWU\LWRXW)RUH[DPSOHZKHQ
\RXW\SHcdc:\p

Using the Command-Line Interface | 17

)LJXUH6WDUWLQJDSURJUDPIURPWKH5XQPHQXLWHP
C:\> cd c:\p

DQGWKHQUHSHDWHGO\SUHVVWKHFRPSOHWLRQNH\VHTXHQFH\RXOOVHHLWHPVEHJLQQLQJZLWK
WKHOHWWHUSLQWKH C:\GLUHFWRU\1RWHWKDW:LQGRZVGRHVQWPLQGZKHWKHU\RXXVH
XSSHUFDVHRUORZHUFDVHZKHQUHIHUULQJWRILOHVDQGIROGHUV
4XRWHVDUHDGGHGDXWRPDWLFDOO\DURXQGQDPHVZLWKVSDFHVIRUH[DPSOH"C:\Program
Files"7RFRQWLQXHH[SDQVLRQSUHVVWKHEDFNVSDFHNH\WRGHOHWHWKHODVWTXRWHDQG
W\SHDIXUWKHUKLQW)RUH[DPSOHWRVZLWFKWRWKH C:\Program Files\MySQLGLUHFWRU\
\RXGGHOHWHWKHTXRWHW\SHDEDFNVODVK \ DQGWKHQSUHVVWKHFRPSOHWLRQNH\VHTXHQFH
DJDLQ
3UHVVLQJWKHXSDQGGRZQDUURZNH\VZLOOF\FOHWKURXJKWKHFRPPDQGKLVWRU\<RXFDQ
VHHDOLVWRIUHFHQWO\XVHGFRPPDQGVZLWKWKHdoskey/historyFRPPDQGDVEHORZ
C:\> doskey/history
dir C:\
doskey/history

7KHUHDUHPDQ\PRUHWZHDNVIRUWKHFRPPDQGSURPSWMXVWGRDVHDUFKRQWKH:HE
IRUZLQGRZVFPG
<RXFDQDOVRVWDUWRWKHUSURJUDPVIURPWKH6WDUWPHQXXQGHU;3\RXZRXOGXVHWKH
5XQPHQXLWHPWREURZVHWRVHOHFWWKHSURJUDP\RXZDQW,I\RXW\SHLQWKHFRPPDQG
\RXOODOVRJHWFRPPDQGFRPSOHWLRQDVVKRZQLQ)LJXUH8QGHU9LVWDVLPSO\W\SH
WKHQDPHRIWKHSURJUDPLQWKH6WDUWPHQXVHDUFKER[+RZHYHUWKLVDSSURDFKGRHVQW
DOZD\VNHHSWKHUHVXOWVRIUXQQLQJDSURJUDPRQWKHVFUHHQVRZHVXJJHVW\RXXVHWKH
FRPPDQGSURPSWZLQGRZ

Using a Text Editor


$V\RXUHDGWKURXJKWKLVERRN\RXOOIUHTXHQWO\ILQGUHIHUHQFHVWRXVLQJDWH[WHGLWRU
7KLVPHDQVDSURJUDPWKDWFDQHGLWDQGVDYHILOHVWKDWFRQWDLQRQO\SODLQWH[W:RUG

18 | Chapter 2:Installing MySQL

SURFHVVRUVVDYHDGGLWLRQDOIRUPDWWLQJLQVWUXFWLRQVWKDWRQO\RWKHUZRUGSURFHVVRUVXQ
GHUVWDQG:RUGSURFHVVLQJSURJUDPVDOVRWHQGWRXVHSURSRUWLRQDOIRQWVZKLFKPDNHV
LWKDUGWRUHDGDQGZULWHILOHVRIVFULSWVDQGFRPPDQGV,WLVSRVVLEOHWRXVHDZRUG
SURFHVVRUWRORDGDQGVDYHSODLQWH[WILOHVEXWLWVUDWKHULQFRQYHQLHQWDQGHUURUSURQH
DQGVRZHGRQWUHFRPPHQG\RXGRWKLV
6RZKDWVKRXOG\RXXVH"7KHUHDUHKXQGUHGVRIWH[WHGLWRUVDYDLODEOHDQGPRVWSHRSOH
ILQGRQHWKH\SUHIHUWRXVH<RXVKRXOGWU\RXWVHYHUDOGLIIHUHQWSURJUDPVDQGVHWWOHRQ
RQHWKDW\RXUHFRPIRUWDEOHZLWK/HWVORRNDWVRPHRSWLRQV
/LQX[
8QGHU/LQX[SRSXODUWH[WHGLWRUVLQFOXGHpicogvimvimemacsjoekategedit
DQG xedit<RXFDQRIWHQILQGWKHVHOLVWHGXQGHUWKH(GLWRUVJURXSLQWKHPDLQ
PHQXRIPRVW/LQX[GLVWULEXWLRQV,I\RXUHFXULRXV\RXFDQDOVRW\SHWKHFRP
PDQG apropos "text editor"DWWKHVKHOOWRVHHDOLVWRISURJUDPVWKDWKDYHWKH
SKUDVHWH[WHGLWRULQWKHLUGHVFULSWLRQ
:LQGRZV
8QGHU:LQGRZVXVH1RWHSDG\RXFDQDOVRGRZQORDGDQGLQVWDOOIUHHWH[WHGLWRUV
VXFKDVgvimRUFRPPHUFLDOHGLWRUVVXFKDVEditPadDQGTextPad
0DF26;
8QGHU0DF26;\RXFDQXVHWKHLQFOXGHGHGLWRUVpicovimRUemacsFRQILJXUH
WKH7H[W(GLWSURJUDPWREHKDYHDVDWH[WHGLWRURULQVWDOODQGXVHRWKHUHGLWRUV
VXFKDV%%(GLWRU6PXOWURQ
7RVWDUWDQHGLWRUIURPWKHFRPPDQGOLQHW\SHLQWKHQDPHRIWKHSURJUDPIROORZHG
E\WKHQDPHRIWKHILOH\RXZLVKWRHGLWIRUH[DPSOH\RXFDQRSHQWKHILOHP\ILOHW[W
ZLWKWKHpicoHGLWRUE\W\SLQJ
$ pico myfile.txt

<RXFDQDOVRRSHQILOHVIURPWKHJUDSKLFDOXVHULQWHUIDFHGRXEOHFOLFNLQJRQWKHWH[W
ILOHLFRQZLOOJHQHUDOO\RSHQWKHILOHLQDWH[WHGLWRU<RXFDQPRGLI\WKHSURJUDPWKDWV
XVHGWRRSHQWH[WILOHVE\ULJKWFOLFNLQJRQWKHWH[WILOHLFRQ LQ:LQGRZVGHSUHVVWKH
6KLIWEXWWRQZKLOHFOLFNLQJ DQGZRUN\RXUZD\WKURXJKWKHSURJUDPRSWLRQV:HZRQW
JRLQWRGHWDLOKHUH
8QGHU0DF26;\RXFDQDOVRFRQILJXUHWKH7H[W(GLWSURJUDPWRDFWDVDWH[WHGLWRU
6WDUWWKH7H[W(GLWSURJUDPDQGWKHQFKRRVHWKH3UHIHUHQFHVRSWLRQIURPWKH7H[W(GLW
PHQX,QWKHGLDORJER[WKDWDSSHDUVVHOHFW3ODLQ7H[WXQGHUWKH)RUPDWKHDGLQJ7R
RSHQDILOHZLWK7H[W(GLWIURPWKHFRPPDQGOLQH\RXVKRXOGW\SH
$ open -a TextEdit myfile.txt

<RXFDQLQVWHDGVHOHFWWKHSODLQWH[WPRGHIRULQGLYLGXDOILOHVRQHDWDWLPHE\VHOHFWLQJ
WKH0DNH3ODLQ7H[WRSWLRQIURPWKH)RUPDWPHQXEXWWKLVDSSURDFKLVOLNHO\WREH
WHGLRXVDQGHUURUSURQHRYHUWLPH

Using a Text Editor | 19

Following the Instructions in This Book


6WDUWLQJLQWKHQH[WVHFWLRQZHOOH[SODLQKRZWRFRQILJXUHD0\64/VHUYHURQWKHVDPH
V\VWHPWKDW\RXUHORJJHGLQWR WKDWLVlocalhost :HZRQWGHVFULEHKRZWRVHWXS
WKH0\64/VHUYHURQRQHFRPSXWHUDQGWKHZHEVHUYHURQDGLIIHUHQWFRPSXWHULW
VKRXOGQWEHWRRKDUGWRPRGLI\RXULQVWUXFWLRQVWRGRWKLV,I\RXPRGLI\DQ\RIWKH
GHIDXOWVHWWLQJV\RXOOQHHGWRUHPHPEHUWRVSHFLI\WKHPZKHUHQHFHVVDU\
:HDOVRDVVXPHWKDWLI\RXUHXVLQJ:LQGRZV\RXXVHRQO\WKHC:GLVNZHOOH[SODLQ
KRZDQGZKHQWRFKDQJH\RXUZRUNLQJGLUHFWRU\:KHQZHVKRZRQO\WKH/LQX[RU
0DF26;SURPSWDVEHORZ
$

RUWKH:LQGRZV&RPPDQG3URPSWDV
C:\>

WKHZRUNLQJGLVNDQGGLUHFWRU\DUHXQLPSRUWDQWRU\RXZLOOEHLQWKHDSSURSULDWHOR
FDWLRQDIWHUIROORZLQJWKHVWHSVZHGHVFULEH
:KHQZHXVHWKHKDVKRUSRXQGV\PERO # DVWKHSURPSW
#

\RXZLOOQHHGWRW\SHLQWKHFRPPDQGVDVWKHVXSHUXVHU)RUD/LQX[RU0DF26;
V\VWHPWKLVPHDQV\RXVKRXOGORJLQDVWKHV\VWHPVXSHUXVHUE\W\SLQJsu -RUXVHWKH
sudoNH\ZRUGEHIRUHWKHFRPPDQG)RUD:LQGRZVV\VWHP\RXPXVWEHORJJHGLQZLWK
DV\VWHPDFFRXQWWKDWKDVDGPLQLVWUDWRUSULYLOHJHV
0RVWRIRXUFRPPDQGOLQHH[DPSOHVRXWVLGHWKLVFKDSWHUDUHZULWWHQLQDIRUPVXLWDEOH
IRU/LQX[DQG0DF26;WRUXQWKHVHLQVWUXFWLRQVXQGHU:LQGRZVVLPSO\UHSODFHWKH
IRUZDUGVODVKFKDUDFWHU / ZLWKWKHEDFNVODVKFKDUDFWHU \ )RUH[DPSOH\RXPD\VHH
DQH[DPSOHVWDUWLQJWKH0\64/PRQLWRUSURJUDP mysql IURPWKHbinVXEGLUHFWRU\DV
IROORZV
$ bin/mysql

2Q :LQGRZV \RXG W\SH bin\mysql DW WKH :LQGRZV &RPPDQG 3URPSW $IWHU WKLV
FKDSWHUZHOOPRVWO\RPLWWKHSDWKWRSURJUDPVDQGDVVXPHWKDW\RXOOFDOOWKHPXVLQJ
WKHDSSURSULDWHSDWKGHVFULEHGIRU\RXULQVWDOODWLRQLQWKLVFKDSWHU
7KHEHKDYLRURIPDQ\RIWKHSURJUDPVWKDWZHGHVFULEHLQWKLVERRNFDQEHPRGLILHG
WKURXJKRSWLRQV)RUH[DPSOH\RXFDQXVHWKH userDQG passwordRSWLRQVWRVSHFLI\
WKHXVHUQDPHDQGSDVVZRUG\RXZDQWWRXVH2SWLRQVFDQEHVSHFLILHGRQWKHFRPPDQG
OLQHDIWHUWKHSURJUDPQDPH6RPHSURJUDPVFDQDOVRUHDGRSWLRQVIURPDILOH:H
H[SODLQRSWLRQVILOHVLQ&KDSWHU
:KHQ \RX OLVW RSWLRQV RQ WKH FRPPDQG OLQH \RX LGHQWLI\ WKHP E\ WZR DGMDFHQW
K\SKHQV
$ mysql --user=saleh --password=tomcat

20 | Chapter 2:Installing MySQL

+HUHZHYHVSHFLILHGWKHXVHUQDPHsalehDQGWKHSDVVZRUGtomcat
,IVSHFLILHGLQDFRQILJXUDWLRQILOHWKHOHDGLQJGDVKHVVKRXOGEHRPLWWHG)RUH[DPSOH
\RXZRXOGZULWH--user=salehRQWKHFRPPDQGOLQHDQGuser=salehLQDQRSWLRQVILOH
:HOOJHQHUDOO\RPLWWKHOHDGLQJGDVKHVLQRXUGHVFULSWLRQV
0DQ\RSWLRQVDOVRKDYHDVKRUWIRUPWKDWFDQEHXVHGRQO\IURPWKHFRPPDQGOLQH
)RUH[DPSOHLQVWHDGRIZULWLQJ--user=salehRQWKHFRPPDQGOLQH\RXFDQZULWHWKH
VKRUWIRUP -u saleh7RKHOS\RXXQGHUVWDQGZKDWHDFKFRPPDQGGRHVZHFRQVLV
WHQWO\XVHWKHORQJIRUPRIHDFKRSWLRQ ZKHUHRQHH[LVWV 
0RVWRIWKHFRPPDQGOLQHXWLOLWLHVZHGHVFULEHLQWKLVERRNKDYHD helpRSWLRQWKDW
\RXFDQXVHWRGLVFRYHUWKHFRPPDQGV\QWD[LQFOXGLQJDQ\VKRUWIRUPV)RUH[DPSOH
WROHDUQDERXWWKHRSWLRQVWRXVHIRUWKHmysqlSURJUDPW\SH
$ mysql --help
mysql Ver 14.12 Distrib 5.0.22, for pc-linux-gnu (i686) using readline 5.0
Copyright (C) 2002 MySQL AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license
Usage: mysql [OPTIONS] [database]
-?, --help Display this help and exit.
...
-p, --password[=name]
Password to use when connecting to server. If password is
not given it's asked from the tty.
-u, --user=name User for login if not current user.
...

:HYHVKRZQRQO\SDUWRIWKHRXWSXWKHUH<RXFDQVHHWKDW\RXFDQXVHWKHVKRUWIRUP
-?LQVWHDGRI--help-uLQSODFHRI--user=DQG-pLQSODFHRI--password=7KHEUDFNHWV
LQGLFDWHWKDWDFODXVHLVRSWLRQDOIRUH[DPSOH\RXFDQFDOOWKHmysqlSURJUDPZLWKRXW
DQ\FRPPDQGOLQHRSWLRQVRUGDWDEDVHQDPH
6RPHRSWLRQVDVVXPHGHIDXOWYDOXHVLI\RXGRQWVSHFLI\DQ\WKLQJ7RDYRLGVXUSULVHV
\RXFDQDOZD\VH[SOLFLWO\VSHFLI\WKHYDOXHV\RXZDQW
:KHQDFRPPDQGJHWVWRRORQJIRUWKHSDJHZHVKRZLWRQPXOWLSOHOLQHVZLWKHDFK
OLQHHQGLQJZLWKDEDFNVODVK \ V\PERO)RUH[DPSOHZHPLJKWVKRZWKHSUHYLRXV
FRPPDQGDV
$ mysql \
--user=saleh \
--password=tomcat

7KHEDFNVODVKFKDUDFWHUVLQGLFDWHWKDWWKLVLVDVLQJOHFRPPDQGWKDWVKRXOGEHW\SHG
LQDOORQRQHOLQH<RXFDQDFWXDOO\W\SHLQWKHEDFNVODVKRQD/LQX[RU0DF26;V\VWHP
WRFRQWLQXH\RXUFRPPDQGRQDQHZOLQHEXWLWVQRWQHFHVVDU\

Following the Instructions in This Book | 21

Downloading and Verifying Files from the MySQL AB Web Site


:HOOQRZGHVFULEHLQGHWDLOWKHVWHSV\RXQHHGWRIROORZWRJHW0\64/XSDQGUXQQLQJ
RQ/LQX[:LQGRZVDQG0DF26;V\VWHPV:HOODOVRGHVFULEHKRZWRVWDUWVWRS
DQGFRQILJXUH\RXU0\64/VHUYHU
,I\RXLQVWDOO0\64/XVLQJWKHSDFNDJHVSURYLGHGE\0\64/$%\RXVWLOOQHHG$SDFKH
3+3DQG3HUOIRUWKHODWHUFKDSWHUVLQWKLVERRN<RXFDQLQVWHDGIROORZWKHLQVWUXFWLRQV
WRLQVWDOOWKH;$033LQWHJUDWHGSDFNDJHWRJHWHYHU\WKLQJ\RXQHHG)RU/LQX[\RX
FDQDOVRXVHSDFNDJHVSURYLGHGE\\RXUGLVWULEXWLRQ

Downloading MySQL from the MySQL AB Web Site


7KH0\64/$%ZHEVLWHXVXDOO\KDVWKHYHU\ODWHVWYHUVLRQVRIWKH0\64/VRIWZDUH
7RGRZQORDGIURPWKLVZHEVLWHIROORZWKHVHVWHSV
 9LVLW WKH 0\64/ $% GRZQORDGV SDJH DW KWWSGHYP\VTOFRPGRZQORDGV )LJ
XUHVKRZVZKDWWKLVSDJHORRNVOLNH
 6HOHFWWKH0\64/YHUVLRQWKDW\RXZDQW<RXOOQRUPDOO\ZDQWWKHODWHVW*HQHUDOO\
$YDLODEOH *$ UHOHDVHWKLVLVDWWKHWLPHRIZULWLQJ+RZHYHU\RXFDQDOVR
GRZQORDGWKHFXWWLQJHGJHEHWDYHUVLRQWRWU\RXWQHZIHDWXUHVRUWRKHOSLGHQWLI\
SUREOHPVEHIRUHWKHQHZYHUVLRQEHFRPHVWKHJHQHUDOUHOHDVH
 <RXOOVHHDORQJOLVWRISDFNDJHVIRUWKH0\64/YHUVLRQ\RXVHOHFWHG)LJXUH
VKRZVSDUWRIWKLVGRZQORDGVSDJH6HOHFWWKHDSSURSULDWHSDFNDJHWRGRZQORDG
IRU\RXUV\VWHP,QWKHIROORZLQJVHFWLRQVZHOOWHOO\RXZKDWWKLVLVIRUHDFKRS
HUDWLQJV\VWHPDQGLQVWDOODWLRQDSSURDFK
 %HIRUHWKHILOHGRZQORDGVWDUWV\RXOOSUREDEO\EHDVNHGWRWRSLFNDPLUURUVHUYHU
QHDU\RX0LUURUVDUHVHUYHUVWKDWKDYHLGHQWLFDOFRSLHVRIILOHVIRUGRZQORDGDQG
DUH XVHG WR VKDUH WKH EXUGHQ RI PDQ\ SHRSOH GRZQORDGLQJ WKH SDFNDJHV 7KH
0\64/VLWHXVHVDQ,3WRORFDWLRQGDWDEDVHWRJXHVVZKHUH\RXDUHDQGZLOOVXJJHVW
VRPHQHDUE\VHUYHUV\RXFDQGRZQORDGIURP6HOHFWLQJDPLUURUZLOOVWDUWWKHILOH
GRZQORDG

Verifying Package Integrity with MD5


:KHQGRZQORDGLQJILOHVIURPWKH,QWHUQHWLWVDJRRGLGHDWRHQVXUHWKDWZKDW\RXYH
JRWLVZKDW\RXZDQWHGWRJHW)RUDSURGXFWLRQVHUYHUZHUHFRPPHQGWKDW\RXFKHFN
WKHLQWHJULW\RISDFNDJHVWKDW\RXGRZQORDG$VLPSOHZD\WRGRWKLVLVWRFRPSDUH
FKHFNVXPVJHQHUDWHGE\DGLJHVWDOJRULWKPVXFKDV0'
$GLJHVWDOJRULWKPWDNHVVRPHGDWD IRUH[DPSOHDQ530ILOH DVLQSXWDQGFDOFXODWHV
DELWQXPEHURUFKHFNVXPIURPWKLVGDWD:LWKDJRRGGLJHVWDOJRULWKPLWVSUDF
WLFDOO\LPSRVVLEOHWRFKDQJHWKHGDWDZLWKRXWFKDQJLQJWKHFKHFNVXPVRLIWKHFKHFN
VXPVRIWZRILOHVPDWFK\RXFDQEHFHUWDLQWKDWWKHILOHVDUHLGHQWLFDO

22 | Chapter 2:Installing MySQL

)LJXUH7KH0\64/$%GRZQORDGVSDJH

2QWKH0\64/GRZQORDGSDJH\RXOOVHHDGLIIHUHQWVWULQJRIFKDUDFWHUVVXFKDV
MD5: 0d2a3b39e7bb4109b2f7b451b7768f34

QH[WWRHDFKILOH<RXVKRXOGHQVXUHWKDWWKHFKHFNVXPRIWKHILOH\RXKDYHGRZQORDGHG
PDWFKHVWKHFRUUHVSRQGLQJYDOXHRQWKHGRZQORDGVSDJH
2Q/LQX[XVHWKHmd5sumSURJUDPRQWKHGRZQORDGHGILOH
$ md5sum mysql-standard-5.0.22-linux-i686.tar.gz
0eaa7a8ec18699ce550db1713a27cda3 mysql-standard-5.0.22-linux-i686.tar.gz

7KHILOHQDPHLVVKRZQLQLWDOLFLQWKLVH[DPSOHEHFDXVHWKHQDPHLVOLNHO\
WRFKDQJHDQG\RXOOKDYHWRW\SHLQWKHDFWXDOQDPHRIWKHILOH\RX
GRZQORDG

2Q:LQGRZV\RXFDQGRZQORDGDQGXVHWKHIUHHZLQ0G6XPSURJUDPIURPKWWS
ZZZQXOOULYHUFRPZLQPGVXP7KLVSURJUDPLVYHU\HDV\WRXVHMXVWLQVWDOODQGVWDUW
WKHSURJUDPSUHVVWKH...EXWWRQWREURZVHIRUDQGVHOHFWWKHGRZQORDGHGILOHDQG

Downloading and Verifying Files from the MySQL AB Web Site | 23

)LJXUH7KH/LQX[VHFWLRQRIWKH0\64/GRZQORDGVSDJH

WKHQUHDGRIIWKHFKHFNVXPYDOXH)LJXUHVKRZVZKDWWKLVSURJUDPVGLDORJER[
ORRNVOLNH
2Q0DF26;RSHQDWHUPLQDOZLQGRZDQGXVHWKHmd5SURJUDP
$ md5 mysql-standard-5.0.22-osx10.4-i686.dmg
MD5
(mysql-standard-5.0.22-osx10.4-i686.dmg) =
b7d7f0878503db504e1eaed5d2518f4e

'LJLWDOO\VLJQHGSDFNDJHVRIIHUDPRUHVHFXUHZD\WRHQVXUHWKDWILOHVKDYHQRWEHHQ
WDPSHUHGZLWKKRZHYHU0'FKHFNVXPVVKRXOGEHVXIILFLHQWIRUPRVWUHDGHUVRIWKLV
ERRN

24 | Chapter 2:Installing MySQL

)LJXUH8VLQJZLQ0G6XPWRYHULI\WKH0'FKHFNVXPRIDGRZQORDGHGILOH
2SHQVRXUFHSURMHFWVVXFKDV0\64/$SDFKH3+3DQG3HUOSURGXFH
FRQVWDQWO\ HYROYLQJ VRIWZDUH ZLWK QHZ YHUVLRQV DSSHDULQJ UHJXODUO\
7KHLQVWDOODWLRQILOHVW\SLFDOO\LQFOXGHWKHYHUVLRQQXPEHULQWKHILOH
QDPHIRUH[DPSOH0\64/VHUYHUYHUVLRQ!LUSP7KHYHUVLRQV
RIWKHVRIWZDUHWKDW\RXZLOOXVHDUHDOPRVWFHUWDLQO\QHZHUWKDQWKH
RQHVXVHGLQRXUH[DPSOHVVR\RXVKRXOGVXEVWLWXWHWKHDSSURSULDWH
YHUVLRQ QXPEHU ZKHQ KDQGOLQJ WKHP 2I FRXUVH LQVWDOODWLRQ GHWDLOV
FKDQJH RYHU WLPHWKLQJV JHQHUDOO\ EHFRPH HDVLHUVR H[SHFW VRPH
YDULDWLRQIURPWKHVWHSVZHGLVFXVVKHUH<RXOODOVRSUREDEO\ILQGWKDW
WKHRXWSXWZHVKRZIRUYDULRXVSURJUDPVZLOOEHVOLJKWO\GLIIHUHQWIURP
ZKDW\RXVHHRQ\RXURZQV\VWHP
:KHQHYHU\RXLQVWDOOVRIWZDUHWKDWFDQDFFHSWFRQQHFWLRQVIURPRWKHU
FRPSXWHUV\RXVKRXOGWDNHFDUHWRFRQILJXUH\RXUFRPSXWHUILUHZDOO
VRIWZDUHWREORFNFRQQHFWLRQVIURPXQDXWKRUL]HGV\VWHPV7KLVLVSDU
WLFXODUO\LPSRUWDQWLI\RXUFRPSXWHULVHDVLO\DFFHVVLEOHIURPWKH,QWHU
QHWIRUH[DPSOHWKURXJK\RXUFRQQHFWLRQWR\RXU,QWHUQHW6HUYLFH3UR
YLGHU ,63 

Installing Under Linux


7KHUHDUHILYHPDLQZD\VWRJHW0\64/XSDQGUXQQLQJRQD/LQX[V\VWHP<RXFDQ
,QVWDOODV\VWHPZLGHVHUYHUIURPSDFNDJHVGRZQORDGHGIURPWKH0\64/$%ZHE
VLWH8VLQJSDFNDJHVVXSSOLHGE\0\64/$%PHDQVWKDWWKH0\64/UHODWHGILOHV
DUHORFDWHGWRJHWKHULQDFRQVLVWHQWZD\
0\64/$%SURYLGHVWKHVHSDFNDJHVLQWKH530IRUPDWDFROOHFWLRQRIILOHVWKDW
FDQEHSURFHVVHGDQGLQVWDOOHGE\WKH rpmSURJUDP7KHQDPHLVDYHVWLJHRIWKH
SURJUDPVRULJLQVDVWKH5HG+DW3DFNDJH0DQDJHU+RZHYHUPDQ\/LQX[GLVWUL
EXWLRQVRWKHUWKDQ5HG+DWXVH530VIRUPDQDJLQJVRIWZDUHLQVWDOODWLRQWKHVH
LQFOXGH)HGRUD0DQGULYD0DQGUDNHDQG686(7KH0\64/$%FRPSDQ\DOVR
SURYLGHVILOHVIRUGRZQORDGLQWKHIRUPDWXVHGE\'HELDQEDVHGGLVWULEXWLRQVEXW

Installing Under Linux | 25

UHFRPPHQGV WKDW WKH apt-get PHWKRG EH XVHG LQVWHDG ZH GHVFULEH WKH UHFRP
PHQGHGDSSURDFKLQWKLVFKDSWHU
,QVWDOODV\VWHPZLGHRUORFDOVHUYHUXVLQJXVLQJDFRPSUHVVHGGLUHFWRU\ NQRZQDV
D J]LSSHG WDU DUFKLYH  IURP WKH 0\64/ $% ZHE VLWH 7KLV GLUHFWRU\ KDV DOO WKH
QHFHVVDU\0\64/ILOHVUHDG\WRUXQLQSODFH\RXGRQWQHHGWRUXQDQLQVWDOOHU
SURJUDPRUSODFHWKHILOHVLQDSDUWLFXODUORFDWLRQRQGLVN
,QVWDOODV\VWHPZLGHRUORFDOVHUYHUE\GRZQORDGLQJWKH0\64/VRXUFHFRGHIURP
WKH0\64/$%ZHEVLWHDQGFRPSLOLQJWKHH[HFXWDEOHSURJUDPV\RXUVHOI7KLVLV
WKHPRVWWLPHFRQVXPLQJZD\RIVHWWLQJXS/LQX[EXWLVWKHPRVWIOH[LEOHIRUSRZHU
XVHUV
,QVWDOODV\VWHPZLGHVHUYHUXVLQJSDFNDJHVFUHDWHGE\\RXU/LQX[GLVWULEXWLRQ\RX
FDQGRZQORDGWKHVHIURPWKH:HERULQVWDOOWKHPIURP\RXU/LQX[&'V
,QVWDOODV\VWHPZLGHVHUYHUE\GRZQORDGLQJWKH;$033LQWHJUDWHGSDFNDJH1RWH
WKDW;$033LVQRWGHVLJQHGIRUXVHDVDORFDOVHUYHUDQGVLJQLILFDQWHIIRUWLVUH
TXLUHGWRJHWDURXQGWKLVOLPLWDWLRQ

:HOOGHVFULEHHDFKRIWKHVHDSSURDFKHVLQGHWDLO,I\RXUHQRWVXUHZKLFKDSSURDFKLV
PRVWVXLWDEOHIRU\RXZHUHFRPPHQG\RXILUVWWU\WRXVHWKHSDFNDJHVSURYLGHGE\\RXU
/LQX[GLVWULEXWLRQ

Installing MySQL on Linux Using RPM Packages from MySQL AB


)LUVWJRWRWKH0\64/$%GRZQORDGVSDJHIROORZLQJWKHLQVWUXFWLRQVLQWKH'RZQ
ORDGLQJ0\64/IURPWKH0\64/$%:HE6LWHVHFWLRQDQGVFUROOGRZQWKHOLVWWRWKH
SDUWRIWKHSDJHZLWKWKHODEHO/LQX[[530GRZQORDGV7KH[LQGLFDWHVWKH
SURFHVVRUW\SHDOPRVWDOO3&VWRGD\XVH[SURFHVVRUV,I\RXKDYHDPRUHDGYDQFHG
W\SHVXFKDVDQ$0'ELWSURFHVVRU\RXVKRXOGILQGWKHDSSURSULDWHSDUWRIWKH
GRZQORDGVSDJH
3LFN530SDFNDJHVIRUERWKWKH0\64/VHUYHUDQGWKHFOLHQWWDNLQJFDUHWKDW\RX
VHOHFWWKHFRUUHFWYHUVLRQIRU\RXU/LQX[GLVWULEXWLRQDQG\RXUSURFHVVRU7KHVHZLOO
EH FDOOHG VRPHWKLQJ OLNH 0\64/VHUYHULUSP DQG 0\64/FOL
HQWLUSP3DFNDJHVZLWKKLJKHU&38QXPEHUVVXFKDVLRULDUH
EHWWHUWXQHGIRUQHZHUPDFKLQHVEXWZRQWZRUNRQROGHUPDFKLQHV
,I\RXLQWHQGWRGRVHUYHUEHQFKPDUNLQJDQGWHVWLQJ\RXPD\QHHGWRGRZQORDGWKH
EHQFKPDUN DQG WHVW VXLWHV SDFNDJH ZLWK D QDPH OLNH 0\64/
EHQFKLUSP KRZHYHU\RXZRQWQHHGWKHPIRUWKLVERRN
7RLQVWDOOWKH530ILOHV\RXOOQHHGWRORJLQDVWKHV\VWHPURRWXVHU2SHQDWHUPLQDO
SURJUDPDQGXVHWKHsu -FRPPDQGWRORJLQDVWKHURRWXVHU
$ su #

26 | Chapter 2:Installing MySQL

&KDQJHWRWKHGLUHFWRU\FRQWDLQLQJWKH0\64/530ILOHV\RXGRZQORDGHG7KLVLV
W\SLFDOO\\RXUKRPHGLUHFWRU\RU\RXUGHVNWRSGLUHFWRU\7RFKDQJHWRWKHKRPHGL
UHFWRU\RIWKHXVHUadam\RXGW\SH
# cd ~adam

7KHORFDWLRQRIWKHGHVNWRSGLUHFWRU\GHSHQGVRQWKH/LQX[GLVWULEXWLRQ\RXXVHEXW
LVFRPPRQO\WKHDesktopGLUHFWRU\XQGHUWKHKRPHGLUHFWRU\7RFKDQJHWRWKHGHVNWRS
GLUHFWRU\RIWKHXVHUadam\RXGW\SH
# cd ~adam/Desktop

<RXFDQWKHQLQVWDOOWKH0\64/VHUYHUDQG0\64/FOLHQW530V RUXSJUDGHDQ\H[
LVWLQJYHUVLRQV E\W\SLQJ
# rpm --upgrade --verbose --hash \
MySQL-server-5.0.22-0.i386.rpm MySQL-client-5.0.22-0.i386.rpm

,I DOO JRHV ZHOO \RXU 0\64/ VHUYHU VKRXOG QRZ EH LQVWDOOHG :HOO ORRN DW KRZ WR
FRQILJXUHLWLQ&RQILJXULQJD1HZO\,QVWDOOHG6HUYHUODWHULQWKLVFKDSWHU

Installing MySQL on Linux Using a gzipped Tar Archive from MySQL AB


,QVWHDGRIXVLQJDQLQVWDOODEOHSDFNDJH\RXFDQGRZQORDGDFRPSUHVVHGGLUHFWRU\RI
WKH0\64/H[HFXWDEOHDQGVXSSRUWILOHV7KLVSURFHVVLVVOLJKWO\PRUHLQYROYHGWKDQ
LQVWDOODWLRQIURPDSDFNDJH
)ROORZWKHLQVWUXFWLRQVRI'RZQORDGLQJ0\64/IURPWKH0\64/$%:HE6LWHDQG
GRZQORDGWKHDSSURSULDWHSDFNDJHIURPWKH/LQX[ QRQ530SDFNDJH GRZQORDGV
VHFWLRQRIWKH0\64/$%GRZQORDGVSDJH)RUWKLVERRNVHOHFWWKHVWDQGDUGSDFN
DJHUDWKHUWKDQWKH0D[RUGHEXJYHUVLRQV
,I\RXUHXQVXUHZKDWWRFKRRVHWU\SLFNLQJWKH/LQX[GRZQORDGDWWKHWRSRIWKHOLVW
7KLVZLOOEHQDPHGVRPHWKLQJOLNHP\VTOVWDQGDUGOLQX[LWDUJ]
)RUGLVWULEXWLRQ/LQX[VRIWZDUHLVRIWHQSDFNDJHGXVLQJWKHtarSURJUDPDQGWKHQWKLV
SDFNDJHLVFRPSUHVVHGXVLQJWKH gzipSURJUDPVRWKHILQDOILOHRIWHQKDVWKHILOHH[
WHQVLRQWDUJ]RUWJ]$WDUILOHRULWVJ]LSSHGYHUVLRQLVRIWHQUHIHUUHGWRDVDWDU
EDOO<RXOOQHHGWRXQSDFNRUXQWDUWKLVSDFNDJH
$ tar --gunzip --extract --file mysql-standard-5.0.22-linux-i686.tar.gz

7KHgunzipRSWLRQDVNVWKHSURJUDPWRGHFRPSUHVVWKHILOHILUVWXVLQJWKHgunzipSUR
JUDP6RPHEURZVHUVDXWRPDWLFDOO\GHFRPSUHVVILOHVWKDWKDYHDJ]H[WHQVLRQLI\RX
JHWDPHVVDJHOLNHJ]LSVWGLQQRWLQJ]LSIRUPDWWKLVKDVSUREDEO\KDSSHQHGLQ\RXU
FDVHDQG\RXFDQRPLWWKHgunzipRSWLRQ
$ tar --extract --file mysql-standard-5.0.22-linux-i686.tar.gz

<RXVKRXOGQRZKDYHWKHGLUHFWRU\P\VTOVWDQGDUGOLQX[L7RNHHSWKLQJV
VLPSOHZHOOFDOOWKLVWKH0\64/GLUHFWRU\

Installing Under Linux | 27

7KH0\64/GLUHFWRU\LVVHOIFRQWDLQHGDQGKDVDOOWKHILOHV\RXQHHGWRUXQDQGDFFHVV
WKHVHUYHU,I\RXKDYHVXSHUXVHUDFFHVVRQWKH/LQX[PDFKLQHDQGZDQWWKLV0\64/
VHUYHUWREHWKHV\VWHPZLGHLQVWDQFHRQWKHPDFKLQH\RXVKRXOGPRYHLWDFURVVWRD
WKHVWDQGDUGORFDWLRQXQGHUWKHXVUORFDOGLUHFWRU\
# mv mysql-standard-5.0.22-linux-i686 /usr/local/

DQGPDNHDOLQN/usr/local/mysqlWKDWSRLQWVWRWKLVGLUHFWRU\
# ln --symbolic /usr/local/mysql-standard-5.0.22-linux-i686 /usr/local/mysql

1RZ\RXFDQVLPSO\UHIHUWRWKH0\64/GLUHFWRU\DV/usr/local/mysql8VLQJDV\P
EROLFOLQNLQWKLVZD\DOORZV\RXWRKDYHGLIIHUHQWYHUVLRQVRI0\64/UHDG\WRUXQRQ
WKHV\VWHPZLWK/usr/local/mysqlSRLQWLQJWRWKHGLUHFWRU\FRQWDLQLQJWKHYHUVLRQ\RX
ZDQWWRXVH
,I\RXZDQWWRKDYHDORFDOLQVWDOODWLRQ\RXFDQOHDYHWKH0\64/GLUHFWRU\XQGHU\RXU
KRPHGLUHFWRU\<RXOOSUREDEO\ILQGLWKHOSIXOWRFUHDWHWKHOLQN~/mysqlWRSRLQWWRWKH
DFWXDO0\64/GLUHFWRU\IRUH[DPSOH
$ ln --symbolic ~/mysql-standard-5.0.22-linux-i686 ~/mysql

:LWK WKLV OLQN \RX FDQ XVH ~/mysql ZKHUHYHU \RX ZDQW WR UHIHU WR WKH aP\VTO
VWDQGDUGOLQX[LGLUHFWRU\

Installing MySQL on Linux by Compiling the Source Code from MySQL AB


*LYHQWKHQDWXUHRIWKLVERRNZHZRQWJRLQWRGHWDLOHGFRPSLOHWLPHVHWWLQJVEXWZLOO
MXVWORRNDWKRZ\RXFDQTXLFNO\JHWWKHVHUYHUXSDQGUXQQLQJ
)LUVW\RXQHHGWRGRZQORDGWKHVRXUFHILOHSDFNDJHIURPWKH0\64/$%GRZQORDGV
SDJHIROORZLQJWKHGLUHFWLRQVLQ'RZQORDGLQJ0\64/IURPWKH0\64/$%:HE
6LWH *R WR WKH 6RXUFH GRZQORDGV VHFWLRQ DQG GRZQORDG WKH 7DUEDOO WDUJ]
SDFNDJH
$IWHUGRZQORDGLQJ\RXVKRXOGKDYHDILOHZLWKDQDPHOLNHP\VTOWDUJ]'H
FRPSUHVVWKLVSDFNDJHXVLQJWKHIROORZLQJFRPPDQG
$ tar --gunzip --extract --file mysql-5.0.22.tar.gz

7KLVFUHDWHVDQHZGLUHFWRU\FRQWDLQLQJWKH0\64/VRXUFHILOHVFKDQJH\RXUZRUNLQJ
GLUHFWRU\WRWKLVE\W\SLQJ
$ cd mysql-5.0.22

<RXPXVWQRZFRPSLOHWKHVRXUFHFRGHDQGLQVWDOOWKHUHVXOWLQJSURJUDPV$IWHU\RXYH
GRQHWKLV\RXOOKDYHD0\64/GLUHFWRU\WKDWKDVDOOWKHILOHV\RXQHHGWRUXQDQGDFFHVV
WKHVHUYHU7KLVLVYHU\VLPLODUWRWKHWDUEDOODSSURDFK8QOLNHWKHWDUEDOODSSURDFK
KRZHYHU\RXQHHGWRILUVWXVHWKHconfigureFRPPDQGWRWHOOWKHFRPSLODWLRQSURFHVV
ZKHUH\RXZDQWWKH0\64/GLUHFWRU\WREHORFDWHG

28 | Chapter 2:Installing MySQL

,I\RXKDYHVXSHUXVHUSULYLOHJHVDQGZDQW\RXU0\64/LQVWDOODWLRQWREHV\VWHPZLGH
LWVEHVWWRLQVWDOOWRDGLUHFWRU\XQGHUWKHXVUORFDOGLUHFWRU\IRUH[DPSOHXVUORFDO
P\VTO2QWKHRWKHUKDQGLI\RXZDQWWRUXQDORFDOVHUYHU\RXFDQKDYHWKH
0\64/GLUHFWRU\ZKHUHYHU\RXZLVKIRUH[DPSOHXQGHU\RXURZQKRPHGLUHFWRU\
DWaP\VTO
7RLQVWDOO0\64/WRWKHGLUHFWRU\XVUORFDOP\VTOZHFDOOWKH configureFRP
PDQGZLWKWKHWDUJHWDVIROORZV
$ ./configure --prefix=/usr/local/mysql-5.0.22

,IDOOLVQRWZHOO\RXPD\VHHVRPHHUURUPHVVDJHV3UREOHPVGXULQJFRQILJXUDWLRQDUH
JHQHUDOO\GXHWR/LQX[SURJUDPVDQGOLEUDULHVPLVVLQJIURP\RXUV\VWHPUHDGWKHHUURU
PHVVDJHVFDUHIXOO\WRLGHQWLI\WKHFDXVHRIWKHSUREOHP
,IWKHFRQILJXUDWLRQLVVXFFHVVIXO\RXFDQXVHWKHmakeFRPPDQGWRFRPSLOHWKHILOHV
$ make

7KHFRPSLODWLRQSURFHVVPD\WDNHDORQJWLPH
<RXQHHGWRXVHWKH*18YDULDQWRIWKHmakeSURJUDP KWWSZZZJQX
RUJVRIWZDUHPDNH 7KH makeFRPPDQGRQPRVW/LQX[V\VWHPVLVLQ
IDFW WKH *18 PDNH SURJUDP LI \RX UXQ LQWR SUREOHPV ZKHQ XVLQJ
makeLWPLJKWQRWEH*18 makeDQGWKHSUREOHPPD\EHUHVROYHGE\
XVLQJWKHgmake *18PDNH FRPPDQGLQVWHDG

:KHQLWVGRQH\RXQHHGWRLQVWDOOWKHILOHVWRWKHGLUHFWRU\\RXVSHFLILHGHDUOLHU,I
\RXYHFKRVHQWRLQVWDOODORFDOVHUYHU\RXFDQVLPSO\W\SH
$ make install

,IDVLQRXUH[DPSOH\RXYHVSHFLILHGDSUHIL[SDWKWKDW\RXFDQWQRUPDOO\ZULWHWR
DVDQRUGLQDU\XVHU\RXOOQHHGWRILUVWORJLQDVURRW
$ su -

DQGWKHQUXQmakeinstallIURPWKHURRWSURPSWWRFRS\WKHFRPSLOHGILOHVWRWKHWDUJHW
LQVWDOODWLRQGLUHFWRU\
# make install

,IDOOJRHVZHOOWKH0\64/ILOHVZLOOEHLQVWDOOHGLQWKHFRUUHFWGLUHFWRU\<RXOORIWHQ
ILQGLWKHOSIXOWRFUHDWHDOLQNWRUHIHUWRWKLVGLUHFWRU\HDVLO\)RUH[DPSOHIRUDV\VWHP
ZLGH VHUYHU \RX FDQ PDNH WKH OLQN /usr/local/mysql WR SRLQW WR WKH XVUORFDO
P\VTOGLUHFWRU\
# ln --symbolic /usr/local/mysql-5.0.22 /usr/local/mysql

1RZ\RXFDQVLPSO\UHIHUWRWKH0\64/GLUHFWRU\DV /usr/local/mysql6LPLODUO\LI
\RXVSHFLILHGWKHSDWKKRPHDGDPP\VTOIRUDORFDOLQVWDOODWLRQ\RXFDQPDNH
WKHOLQN~/mysqlWRSRLQWWRWKHaP\VTOGLUHFWRU\

Installing Under Linux | 29

$ ln --symbolic ~/mysql-5.0.22 ~/mysql

DQGUHIHUWRWKHGLUHFWRU\DV~/mysql
$JDLQXVLQJDV\PEROLFOLQNLQWKLVZD\DOORZV\RXWRFRQILJXUHDQGXVHGLIIHUHQWYHU
VLRQVRI0\64/RQDV\VWHPZLWKWKHV\PEROLFOLQNSRLQWLQJWRWKHGLUHFWRU\FRQWDLQLQJ
WKHYHUVLRQ\RXZDQWWRXVH
1RWHWKDWWKHFRQILJXUDWLRQSURFHVVDVVXPHVGHIDXOWYDOXHVIRUDQ\WKLQJWKDW\RXGRQW
VSHFLI\)RUH[DPSOH\RXFDQH[SOLFLWO\VHWWKHGDWDGLUHFWRU\7&3SRUWDQGVRFNHW
ILOH PRUHDERXWWKHVHODWHU 
$
./configure \
--prefix=/home/adam/mysql \
--localstatedir=/home/adam/mysql/data \
--with-unix-socket-path=/home/adam/mysql/mysql.sock \
--with-tcp-port=53306

+RZHYHUZHUHFRPPHQG\RXFRPSLOHRQO\ZLWKWKHSUHIL[GLUHFWRU\VSHFLILHG<RX
FDQWKHQPRGLI\RWKHUVHWWLQJVE\SDVVLQJRSWLRQVWR0\64/IURPWKHFRPPDQGOLQH
ZHH[SODLQKRZWRGRWKLVLQ&RQILJXULQJDORFDOVHUYHUODWHULQWKLVFKDSWHU(YHQ
EHWWHU\RXFDQVSHFLI\WKHRSWLRQVLQDQRSWLRQVILOHDVGHVFULEHGLQ&KDSWHU

Installing MySQL, Apache, PHP, and Perl on Linux Using Distribution


Packages
$OPRVWDOOGLVWULEXWLRQVLQFOXGHSDFNDJHGYHUVLRQVRIWKHPDLQSLHFHVRIVRIWZDUHWKDW
\RXQHHGWRIROORZWKLVERRN0\64/WKH$SDFKHZHEVHUYHUDQGVXSSRUWIRUWKH3+3
DQG3HUOVFULSWLQJODQJXDJHV,QWKLVVHFWLRQZHOOH[SODLQKRZWRLQVWDOOWKHVHLIWKH\UH
QRWDOUHDG\SUHVHQWRQ\RXU/LQX[V\VWHP
7KHWKUHHPDLQGLVWULEXWLRQVZHOOFRYHUDUH5HG+DW0DQGULYDDQG'HELDQDVZHOO
DV GLVWULEXWLRQV DVVRFLDWHG ZLWK WKHVH LQFOXGLQJ )HGRUD 0DQGUDNH 8EXQWX DQG
.QRSSL[7KHVHDUHYHU\ZLGHO\XVHGDQGDUHZHOOVXSSRUWHGE\WKHGLVWULEXWRUVDQG
E\WKHJHQHUDO/LQX[FRPPXQLW\&RQILJXUHGFRUUHFWO\WKH\FDQDXWRPDWLFDOO\IHWFK
DQGLQVWDOOWKHUHTXLUHGVRIWZDUHIURPWKHLQVWDOODWLRQPHGLDRUIURPWKH,QWHUQHW
0RVWGLVWULEXWLRQVKDYHDQHDV\WRXVHJUDSKLFDOSDFNDJHPDQDJHPHQWWRROWKDW\RX
FDQXVHEXWWKHFRPPDQGOLQHWRROVDUHJHQHUDOO\PRUHUHOLDEOHDQGZHIHHO\RXOO
EHWWHU XQGHUVWDQG KRZ WKLQJV ILW WRJHWKHU E\ FDUU\LQJ RXW WKH LQVWDOODWLRQ IURP WKH
FRPPDQGOLQH

Installation on Red Hat and Fedora Core


5HG+DWLVSUREDEO\WKHPRVWIDPRXV/LQX[GLVWULEXWLRQDQG)HGRUD&RUHLVWKHFXW
WLQJHGJHYHUVLRQRI5HG+DWV(QWHUSULVH/LQX[GLVWULEXWLRQ,I\RXUHLQVWDOOLQJRQHRI
WKHVHWZRIURPVFUDWFKVHOHFWWKH&XVWRPLQVWDOODWLRQRSWLRQDQGZKHQ\RXVHHWKH
SDFNDJHVHOHFWLRQOLVWOLNHWKDWVKRZQLQ)LJXUHVHOHFW SXWDFKHFNPDUN QH[WWR

30 | Chapter 2:Installing MySQL

)LJXUH5HG+DWDQG)HGRUDSDFNDJHRSWLRQV

WKH:HE6HUYHULWHP7RDGG3+3VXSSRUWDQG3+30\64/OLEUDULHVFOLFNRQWKH
'HWDLOVOLQNRQWKHULJKWDQGVHOHFWWKHSDFNDJHVSKSDQGSKSP\VTOIURPWKHOLVW
\RXVKRXOGVHHVRPHWKLQJVLPLODUWR)LJXUH2QFH\RXYHGRQHWKLVUHWXUQWRWKH
SDFNDJHVHOHFWLRQOLVWDQGVHOHFW SXWDFKHFNPDUN QH[WWRWKH0\64/'DWDEDVHLWHP
$VEHIRUHFOLFNRQWKH'HWDLOVOLQNDQGHQVXUHWKHSKSP\VTOSDFNDJHLVVHOHFWHG
,I\RXDOUHDG\KDYHDUXQQLQJ/LQX[LQVWDOODWLRQ\RXFDQXVHWKHrpmFRPPDQGWRFKHFN
ZKHWKHU0\64/$SDFKH NQRZQDVKWWSG DQG3+3DUHDOUHDG\LQVWDOOHG
$ rpm --query --whatprovides mysql php php-mysql
mysql-5.0.22-1.FC5.1
mysql-server-5.0.22-1.FC5.1
httpd-2.2.0-5.1.2
php-5.1.4-1
php-mysql-5.1.4-1

,IDVLQWKLVH[DPSOHDOOWKHQHFHVVDU\SDFNDJHVDUHLQVWDOOHG\RXFDQVLPSO\VNLSWR
&RQILJXULQJD1HZO\,QVWDOOHG6HUYHUODWHULQWKLVFKDSWHU
,IWKHSDFNDJHVDUHQWSUHVHQW\RXOOVHHPHVVDJHVOLNHWKLV
no package provides php

Installing Under Linux | 31

)LJXUH'HWDLOHG5HG+DWDQG)HGRUDSDFNDJHRSWLRQV

DQG\RXOOQHHGWRLQVWDOODQ\PLVVLQJSDFNDJHV
5XQWKH3DFNDJH0DQDJHUE\VHOHFWLQJ$GG5HPRYH6RIWZDUHIURPWKH)HGRUDPHQX
$OWHUQDWLYHO\ORJLQDVURRWDQGW\SH
# pirut

<RXVKRXOGVHHDZLQGRZVLPLODUWRWKHRQHVKRZQLQ)LJXUH6HOHFWWKH/LVWWDE
DQGFKRRVHDQ\RIWKHVHSDFNDJHVWKDWGRQWDOUHDG\KDYHDFKHFNPDUNQH[WWRWKHP
KWWSGL
$SDFKH+7736HUYHU
P\VTO)&L
0\64/FOLHQWSURJUDPVDQGVKDUHGOLEUDULHV
32 | Chapter 2:Installing MySQL

)LJXUH5HG+DWDQG)HGRUDSDFNDJHPDQDJHPHQWSURJUDP

P\VTOVHUYHU)&L
7KH0\64/VHUYHUDQGUHODWHGILOHV
SKSL
7KH3+3+70/HPEHGGHGVFULSWLQJODQJXDJH 3+3+\SHUWH[W3UHSURFHVVRU
SKSP\VTOL
$PRGXOHIRU3+3DSSOLFDWLRQVWKDWXVH0\64/GDWDEDVHV
7KHYHUVLRQQXPEHUV\RXVHHZLOOSUREDEO\EHGLIIHUHQWIURPWKHRQHVZHYHOLVWHG
2QFH \RXYH VHOHFWHG WKHVH FOLFN WKH $SSO\ EXWWRQ DQG WKH VRIWZDUH VKRXOG EH
LQVWDOOHG
,I\RXUHXVLQJDQROGHUYHUVLRQRI5HG+DWRU)HGRUDWKHHDVLHVWZD\WRLQVWDOOLVWRORJ
LQXQGHUWKHURRWXVHUDFFRXQW E\W\SLQJsu - DQGODXQFKWKHSDFNDJHPDQDJHPHQW
SURJUDPVKRZQLQ)LJXUH
# system-config-packages

3ODFHDFKHFNPDUNQH[WWRWKHHQWU\IRU0\64/'DWDEDVHDQGFOLFNRQWKH'HWDLOVOLQN
<RXOOVHHDZLQGRZVXFKDVWKDWLQ)LJXUH6HOHFWWKHP\VTOVHUYHUDQGSKS
P\VTOSDFNDJHVDQGWKHQFOLFNWKH&ORVHEXWWRQ<RXOOEHSURPSWHGIRUWKH5HG+DW
RU)HGRUDLQVWDOODWLRQ&'VDQGWKHVHOHFWHGSDFNDJHVZLOOEHLQVWDOOHG

Installing Under Linux | 33

,I\RXKDYHDUHODWLYHO\UHFHQWYHUVLRQRI5HG+DWRU)HGRUD\RXFDQDOVRXVHWKH yum
VKRUWIRU<HOORZGRJ8SGDWHU0RGLILHG SURJUDPWRDXWRPDWLFDOO\GRZQORDGDQGLQ
VWDOOWKHQHFHVVDU\SDFNDJHVIURPWKH,QWHUQHW7KLVLVYHU\FRQYHQLHQWEHFDXVH\RX
GRQWKDYHWRVSHQGWLPHGLJJLQJXS\RXULQVWDOODWLRQ&'V0RUHLPSRUWDQWO\WKHODWHVW
YHUVLRQRIDSDFNDJHJHQHUDOO\KDVSDWFKHVIRUNQRZQEXJVDQGVHFXULW\YXOQHUDELOLWLHV
,I\RXYHQHYHUXVHGyumEHIRUH\RXQHHGWRFRQILJXUHLWILUVW)LUVWW\SHsu -WRORJLQ
DV WKH V\VWHP URRW XVHU DQG WKHQ XSGDWH \RXU /etc/yum.conf FRQILJXUDWLRQ ILOH E\
W\SLQJ
# wget http://www.fedorafaq.org/samples/yum.conf
# /bin/mv /etc/yum.conf /etc/yum.conf.bak
# /bin/mv yum.conf /etc

1RZ XSGDWH WKH yum LQGH[HV WKDW OLVW SDFNDJHV DQG WKH ORFDWLRQV WKDW WKH\ FDQ EH
GRZQORDGHGIURP
# rpm --upgrade --verbose --hash http://www.fedorafaq.org/yum
Retrieving http://www.fedorafaq.org/yum
Preparing...
########################################### [100%]
1:yum-fedorafaq
########################################### [100%]

2QFH\RXYHFRQILJXUHGyum\RXFDQGRZQORDGDQGLQVWDOODOOWKHSURJUDPV\RXQHHG
E\VLPSO\VSHFLI\LQJWKHPIURPWKHFRPPDQGOLQH
# yum update mysql mysql-server httpd php php-mysql
[root@saiedpc ~]# yum update mysql mysql-server httpd php php-mysql
...
Could not
Could not
Could not
Could not
Resolving

find update match


find update match
find update match
find update match
Dependencies

for
for
for
for

php
php-mysql
mysql-server
mysql

...
=============================================================================
Package
Arch
Version
Repository
Size
=============================================================================
Updating:
httpd
i386
2.2.2-1.2
updates
1.1 M
Updating for dependencies:
httpd-manual
i386
2.2.2-1.2
updates
846 k
mod_ssl
i386
1:2.2.2-1.2
updates
99 k
Transaction Summary
=============================================================================
Install
0 Package(s)
Update
3 Package(s)
Remove
0 Package(s)
Total download size: 2.0 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): mod_ssl-2.2.2-1.2. 100% |=========================| 99 kB
00:14

34 | Chapter 2:Installing MySQL

(2/3): httpd-2.2.2-1.2.i3 100% |=========================| 1.1 MB


(3/3): httpd-manual-2.2.2 100% |=========================| 846 kB
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Updating : httpd
#########################
Updating : mod_ssl
#########################
Updating : httpd-manual
#########################
Cleanup
: mod_ssl
#########################
Cleanup
: httpd
#########################
Cleanup
: httpd-manual
#########################

03:14
02:40

[1/6]
[2/6]
[3/6]
[4/6]
[5/6]
[6/6]

Updated: httpd.i386 0:2.2.2-1.2


Dependency Updated: httpd-manual.i386 0:2.2.2-1.2 mod_ssl.i386 1:2.2.2-1.2
Complete!

<RXOOVHHORWVRILQWHUHVWLQJPHVVDJHVIODVKE\ZHKDYHQWVKRZQWKHPDOOKHUH,IDOO
JRHVZHOO\RXVKRXOGVHHWKHUHDVVXULQJCompleteVWDWXVPHVVDJHDWWKHHQG,IWKHODWHVW
YHUVLRQRIDSDFNDJHLVDOUHDG\LQVWDOOHGyumZLOOWHOO\RXWKDWLWCouldnotfindupdate
match for WKDW SDFNDJH 7R OHDUQ PRUH DERXW )HGRUD DQG FRQILJXULQJ yum YLVLW WKH
8QRIILFLDO)HGRUD)$4SDJH KWWSZZZIHGRUDIDTRUJ 
<RXFDQDOVRGRZQORDG5HG+DWRU)HGRUD530VDQGLQVWDOODQGXSJUDGHWKHPPDQ
XDOO\MXVWDV\RXZRXOGWKH0\64/$%RQHV)RUH[DPSOH\RXFDQYLVLWWKHZHEVLWH
KWWSUSPSERQHQHWDQGVHDUFKIRUmysqlSLFNDQGGRZQORDGWKH530IRU5HG+DWRU
)HGRUD ZLWK WKH KLJKHVW YHUVLRQ QXPEHU 2QFH \RXYH GRZQORDGHG WKH ILOHV ORJ LQ
XQGHUWKHURRWDFFRXQWE\W\SLQJsu -DQGWKHQLQVWDOOWKH530SDFNDJHVE\W\SLQJLQ
WKLVFRPPDQG DOORQRQHOLQH 
# rpm --upgrade --verbose --hash \
mysql-server-5.0.22-2.1.i386.rpm \
mysql-5.0.22-2.1.i386.rpm \
httpd-2.2.2-7.i386.rpm \
php-5.1.4-8.1.i386.rpm

Installation on Mandriva
0DQGULYDIRUPHUO\NQRZQDV0DQGUDNHLVYHU\HDV\WRXVHIRUWKLVERRN ZHXVHLW
RXUVHOYHV 0\64/$SDFKH3+3DQG3HUODOOFRPHRQWKHGLVWULEXWLRQ&'V
,I\RXUHLQVWDOOLQJ0DQGULYDIURPVFUDWFKFKRRVHWKH([SHUWLQVWDOODWLRQRSWLRQDQG
VHOHFWWKH0\64/VHUYHUDQGFOLHQWSDFNDJHV
,I\RXDOUHDG\KDYHDUXQQLQJ0DQGULYDLQVWDOODWLRQ\RXFDQFKHFNZKHWKHU$SDFKH
3+3DQG0\64/DUHDOUHDG\LQVWDOOHGE\W\SLQJ
$ rpm --query --whatprovides mysql mysql-client apache php php-mysql
MySQL-5.0.23-1mdv2007.0
MySQL-client-5.0.23-1mdv2007.0
apache-mpm-prefork-2.2.3-1mdv2007.0
apache-mod_php-5.1.4-1mdk

Installing Under Linux | 35

)LJXUH7KH0DQGULYDSDFNDJHPDQDJHPHQWSURJUDP
php-cli-5.1.4-6mdv2007.0
php-mysql-5.1.4-3mdv2007.0

,IDVLQWKLVH[DPSOHDOOWKHQHFHVVDU\SDFNDJHVDUHLQVWDOOHG\RXFDQVLPSO\VNLSWR
&RQILJXULQJD1HZO\,QVWDOOHG6HUYHUODWHULQWKLVFKDSWHU
,IWKHSDFNDJHVDUHQWSUHVHQW\RXOOVHHPHVVDJHVOLNHWKLV
no package provides php

DQG\RXOOQHHGWRLQVWDOODQ\PLVVLQJSDFNDJHV
7KHHDVLHVWZD\WRLQVWDOOLVWRORJLQXQGHUWKHURRWDFFRXQW E\W\SLQJsu - DQGW\SH
# rpmdrake

7KLV ZLOO ODXQFK WKH SDFNDJHPDQDJHPHQW SURJUDP VKRZQ LQ )LJXUH   3ODFH D
FKHFNPDUNQH[WWRWKHHQWULHVIRUWKH0\64/VHUYHUDQGFOLHQWDQGFOLFNRQWKH,QVWDOO
EXWWRQ<RXOOEHSURPSWHGWRLQVHUWWKH0DQGULYDLQVWDOODWLRQ&'VDQGWKHVHOHFWHG
SDFNDJHVZLOOEHFRSLHGDQGLQVWDOOHG
,I \RX SUHIHU WR XVH WKH FRPPDQG OLQH \RX FDQ XVH WKH urpmi FRPPDQG WR VSHFLI\
SDFNDJHVWRLQVWDOO7KLVZLOOSURPSW\RXWRLQVHUWWKHDSSURSULDWHLQVWDOODWLRQ&'V
36 | Chapter 2:Installing MySQL

DQGZLOOLQVWDOOWKHSDFNDJHV<RXPD\EHSURPSWHGWRLQVWDOORWKHUUHODWHGSDFNDJHV
GHSHQGLQJRQZKDWVDOUHDG\DYDLODEOHRQ\RXUV\VWHPEXWLQPRVWFDVHVLWVKRXOGEH
SDLQOHVV
,I\RXKDYHDIDVW,QWHUQHWFRQQHFWLRQ\RXFDQDOVRFRQILJXUHurpmiWRGRZQORDGDQG
LQVWDOOWKHYHU\ODWHVWSDFNDJHVIURPWKH,QWHUQHW7KLVLVYHU\FRQYHQLHQWEHFDXVH\RX
GRQWKDYHWRVSHQGWLPHGLJJLQJXS\RXULQVWDOODWLRQ&'V0RUHLPSRUWDQWO\WKHODWHVW
YHUVLRQRIDSDFNDJHJHQHUDOO\KDVSDWFKHVIRUNQRZQEXJVDQGVHFXULW\YXOQHUDELOLWLHV
7RVHWXS,QWHUQHWGRZQORDGV\RXOOILUVWQHHGWRWHOOurpmiZKHUHWRILQGWKHSDFNDJHV
7KHHDVLHVWZD\WRGRWKLVLVWRJRWRKWWSHDV\XUSPL]DUERUJWKLVVLWHZLOODVN\RXD
IHZTXHVWLRQVDQGWKHQSURYLGH\RXDOLVWRIFRPPDQGV\RXQHHGWRW\SHLQDVWKHV\VWHP
URRWXVHUWRFRQILJXUHWKHVRXUFHV )LJXUHVKRZVKRZWKLVVLWHORRNV )URPWLPHWR
WLPH\RXVKRXOGXSGDWHWKH urpmiLQGH[HVE\ORJJLQJLQDVWKHV\VWHPURRWXVHUDQG
W\SLQJ
# urpmi.update -a

:KLFKHYHU DSSURDFK&'V RU WKH ,QWHUQHW\RX XVH \RX MXVW QHHG WR W\SH urpmi
package_nameDVWKHURRWXVHUWRIHWFKDQGLQVWDOOWKHUHTXLUHGSDFNDJHV
$ urpmi mysql mysql-client apache php php-mysql
One of the following packages is needed:
1- MySQL-5.0.23-1mdv2007.0.i586 : MySQL: a very fast and reliable SQL database
engine (to install)
2- MySQL-Max-5.0.23-1mdv2007.0.i586 : MySQL - server with extended functionality
(to install)
3- MySQL-NDB-4.1.12-4.3.20060mdk.i586 : MySQL - server with Berkeley DB, Innodb
and NDB Cluster support (to install)
What is your choice? (1-3) 1
To satisfy dependencies, the following packages are going to be installed:
MySQL-5.0.23-1mdv2007.0.i586
MySQL-client-5.0.23-1mdv2007.0.i586
MySQL-common-5.0.23-1mdv2007.0.i586
apache-mod_php-5.1.4-2mdv2007.0.i586
libmysql15-5.0.23-1mdv2007.0.i586
perl-DBD-mysql-3.0006-1mdv2007.0.i586
php-mysql-5.1.4-3mdv2007.0.i586
Proceed with the installation of the 7 packages? (39 MB) (Y/n) Y
ftp://somehost.net/somedir/libmysql15-5.0.23-1mdv2007.0.i586.rpm
ftp://somehost.net/somedir/perl-DBD-mysql-3.0006-1mdv2007.0.i586.rpm
ftp://somehost.net/somedir/MySQL-common-5.0.23-1mdv2007.0.i586.rpm
ftp://somehost.net/somedir/MySQL-client-5.0.23-1mdv2007.0.i586.rpm
ftp://somehost.net/somedir/MySQL-5.0.23-1mdv2007.0.i586.rpm
ftp://somehost.net/somedir/apache-mod_php-5.1.4-2mdv2007.0.i586.rpm
installing
libmysql15-5.0.23-1mdv2007.0.i586.rpm
MySQL-client-5.0.23-1mdv2007.0.i586.rpm
MySQL-common-5.0.23-1mdv2007.0.i586.rpm
perl-DBD-mysql-3.0006-1mdv2007.0.i586.rpm
MySQL-5.0.23-1mdv2007.0.i586.rpm
apache-mod_php-5.1.4-2mdv2007.0.i586.rpm

Installing Under Linux | 37

)LJXUH7KHHDV\8530,FRQILJXUDWLRQSDJH
php-mysql-5.1.4-3mdv2007.0.i586.rpm
from /var/cache/urpmi/rpms
Preparing...
######...######
1/7: libmysql15
######...######
2/7: MySQL-client
######...######
3/7: perl-DBD-mysql
######...######

38 | Chapter 2:Installing MySQL

4/7: MySQL-common
######...######
5/7: MySQL
######...######
6/7: apache-mod_php
######...######
7/7: php-mysql
######...######
---------------------------------------------------------------------More information on package MySQL-5.0.23-1mdv2007.0.i586
The initscript used to start mysql has been reverted to use the one shipped by
MySQL AB. This means the following changes:
* The MYSQLD_OPTIONS="--skip-networking" option in the /etc/sysconfig/mysqld
file has been removed, this is now set in the /etc/my.cnf file.
* The MySQL Instance Manager is used by default, set use_mysqld_safe="1" in
the /etc/sysconfig/mysqld file to use the old mysqld_safe script.
The extra MySQL-NDB server package has been merged into the MySQL-Max package
and ndb related pieces has been split into different sub packages as done by
MySQL AB. The MySQL libraries and the MySQL-common sub package uses the
MySQL-Max build so that no functionality required by for example the NDB parts
are lost.
The MySQL-common package now ships with a default /etc/my.cnf file that is
based on the my-medium.cnf file that comes with the source code. The
/etc/my.cnf file is constructed at build time of this package.
To connect to the Instance Manager you need to pass the correct command line
options like in the following examples:
* mysql -u root --password=my_password --port=2273 --protocol=TCP
* mysql -u root --password=my_password
--socket=/var/lib/mysql/mysqlmanager.sock
Please note you also need to add a user in the /etc/mysqlmanager.passwd file
and make sure the file is owned by the user under which the Instance Manager
service is running under.
----------------------------------------------------------------------

+HUH urpmi KDV GRZQORDGHG WKH ODWHVW YHUVLRQV RI WKH SURJUDPV IURP WKH ,QWHUQHW
'XULQJLQVWDOODWLRQVRPHSDFNDJHVGLVSOD\PHVVDJHVWKDW\RXVKRXOGUHDGLQRXUH[
DPSOHWKH0\64/SDFNDJHLQVWDOODWLRQURXWLQHKDVGHVFULEHGKRZWKHFRQILJXUDWLRQ
KDVFKDQJHGVLQFHROGHUYHUVLRQV
<RX FDQ DOVR GRZQORDG DQG LQVWDOO RU XSJUDGH WKH 0DQGULYD 530V ZLWKRXW XVLQJ
urpmi)RUH[DPSOH\RXFDQYLVLWKWWSUSPSERQHQHWDQGVHDUFKIRU mysqlSLFNDQG
GRZQORDG WKH 530V IRU 0DQGULYD ZLWK WKH KLJKHVW YHUVLRQ QXPEHU 2QFH \RXYH
GRZQORDGHGWKHILOHVORJLQDVWKHURRWXVHUE\W\SLQJsu -DQGWKHQLQVWDOOWKH530
SDFNDJHVE\UXQQLQJWKLVFRPPDQG DOORQRQHOLQH 
# rpm --upgrade --verbose --hash \
MySQL-5.0.23-1mdv2007.0.i586.rpm \
MySQL-client-5.0.23-1mdv2007.0.i586.rpm \

Installing Under Linux | 39

MySQL-common-5.0.23-1mdv2007.0.i586.rpm \
apache-mod_php-5.1.4-2mdv2007.0.i586.rpm \
libmysql15-5.0.23-1mdv2007.0.i586.rpm \
perl-DBD-mysql-3.0006-1mdv2007.0.i586.rpm \
php-mysql-5.1.4-3mdv2007.0.i586.rpm

Installing under Debian-based systems


'HELDQ/LQX[DQGLWVGHULYDWLYHVXVH'HELDQGHESDFNDJHVUDWKHUWKDQ530V7KH
SRSXODU8EXQWXDQG.QRSSL[GLVWULEXWLRQVDUHEDVHGRQ'HELDQ
7RFKHFNZKHWKHU$SDFKH3+3DQG0\64/DUHDOUHDG\LQVWDOOHGRQD'HELDQEDVHG
/LQX[V\VWHPXVHWKHdpkg--listFRPPDQG,IDQ\SDFNDJHVDUHQWSUHVHQWWKHdpkg
SURJUDPZLOOOHW\RXNQRZ
$ dpkg --list mysql-common mysql-server mysql-client apache2 php5
No packages found matching mysql-client.
No packages found matching apache2.
No packages found matching php5.
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name
Version
Description
+++-============-===============-====================================================
ii mysql-common 5.0.21-3ubuntu1 mysql database common files (e.g. /etc/mysql/my.cnf)
un mysql-server <none>
(no description available)

2QVRPHROGHUGLVWULEXWLRQV\RXPD\QHHGWRVSHFLI\php4UDWKHUWKDQphp5
7RLQVWDOO0\64/$SDFKHDQG3+3\RXPXVWILUVWORJLQDVWKHURRWXVHUE\W\SLQJ
su -DQGWKHQXVHWKHapt-get installFRPPDQG
# apt-get --verbose-versions install mysql-common mysql-server mysql-client apache2 php5
Reading package lists... Done
Building dependency tree... Done
mysql-common is already the newest version.
The following extra packages will be installed:
apache2-common (2.0.55-4ubuntu2)
apache2-mpm-prefork (2.0.55-4ubuntu2)
apache2-utils (2.0.55-4ubuntu2)
libapache2-mod-php5 (5.1.2-1ubuntu3)
libapr0 (2.0.55-4ubuntu2)
libdbd-mysql-perl (3.0002-2build1)
libdbi-perl (1.50-1)
libnet-daemon-perl (0.38-1)
libplrpc-perl (0.2017-1)
mysql-client-5.0 (5.0.21-3ubuntu1)
mysql-server-5.0 (5.0.21-3ubuntu1)
php5-common (5.1.2-1ubuntu3)
ssl-cert (1.0.13)
Suggested packages:
apache2-doc (2.0.55-4ubuntu2)
lynx (2.8.5-2ubuntu1)
www-browser ()
php-pear (5.1.2-1ubuntu3)

40 | Chapter 2:Installing MySQL

dbishell ()
libcompress-zlib-perl (1.41-1)
Recommended packages:
mailx (8.1.2-0.20050715cvs-1ubuntu1)
The following NEW packages will be installed:
apache2 (2.0.55-4ubuntu2)
apache2-common (2.0.55-4ubuntu2)
apache2-mpm-prefork (2.0.55-4ubuntu2)
apache2-utils (2.0.55-4ubuntu2)
libapache2-mod-php5 (5.1.2-1ubuntu3)
libapr0 (2.0.55-4ubuntu2)
libdbd-mysql-perl (3.0002-2build1)
libdbi-perl (1.50-1)
libnet-daemon-perl (0.38-1)
libplrpc-perl (0.2017-1)
mysql-client (5.0.21-3ubuntu1)
mysql-client-5.0 (5.0.21-3ubuntu1)
mysql-server (5.0.21-3ubuntu1)
mysql-server-5.0 (5.0.21-3ubuntu1)
php5 (5.1.2-1ubuntu3)
php5-common (5.1.2-1ubuntu3)
ssl-cert (1.0.13)
0 upgraded, 17 newly installed, 0 to remove and 0 not upgraded.
Need to get 31.9MB/32.2MB of archives.
After unpacking 75.8MB of additional disk space will be used.
Do you want to continue [Y/n]? Y
...

7KH --verbose-versionsRSWLRQGLVSOD\VGHWDLOHGLQIRUPDWLRQRQWKHSDFNDJHV2QFH
\RXSUHVVWKH YNH\WKHUHTXLUHGSDFNDJHVZLOOEHDXWRPDWLFDOO\GRZQORDGHGDQGLQ
VWDOOHG:HYHOHIWRXWPRVWRIWKHGLVSOD\HGPHVVDJHVWRVDYHVSDFH
<RX FDQ DOVR GRZQORDG DQG LQVWDOO RU XSJUDGH WKH 'HELDQ SDFNDJHV ZLWKRXW XVLQJ
apt-get IRU H[DPSOH \RX FDQ YLVLWWKHZHESDJH KWWSZZZGHELDQRUJGLVWULESDFN

DJHVVHOHFW\RXUGLVWULEXWLRQDQGVHDUFKIRUP\VTO3LFNDQGGRZQORDGWKHSDFNDJH
ZLWKWKHKLJKHVWYHUVLRQQXPEHUIRU\RXUGLVWULEXWLRQ2QFH\RXYHGRZQORDGHGWKH
ILOHVORJLQDVWKHURRWXVHUE\W\SLQJsu -DQGWKHQLQVWDOOWKHSDFNDJHVE\XVLQJWKH
dpkg --installFRPPDQGIRUH[DPSOH
# dpkg --install \
mysql-common_5.0.22-4_all.deb \
mysql-server_5.0.22-4_all.deb \
mysql-client-5.0_5.0.22-4_i386.deb \
libmysqlclient15off_5.0.22-4_i386.deb

+RZHYHULWVTXLWHOLNHO\WKDW\RXOOQHHGWRGRZQORDGRWKHUDVVRFLDWHGSDFNDJHVEHIRUH
WKHLQVWDOODWLRQFDQSURFHHGDQGZHUHFRPPHQGWKDW\RXXVHWKHapt-getDSSURDFKWR
DXWRPDWHWKHSURFHVV$VZHPHQWLRQHGHDUOLHULQ,QVWDOOLQJ8QGHU/LQX[\RXFDQ
DOVRGRZQORDGSDFNDJHVLQWKHGHEIRUPDWIURPWKH0\64/$%GRZQORDGVSDJH

Installing Under Linux | 41

Uninstalling MySQL
<RX FDQ JHQHUDOO\ LQVWDOO D QHZHU VRIWZDUH SDFNDJH RYHU DQ ROGHU RQH E\ XVLQJ WKH
rpm --upgradeurpmiyum updateRUapt-get installFRPPDQGVGHVFULEHGHDUOLHU,I
\RXDFWXDOO\ZDQWWRUHPRYHDSDFNDJHDOWRJHWKHUUDWKHUWKDQXSJUDGLQJLW\RXVKRXOG
ILUVWW\SH su -WRORJLQDVWKHURRWXVHUDQGWKHQH[HFXWHWKHDSSURSULDWHXQLQVWDOO
FRPPDQGV
1RWHWKDWWKHGDWDGLUHFWRU\WKDWFRQWDLQV\RXUGDWDEDVHILOHVLVQRWDFWXDOO\LQVWDOOHG
EXWFUHDWHGDIWHULQVWDOODWLRQ7KLVLVW\SLFDOO\WKHGLUHFWRU\GDWDXQGHUWKH0\64/EDVH
GLUHFWRU\RUYDUOLEP\VTOIRUD/LQX[GLVWULEXWLRQSDFNDJHLQVWDOODWLRQ8QLQVWDOOLQJ
0\64/SDFNDJHVGRHVQRWGHOHWHWKLVGLUHFWRU\VRWKHILOHVFRQWDLQLQJ\RXUGDWDVKRXOG
UHPDLQLQSODFHXQFKDQJHG
)RU DQ 530EDVHG V\VWHP VXFK DV 5HG +DW )HGRUD RU 0DQGULYD XVH WKH
rpm --eraseFRPPDQGWRXQLQVWDOOVSHFLILFSDFNDJHV,I\RXUHXQVXUHZKDWWKHH[DFW
SDFNDJHQDPHVDUH\RXFDQXVHWKHrpm --query --allFRPPDQGWROLVWDOOWKHLQVWDOOHG
530SDFNDJHVWRJHWKHUZLWKWKH grep --ignore-caseFRPPDQGWRVKRZRQO\WKRVH

ZLWKP\VTO LQXSSHUFDVHRUORZHUFDVHOHWWHUV LQWKHLUQDPH


$ rpm --query --all | grep --ignore-case mysql
perl-DBD-mysql-3.0004-1mdv2007.0
MySQL-5.0.23-1mdv2007.0
libmysql15-5.0.23-1mdv2007.0
MySQL-client-5.0.23-1mdv2007.0
php-mysql-5.1.4-3mdv2007.0
MySQL-common-5.0.23-1mdv2007.0

1RWHWKDWWKHUSPILOHH[WHQVLRQLVQRWFRQVLGHUHGWREHSDUWRIWKHSDFNDJHQDPH7R
XQLQVWDOO530SDFNDJHV\RXXVHWKH rpmFRPPDQGZLWKWKH --eraseRSWLRQDQGOLVW
WKHSDFNDJHVWRUHPRYH)RUH[DPSOH\RXGW\SH DOORQRQHOLQH 
# rpm --erase \
perl-DBD-mysql-3.0004-1mdv2007.0 \
MySQL-5.0.23-1mdv2007.0 \
libmysql15-5.0.23-1mdv2007.0 \
MySQL-client-5.0.23-1mdv2007.0 \
php-mysql-5.1.4-3mdv2007.0 \
MySQL-common-5.0.23-1mdv2007.0

<RXFDQTXHU\DQGUHPRYHWKHSDFNDJHVLQRQHJRE\XVLQJWKHxargsFRPPDQG
# rpm --query --all | grep --ignore-case mysql | xargs rpm --erase
warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave
#

2QD5HG+DWRU)HGRUDV\VWHPZLWKyum\RXFDQDOVRXVHWKHyum removeFRPPDQG
# yum remove mysql
[root@saiedpc yum.repos.d]# yum remove mysql
...
Dependencies Resolved

42 | Chapter 2:Installing MySQL

=============================================================================
Package
Arch
Version
Repository
Size
=============================================================================
Removing:
mysql
i386
5.0.22-1.FC5.1 installed
5.5 M
Removing for dependencies:
MySQL-python
i386
1.2.0-3.2.2
installed
2.3 M
libdbi-dbd-mysql
i386
0.8.1a-1.2.1
installed
37 k
mysql-connector-odbc
i386
3.51.12-1.2.1
installed
387 k
mysql-server
i386
5.0.22-1.FC5.1 installed
22 M
perl-Class-DBI-mysql
noarch
1.00-1.fc5
installed
38 k
perl-DBD-MySQL
i386
3.0004-1.FC5
installed
324 k
php-mysql
i386
5.1.4-1
installed
176 k
Transaction Summary
=============================================================================
Install
0 Package(s)
Update
0 Package(s)
Remove
8 Package(s)
Is this ok [y/N]: y
Downloading Packages:
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Removing : mysql-connector-odbc
######...###### [1/8]
Removing : perl-Class-DBI-mysql
######...###### [2/8]
Removing : perl-DBD-MySQL
######...###### [3/8]
Removing : php-mysql
######...###### [4/8]
Removing : mysql
######...###### [5/8]
Removing : libdbi-dbd-mysql
######...###### [6/8]
Removing : MySQL-python
######...###### [7/8]
warning: /var/log/mysqld.log saved as /var/log/mysqld.log.rpmsave
Removing : mysql-server
######...###### [8/8]
Removed: mysql.i386 0:5.0.22-1.FC5.1
Dependency Removed:
MySQL-python.i386 0:1.2.0-3.2.2
libdbi-dbd-mysql.i386 0:0.8.1a-1.2.1
mysql-connector-odbc.i386 0:3.51.12-1.2.1
mysql-server.i386 0:5.0.22-1.FC5.1
perl-Class-DBI-mysql.noarch 0:1.00-1.fc5
perl-DBD-MySQL.i386 0:3.0004-1.FC5
php-mysql.i386 0:5.1.4-1
Complete!

)RU'HELDQEDVHGV\VWHPV\RXFDQXQLQVWDOOWKH0\64/VHUYHUDQGFOLHQWE\XVLQJWKH
apt-get removeFRPPDQG
# apt-get remove mysql-server mysql-client
Reading package lists... Done
Building dependency tree... Done
The following packages will be REMOVED:
mysql-client mysql-server
0 upgraded, 0 newly installed, 2 to remove and 1 not upgraded.
Need to get 0B of archives.

Installing Under Linux | 43

After unpacking 31.3MB disk space will be freed.


Do you want to continue [Y/n]? Y
(Reading database ... 103699 files and directories currently installed.)
Removing mysql-client ...
Removing mysql-server ...

,I\RXUHXQVXUHZKDWWRXVHIRUWKHSDFNDJHQDPHV\RXFDQVHDUFKIRUSDFNDJHVDVVR
FLDWHGZLWK0\64/XVLQJWKHIROORZLQJFRPPDQG
# dpkg --search "*mysql*" | cut --fields=1 --delimiter=":" | sort --unique

Installing MySQL, Apache, PHP, and Perl on Linux Using the XAMPP
Integrated Package
7RLQVWDOO;$033RQ\RXU/LQX[V\VWHPILUVWYLVLWWKH;$033KRPHSDJH KWWSZZZ
DSDFKHIULHQGVRUJHQ[DPSSKWPO IROORZWKHOLQNWR;$033IRU/LQX[DQGGRZQORDG
WKHJ]LSSHGWDUSDFNDJH6ZLWFKWRWKHVXSHUXVHUDFFRXQW
$ su -

DQGFUHDWHWKHGLUHFWRU\RSW
# mkdir --parents /opt

:HUHXVLQJWKH --parentsRSWLRQKHUHWRWHOO/LQX[QRWWRFRPSODLQLIWKHGLUHFWRU\
DOUHDG\H[LVWV
1RZFKDQJHWRWKLVGLUHFWRU\DQGH[WUDFWWKHILOHVIURPWKHSDFNDJH
# cd /opt
# tar --gunzip --extract --file ~adam/xampp-linux-1.5.3a.tar.gz

+HUHZHYHDVVXPHGWKDWWKHGRZQORDGHGILOHLVLQadamVKRPHGLUHFWRU\ ~adam XVH


WKHDSSURSULDWHORFDWLRQRQ\RXUV\VWHP
<RXFDQQRZVWDUW;$033E\W\SLQJ
# /opt/lampp/lampp start
Starting XAMPP for Linux 1.5.3a...
XAMPP: Starting Apache with SSL (and PHP5)...
XAMPP: Starting MySQL...
XAMPP: Starting ProFTPD...
XAMPP for Linux started.

,IWKHUHLVDOUHDG\DUXQQLQJ0\64/RU$SDFKHVHUYHUUXQQLQJRQ\RXUV\VWHP;$033
PD\FRPSODLQGXULQJVWDUWXS,IWKLVKDSSHQVVKXWWKHVHGRZQEHIRUHWU\LQJWRVWDUW
;$033DJDLQ6WRSDQ\H[LVWLQJ0\64/RU$SDFKHVHUYHUEHIRUHVWDUWLQJ;$033
1RZWKDWWKHVHUYHUVUXQQLQJWLJKWHQXSWKHVHFXULW\VHWWLQJVE\W\SLQJ
# /opt/lampp/lampp security
XAMPP: Quick security check...
XAMPP: Your XAMPP pages are NOT secured by a password.
XAMPP: Do you want to set a password? [yes] n
XAMPP: MySQL is accessible via network.

44 | Chapter 2:Installing MySQL

XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:
XAMPP:

Normally that's not recommended. Do you want me to turn it off? [yes] y


Turned off.
Stopping MySQL...
Starting MySQL...
The MySQL/phpMyAdmin user pma has no password set!!!
Do you want to set a password? [yes] y
Password:
Password (again):
Setting new MySQL pma password.
Setting phpMyAdmin's pma password to the new one.
MySQL has no root password set!!!
Do you want to set a password? [yes] y
Write the password somewhere down to make sure you won't forget it!!!
Password:
Password (again):
Setting new MySQL root password.
Change phpMyAdmin's authentication method.
The FTP password is still set to 'lampp'.
Do you want to change the password? [yes] y
Password:
Password (again):
Reload ProFTPD...
Done.

7KLVZLOODOORZ\RXWRVHWDSDVVZRUGIRUWKH0\64/VHUYHUDQGDOVRWRFRQILJXUHWKH
VHUYHUIRULPSURYHGVHFXULW\
7KH;$033LQVWDOODWLRQPD\KDYH3+3FRQILJXUHGZLWKWKHregister_globalsVHWWLQJ
WXUQHGRQ<RXVKRXOGGLVDEOHWKLVROGLQVHFXUHIHDWXUH2SHQWKHILOHRSWODPSSHWF
SKSLQLDQGORRNIRUWKHOLQHregister_globals = On&KDQJHWKHYDOXHOnWROffVDYH
WKHILOHDQGTXLWWKHHGLWRU7KHQHZVHWWLQJZLOOEHLQHIIHFWDIWHU\RXUHVWDUW\RXU
$SDFKHVHUYHU
<RXFDQVWRS\RXU;$033VHUYHUVE\W\SLQJ
# /opt/lampp/lampp stop
Stopping XAMPP for Linux 1.5.3a...
XAMPP: Stopping Apache with SSL...
XAMPP: Stopping MySQL...
XAMPP: Stopping ProFTPD...
XAMPP stopped.

7KH 0\64/ GDWD GLUHFWRU\ LV RSWODPSSYDUP\VTO WKH ILOHV DUH RZQHG E\ WKH XVHU
nobodyDQGLQWKHrootJURXS*LYHQWKHQDWXUHRIWKH;$033LQVWDOODWLRQDVDGHYHO
RSPHQWSODWIRUPZHZRQWJRLQWRGHWDLOHGPRGLILFDWLRQRISHUPLVVLRQV

Configuring a Newly Installed Server


2QFH\RXYHLQVWDOOHGWKHVHUYHUWKHUHDUHVRPHVWHSV\RXVKRXOGWDNHWRLQLWLDOL]HWKH
GDWDEDVHWDEOHVDQGFRQILJXUHWKHVHUYHUIRUJRRGVHFXULW\2QHRIWKHILUVWWKLQJVWRGR
LVWRVHWDSDVVZRUGIRUWKHGDWDEDVH rootDFFRXQWWKLVLVQRWWKHVDPHDVWKHV\VWHP

Installing Under Linux | 45

rootDFFRXQWEXWLVVLPLODULQWKDWLWKDVDOOSULYLOHJHVRQWKH0\64/VHUYHU/HWVORRN

DWWKUHHVLWXDWLRQV
<RXYHLQVWDOOHGWKHVHUYHUXVLQJ530RU'HELDQSDFNDJHV
<RXYHLQVWDOOHGDV\VWHPZLGHVHUYHUXVLQJDWDUEDOORUE\FRPSLOLQJVRXUFHFRGH
<RXYHLQVWDOOHGDORFDOVHUYHUWRUXQXQGHU\RXURZQDFFRXQWXVLQJDWDUEDOORUE\
FRPSLOLQJVRXUFHFRGH
$VZHH[SODLQHGHDUOLHUWKH;$033SDFNDJHLVWLJKWO\LQWHJUDWHGDQGLVQRWGHVLJQHG
IRUHDV\PRGLILFDWLRQVRZHZRQWH[SORUHKRZWRFXVWRPL]HDQ;$033LQVWDOODWLRQ

Configuring a server installed using RPM or Debian packages


7KHSDFNDJHLQVWDOODWLRQSURFHVVJHQHUDOO\SODFHVWKH0\64/SURJUDPILOHVLQWKHXVU
ELQ GLUHFWRU\ WKH GDWDILOHV LQ WKH YDUOLEP\VTO GLUHFWRU\ DQG WKH VHUYHU ORJV LQ
WKHYDUORJP\VTOGGLUHFWRU\RUWKHYDUORJP\VTOGORJILOH
7KHLQVWDOODWLRQW\SLFDOO\FRQILJXUHVWKHILOHVDQGGLUHFWRULHVVHFXUHO\DQGDOVRFUHDWHV
WKHHWFLQLWGP\VTORUHWFLQLWGP\VTOG 0\64/GDHPRQ VWDUWXSVFULSWIRUHDV\FRQ
WURORIWKHVHUYHU
&KHFNZKDWWKLVVFULSWLVFDOOHGRQ\RXUV\VWHPXVLQJWKHlsFRPPDQG
$ ls /etc/init.d/mysql*
/etc/init.d/mysql

,QWKHSUHFHGLQJH[DPSOHWKHILOHLVFDOOHGmysql8VHWKHDSSURSULDWHQDPH mysqlRU
mysqld ZKHUH\RXVHHmysqlLQWKHFRPPDQGVEHORZ
7RVWDUWWKHVHUYHUUXQWKHIROORZLQJFRPPDQG
# /etc/init.d/mysql start

6HWDSDVVZRUGIRUWKHGDWDEDVHrootDFFRXQW
$ mysqladmin --user=root password the_new_mysql_root_password

<RXFDQVWRSWKHVHUYHUE\W\SLQJWKHFRPPDQG
# /etc/init.d/mysql stop

7KHSDFNDJHEDVHGLQVWDOODWLRQSURFHVVJHQHUDOO\VWDUWVWKH0\64/VHUYHUDQGFRQILJ
XUHV LW WR EH VWDUWHG DXWRPDWLFDOO\ HDFK WLPH WKH V\VWHP LV VWDUWHG ,Q &RQILJXULQJ
0\64/IRUDXWRPDWLFVWDUWODWHULQWKLVFKDSWHUZHH[SODLQKRZWRFKHFNDQGFRQ
ILJXUHDXWRPDWLFVWDUWXS

Configuring a system-wide server installed from tarball or source


)RUVHFXULW\UHDVRQVLWVDJRRGLGHDWRKDYHWKHV\VWHPZLGH0\64/VHUYHUUXQXQGHU
LWVRZQXVHUQDPHDQGJURXSUDWKHUWKDQWKHVXSHUXVHUDFFRXQW)LUVWORJLQDVWKHURRW
XVHUZLWKWKHsu -FRPPDQGDQGWKHQFUHDWHWKHmysqlXVHUJURXS
# groupadd mysql

46 | Chapter 2:Installing MySQL

DQGWKHmysqlXVHUDFFRXQWWKDWVLQWKHmysqlXVHUJURXS
# useradd --gid mysql mysql

,WVDOOULJKWLI\RXJHWDPHVVDJHWKDWWKHJURXSRUXVHUDOUHDG\H[LVWV
1RZOHWVFRQILJXUHWKH0\64/ILOHVDQGGLUHFWRULHV&KDQJHWRWKHGLUHFWRU\ZKHUH
\RXLQVWDOOHG0\64/KHUHZHOODVVXPHWKDW0\64/LVLQVWDOOHGLQWKHGLUHFWRU\XVU
ORFDOP\VTO
# cd /usr/local/mysql

7R FUHDWH WKH GDWD GLUHFWRU\ DQG LQLWLDOL]H WKH GDWDEDVH IRU WKH XVHU mysql UXQ WKH
mysql_install_dbVFULSWIURPWKHVFULSWVGLUHFWRU\XQGHUWKH0\64/GLUHFWRU\
# scripts/mysql_install_db --user=mysql

<RXVKRXOGQRZFKDQJHWKHILOHVLQWKH0\64/GLUHFWRU\WREHRZQHGE\rootEXWEH
LQWKHmysqlJURXS
# chown --recursive root:mysql .

$QGFKDQJHWKHGDWDEDVHILOHVLQWKHGDWDGLUHFWRU\WREHEHRZQHGE\WKH mysqlXVHU
DQGJURXS
# chown --recursive mysql:mysql data

:HGHVFULEHGWKLVXVHRIWKHchownFRPPDQGLQ5HVWULFWLQJDFFHVVWRILOHVDQGGLUHF
WRULHVHDUOLHULQWKLVFKDSWHU
<RXFDQQRZVWDUWWKHVHUYHUWRUXQXQGHUWKH mysqlV\VWHPDFFRXQWE\UXQQLQJWKH
mysqld_safeSURJUDPIURPWKH0\64/binGLUHFWRU\
# bin/mysqld_safe --user=mysql &

7KHDPSHUVDQG FKDUDFWHUWHOOV/LQX[WRUXQWKHVHUYHULQWKHEDFNJURXQGVRWKDW
\RXFDQXVHWKHVKHOOWRGRRWKHUWKLQJV,I\RXGRQWDGGWKHDPSHUVDQGDWWKHHQG
\RXZRQWVHHWKHVKHOOSURPSWDJDLQXQWLOWKH0\64/VHUYHULVVWRSSHGIURPDQRWKHU
VKHOOZLQGRZ
7KHQH[WWKLQJWRGRLVWRVHWDSDVVZRUGIRUWKHGDWDEDVHrootDFFRXQW
$ bin/mysqladmin --user=root password the_new_mysql_root_password

<RXFDQVWRSWKHVHUYHUE\UXQQLQJWKHFRPPDQG
$ bin/mysqladmin --user=root --password=the_mysql_root_password shutdown

1RWH WKDW WKH XVHU root RQ WKH /LQX[ V\VWHP LV GLIIHUHQW IURP WKH XVHU root RQ WKH
0\64/VHUYHUDQG\RXGRQWQHHGWREHORJJHGLQDVWKH/LQX[rootXVHUWRVKXWGRZQ
WKHVHUYHUZLWKmysqladmin
<RXFDQDOVRVWDUWDQGVWRSWKHVHUYHUXVLQJWKHP\VTOVHUYHUVFULSWWKDWFRPHVLQWKH
VXSSRUWILOHVGLUHFWRU\VWDUWWKHVHUYHUZLWK
$ support-files/mysql.server start

Installing Under Linux | 47

DQGVWRSWKHVHUYHUZLWK
$ support-files/mysql.server stop

<RX FDQ FRS\ WKH P\VTOVHUYHU VFULSW DQG SODFH LW DV WKH ILOH P\VTO LQ WKH HWFLQLWG
GLUHFWRU\
# cp support-files/mysql.server /etc/init.d/mysql

7KLVDOORZV\RXWRFRQWUROWKHVHUYHUE\W\SLQJ
# /etc/init.d/mysql start

DQG
# /etc/init.d/mysql stop

DVZLWKWKHSDFNDJHEDVHGLQVWDOODWLRQDSSURDFKHV,PSRUWDQWO\WKLVDOVRDOORZV\RX
WRFRQILJXUHWKHVHUYHUWRVWDUWRQHYHU\ERRWWKLVLVH[SODLQHGODWHULQ&RQILJXULQJ
0\64/IRUDXWRPDWLFVWDUW

Configuring a local server


:LWKDORFDOLQVWDOODWLRQWKH0\64/ILOHVZLOOEHSODFHGLQDGLUHFWRU\XQGHU\RXUKRPH
GLUHFWRU\DQGWKHVHUYHUZLOOUXQXQGHU\RXUXVHUQDPHUDWKHUWKDQmysql
)LUVWFKDQJHWRWKHGLUHFWRU\FRQWDLQLQJWKH0\64/LQVWDOODWLRQ,I\RXIROORZHGRXU
LQVWUXFWLRQV LQ ,QVWDOOLQJ 0\64/ RQ /LQX[ E\ &RPSLOLQJ WKH 6RXUFH &RGH IURP
0\64/$%\RXFDQW\SH
$ cd ~/mysql

7RFRQILJXUHWKHGDWDGLUHFWRU\DQGLQLWLDOL]HWKHGDWDEDVH\RXPXVWUXQWKHP\VTOBLQ
VWDOOBGEVFULSWIURPWKHVFULSWVGLUHFWRU\
$ scripts/mysql_install_db

,I\RXZDQWWRXVHDGDWDGLUHFWRU\WKDWVQRWXQGHUWKH0\64/LQVWDOODWLRQGLUHFWRU\
\RXFDQVSHFLI\WKHSDWKXVLQJWKHdatadirRSWLRQDVLQ
$ mysql_install_db datadir=/home/adam/MySQL_Data

+RZHYHUZHOODVVXPH\RXOOXVHWKHGHIDXOWGDWDGLUHFWRU\aP\VTOGDWD
1RZ\RXQHHGWRFKDQJHWKHILOHVLQWKH0\64/GLUHFWRU\WREHRZQHGE\\RXUXVHUQDPH
DQG\RXUJURXS)RUWKHXVHUQDPHDQGJURXSadam\RXZRXOGZULWH
$ chown --recursive adam:adam ~/mysql

$JDLQZHGHVFULEHGWKLVXVHRIWKHchownFRPPDQGHDUOLHULQ5HVWULFWLQJDFFHVVWRILOHV
DQGGLUHFWRULHV
%\GHIDXOW0\64/OLVWHQVIRULQFRPLQJFOLHQWFRQQHFWLRQVRQSRUWQXPEHULI
WKHUHVDOUHDG\DQRWKHUVHUYHUUXQQLQJRQWKHVDPHFRPSXWHU\RXVKRXOGFKRRVHD
GLIIHUHQWSRUWQXPEHUIRUWKLVLQVWDOODWLRQ,WVEHVWWRDYRLGXVLQJSRUWQXPEHUVWKDW

48 | Chapter 2:Installing MySQL

DUHW\SLFDOO\XVHGE\RWKHUFRPPRQSURJUDPV)RULQVWDQFHSRUWLVRIWHQXVHGE\
ZHEVHUYHUVDQGSUR[LHV$ZHEVHDUFKIRUFRPPRQSRUWVLVDJRRGZD\WROHDUQDERXW
WKHVH1RWHWKDWRQO\WKHURRWXVHUFDQDOORFDWHSRUWQXPEHUVEHORZ:HOOXVH
WKHSRUWQXPEHUIRURXUH[DPSOH
<RXDOVRQHHGWRVSHFLI\DFXVWRPORFDWLRQIRUWKHVRFNHWILOHWKLVLVDVSHFLDOW\SHRI
ILOHXVHGE\FOLHQWVWRFRQQHFWWRDVHUYHURQWKHVDPHPDFKLQH$FRPPRQFKRLFHIRU
DVRFNHWILOHORFDWLRQLVWKHVHUYHUGDWDGLUHFWRU\ZHOOXVHWKHILOHSDWKaP\VTOGDWD
P\VTOVRFNLQWKHIROORZLQJH[DPSOH
1RZVWDUWWKHVHUYHUXVLQJWKHQRQVWDQGDUGSRUWDQGVRFNHWILOH
$ bin/mysqld_safe --port=57777 --socket=~/mysql/data/mysql.sock &

1RWHWKDWLI\RXUHXVLQJDQRQVWDQGDUG0\64/LQVWDOODWLRQGLUHFWRU\DQGGRQWVWDUW
WKHVHUYHUIURPLQVLGHWKDWGLUHFWRU\\RXKDYHWRVSHFLI\WKHSDWKWRWKH mysqld_safe
SURJUDPDQGWHOOWKLVSURJUDPZKHUHWKHGDWDGLUHFWRU\LV)RUH[DPSOHWRUXQWKH
SURJUDP IURP WKH aP\VTOELQ GLUHFWRU\ ZLWK WKH GDWD GLUHFWRU\ aP\VTOGDWD \RX
ZRXOGW\SH DOORQRQHOLQH 
$ ~/mysql/bin/mysqld_safe \
--port=57777 \
--socket=~/mysql/data/mysql.sock \
--datadir=~/mysql/data &

1RZWKDWWKHVHUYHULVUXQQLQJVHWDSDVVZRUGIRUWKHGDWDEDVHURRWDFFRXQWE\W\SLQJ
$ bin/mysqladmin \
--port=57777 \
--socket=~/mysql/data/mysql.sock \
--user=root \
password the_new_mysql_root_password

2QFH\RXYHDGGHGDSDVVZRUGIRUWKHGDWDEDVHURRWXVHU\RXOOKDYHWRXVHLWIRUDOO
IXUWKHUFOLHQWFRQQHFWLRQVWRWKHVHUYHUIRUWKHURRWDFFRXQW
<RXFDQVWRSWKHVHUYHUXVLQJWKHmysqladmin shutdownFRPPDQGZLWKWKHQHFHVVDU\
RSWLRQVDGGHGWRLGHQWLI\WKHVHUYHU7\SHDOORQRQHOLQH
$ bin/mysqladmin \
--port=57777 \
--socket=~/mysql/data/mysql.sock \
--user=root \
--password=the_mysql_root_password \
shutdown

Configuring MySQL for automatic start


,I\RXUHSODQQLQJWRXVH0\64/DORW\RXOOSUREDEO\ZDQWWRKDYHWKHVHUYHUVWDUW
DXWRPDWLFDOO\HYHU\WLPH\RXUFRPSXWHULVVZLWFKHGRQ7KHW\SLFDOZD\WRGRWKLVLV
WRFDOODVFULSWWRVWDUWDQGVWRSWKH0\64/VHUYHUZKHQWKHFRPSXWHULVVWDUWHGDQG
VWRSSHG

Installing Under Linux | 49

,I\RXXVHGDQ530RU'HELDQSDFNDJHWRLQVWDOO0\64/WKLVVFULSWLVJHQHUDOO\DOUHDG\
LQVWDOOHGDVHWFLQLWGP\VTORUHWFLQLWGP\VTOG 0\64/GDHPRQ &KHFNZKDWWKLV
VFULSWLVFDOOHGRQ\RXUV\VWHPXVLQJWKHlsFRPPDQG
$ ls /etc/init.d/mysql*
/etc/init.d/mysql

,QWKHSUHFHGLQJH[DPSOHWKHILOHLVFDOOHGP\VTO8VHWKHDSSURSULDWHQDPH mysqlRU
mysqld ZKHUH\RXVHHmysqlLQWKHFRPPDQGVEHORZ
,I\RXLQVWDOOHGIURPDWDUEDOORUIURPVRXUFH\RXOOQHHGWRFRS\WKHILOHDFURVV\RXUVHOI
DVGLVFXVVHGLQWKHHDUOLHUVHFWLRQ&RQILJXULQJDV\VWHPZLGHVHUYHULQVWDOOHGIURP
WDUEDOORUVRXUFH
$/LQX[V\VWHPFDQVWDUWLQRQHRIVL[UXQOHYHOVDV\VWHPVWDUWLQJLQUXQOHYHOZLOO
W\SLFDOO\ ERRW VWUDLJKW LQWR WKH JUDSKLFDO ZLQGRZLQJ HQYLURQPHQW VXFK DV .'( RU
*120(ZKLOHDV\VWHPVWDUWLQJLQUXQOHYHOVRUZLOOHQGXSDWDWH[WEDVHGORJLQ
VFUHHQ7KHUHVDQHDV\ZD\WRFKHFNZKDWUXQOHYHO\RXUHLQMXVWXVHWKH runlevel
SURJUDPLQWKHVELQGLUHFWRU\
$ /sbin/runlevel
N 5

+HUHWKHV\VWHPLVLQUXQOHYHO
$SURJUDPLVVWDUWHGDXWRPDWLFDOO\IRUDSDUWLFXODUUXQOHYHOLIWKHUHVDVWDUWXSHQWU\IRU
LW LQ WKH FRUUHVSRQGLQJ HWFUFUXQOHYHO!G GLUHFWRU\ <RX FDQ OLVW DOO WKH HQWULHV IRU
0\64/E\W\SLQJ
$ ls /etc/rc*.d/*mysql*
/etc/rc0.d/K90mysql /etc/rc2.d/S11mysql /etc/rc4.d/S11mysql /etc/rc6.d/K90mysql
/etc/rc1.d/K90mysql /etc/rc3.d/S11mysql /etc/rc5.d/S11mysql

7KHHQWULHVVWDUWLQJZLWK6VWDUWWKHSURJUDPZKHQWKHV\VWHPLVERRWHGDQGWKH
HQWULHVVWDUWLQJZLWK.VWRS RUNLOO WKHSURJUDPZKHQWKHV\VWHPLVVKXWGRZQ+HUH
0\64/LVVHWWRVWDUWDQGVWRSDXWRPDWLFDOO\LQUXQOHYHOVDQG2Q5HG+DWRU
0DQGULYD V\VWHPV \RX FDQ PRUH FRQYHQLHQWO\ GHWHUPLQH WKLV XVLQJ WKH chkconfig
--listFRPPDQG
# chkconfig --list mysql
mysql
0:off
1:off

2:on

3:on

4:on

5:on

6:off

,I\RXUVHUYHUVKRZVRIIIRUWKHUXQOHYHOWKDW\RXIRXQGXVLQJWKHrunlevelFRPPDQG
WKH0\64/VHUYHULVQRWVWDUWHGDXWRPDWLFDOO\
,I\RXGRQWVHHDQHQWU\IRU\RXUSUHIHUUHGUXQOHYHO QRUPDOO\RU \RXOOQHHGWR
DGGRQH\RXUVHOI0RVW/LQX[GLVWULEXWLRQVKDYHDJUDSKLFDOWRROWRFRQILJXUHVWDUWXS
VHUYLFHV)RUH[DPSOHXQGHU5HG+DWDQG)HGRUD\RXFDQUXQWKH6HUYLFH&RQILJXUD
WLRQSURJUDPE\FKRRVLQJWKH6HUYLFHVHQWU\IURPWKH$GPLQLVWUDWLRQVXEPHQXRIWKH
6\VWHPPHQX\RXFDQDOVRUXQWKLVSURJUDPE\W\SLQJsystem-config-servicesDWWKH
FRPPDQGOLQH6LPLODUO\ZLWK0DQGULYD\RXFDQXVHWKH6HUYLFHVSURJUDPIURPWKH
0DQGULYD&RQWURO&HQWHU VHOHFW&RQILJXUH<RXU&RPSXWHUIURPWKH&RQILJXUDWLRQ
50 | Chapter 2:Installing MySQL

VXEPHQX RI WKH 6\VWHP PHQX  \RX FDQ DOVR UXQ WKLV SURJUDP E\ W\SLQJ
drakxservicesDWWKHFRPPDQGOLQH:HOOH[SODLQKRZWRFRQILJXUHVHUYLFHVZLWKRXW
XVLQJWKHVHJUDSKLFDOWRROV
2QD5HG+DWRU0DQGULYDV\VWHPW\SH
# chkconfig --level 35 mysql on

WRHQDEOHDXWRPDWLFVWDUWXSLQUXQOHYHOVDQG FRUUHVSRQGLQJWRQRUPDOFRQVROHRU
JUDSKLFDORSHUDWLRQUXQOHYHOV DQG
# chkconfig --level 35 mysql off

WRGLVDEOHLW
,QD'HELDQEDVHGV\VWHPVWDUWXSVHUYLFHVDUHFRQWUROOHGXVLQJWKHupdate-rc.dFRP
PDQG(QDEOH0\64/DVIROORZV
# update-rc.d mysql defaults
Adding system startup for /etc/init.d/mysql ...
/etc/rc0.d/K20mysql -> ../init.d/mysql
/etc/rc1.d/K20mysql -> ../init.d/mysql
/etc/rc6.d/K20mysql -> ../init.d/mysql
/etc/rc2.d/S20mysql -> ../init.d/mysql
/etc/rc3.d/S20mysql -> ../init.d/mysql
/etc/rc4.d/S20mysql -> ../init.d/mysql
/etc/rc5.d/S20mysql -> ../init.d/mysql

DQGGLVDEOHDXWRPDWLFVWDUWXSDVIROORZV
# update-rc.d -f mysql remove
update-rc.d: /etc/init.d/mysql exists during rc.d purge (continuing)
Removing any system startup links for /etc/init.d/mysql ...
/etc/rc0.d/K20mysql
/etc/rc1.d/K20mysql
/etc/rc2.d/S20mysql
/etc/rc3.d/S20mysql
/etc/rc4.d/S20mysql
/etc/rc5.d/S20mysql
/etc/rc6.d/K20mysql

,I\RXKDYHDVWDQGDORQH$SDFKHZHEVHUYHULQVWDOOHG\RXFDQHQDEOHDQGGLVDEOHLWV
DXWRPDWLF VWDUWXS E\ XVLQJ httpd RU apache2 LQVWHDG RI mysql LQ WKH SUHFHGLQJ
FRPPDQGV

Installing Under Windows


7KH0\64/LQVWDOODWLRQSURFHVVIRU:LQGRZVXVHVJUDSKLFDOLQVWDOODWLRQSURJUDPVDQG
LVUHODWLYHO\VWUDLJKWIRUZDUG<RXQHHGWRILUVWGHFLGHZKHWKHU\RXZDQWWRLQVWDOORQO\
0\64/RUZKHWKHU\RXGOLNHWRLQVWDOODQLQWHJUDWHGSDFNDJHLQFOXGLQJDGGLWLRQDO
VRIWZDUHWKDW\RXUHOLNHO\WRQHHGODWHU%RWKDSSURDFKHVDUHHTXDOO\HDV\WRIROORZ$W
YDULRXVSRLQWVGXULQJWKHLQVWDOODWLRQSURFHVV\RXPD\EHSURPSWHGWRDOORZWKHLQ
VWDOOHUSURJUDPWRUXQDQGPRGLI\\RXUV\VWHPLQFOXGLQJXQEORFNLQJVHUYHUSRUWV5HDG
Installing Under Windows | 51

WKHVHSURPSWVFDUHIXOO\LQPRVWFDVHV\RXOOZDQWWRDOORZWKHLQVWDOOHUWRGRZKDWLW
QHHGVWRGR5HPHPEHUWRIROORZWKHLQVWUXFWLRQVRI9HULI\LQJ3DFNDJH,QWHJULW\ZLWK
0'HDUOLHULQWKLVFKDSWHUWRYHULI\WKDW\RXUHUXQQLQJWKHFRUUHFWLQVWDOOHUSURJUDP
<RXQHHGWRXQEORFNSRUWVRQO\LI\RXZDQWWRDOORZFRQQHFWLRQVWR\RXUVHUYHUIURP
RWKHUKRVWV
,QWKLVVHFWLRQZHOOORRNDWWKUHHZD\VWRLQVWDOO0\64/RQD:LQGRZVV\VWHP
6\VWHPZLGHXVLQJDJUDSKLFDOLQVWDOODWLRQSDFNDJHSURYLGHGE\0\64/$%
/RFDOXVLQJDQRLQVWDOOSDFNDJHE\0\64/$%
6\VWHPZLGHXVLQJWKH;$033LQWHJUDWHGSDFNDJH
7RLQVWDOOV\VWHPZLGH\RXOOQHHGWRORJLQDVDXVHUZLWK:LQGRZVDGPLQLVWUDWRU
SULYLOHJHV7KH0\64/$%QRLQVWDOOSDFNDJHGRHVQRWQHHGWREHLQVWDOOHGXVLQJD
VHWXSSURJUDPDQGLVKDQG\IRUFDVHVZKHUH\RXGRQWKDYHDGPLQLVWUDWRUSULYLOHJHVRQ
WKHFRPSXWHU

Installing Only MySQL Using Packages from MySQL AB


)LUVW IROORZ WKH LQVWUXFWLRQV RI 'RZQORDGLQJ 0\64/ IURP WKH 0\64/ $% :HE
6LWH HDUOLHU LQ WKLV FKDSWHU DQG GRZQORDG WKH SDFNDJH \RX QHHG ,I \RX DUH XVLQJ
:LQGRZV;3DQGKDYHDGPLQLVWUDWRUSULYLOHJHVLWVHDVLHVWLI\RXGRZQORDGWKH:LQ
GRZV(VVHQWLDOV [ SDFNDJH7KLVLVVPDOODQGKDVDOOWKH0\64/SURJUDPV\RX
QHHG,I\RXGRQWKDYHDGPLQLVWUDWRUSULYLOHJHVRQ\RXU:LQGRZVPDFKLQHRU\RX
QHHG WR KDYH D FRPSOH[ VHUYHU VHWXS ZLWK QRQVWDQGDUG FRQILJXUDWLRQ \RX VKRXOG
GRZQORDGWKHSDFNDJHODEHOHG:LWKRXWLQVWDOOHU XQ]LSLQ&? :HOOGLVFXVVKRZ
WRLQVWDOOHDFKRIWKHVHSDFNDJHVLQWKHIROORZLQJVHFWLRQV

Windows installation using the installer


6WDUWWKHLQVWDOOHUSURJUDPDQGJRZLWKWKHGHIDXOW W\SLFDO VHWWLQJV7KLVZLOOLQVWDOO
0\64/LQWKH&?3URJUDP)LOHV?0\64/?0\64/6HUYHU?GLUHFWRU\9LVWDPD\DVN
\RXWRFRQILUPZKHWKHU\RXZDQWWRDOORZWKHLQVWDOOHUWRDFFHVV\RXUFRPSXWHUFOLFN
$OORZ
<RXPLJKWEHSURPSWHGWRVLJQXSIRUDP\VTOFRPDFFRXQW\RXFDQVNLSWKLVXQOHVV
\RXZDQWWRVXEVFULEHWR0\64/QHZVOHWWHUVDGGFRPPHQWVWRWKHRQOLQHPDQXDORU
ILOHEXJUHSRUWV
2QWKHILQDOVFUHHQRIWKHLQVWDOOHUSURJUDP\RXOOVHHWKH&RQILJXUHWKH0\64/6HUYHU
QRZRSWLRQVHOHFWHG:KHQ\RXFOLFNWKH)LQLVKEXWWRQWRH[LWWKHLQVWDOOHUWKH0\64/
6HUYHU,QVWDQFH&RQILJXUDWLRQ:L]DUGZLOOVWDUW)ROORZWKHSURPSWVDQGVHOHFW6WDQG
DUG&RQILJXUDWLRQWRJRZLWKWKHGHIDXOWVHWWLQJV
2QWKHQH[WVFUHHQVKRZQLQ)LJXUHVHOHFW,QVWDOODVD:LQGRZV6HUYLFH W\S
LFDOO\ DOUHDG\ VHOHFWHG E\ GHIDXOW  DQG ,QFOXGH %LQ 'LUHFWRU\ LQ :LQGRZV 3$7+
W\SLFDOO\QRWDOUHDG\VHOHFWHGE\GHIDXOW 
52 | Chapter 2:Installing MySQL

)LJXUH6SHFLI\LQJWKHVHUYHURSWLRQVGXULQJWKH:LQGRZVLQVWDOODWLRQ

6HOHFW D QHZ URRW XVHU SDVVZRUG WKHUH LVQW RQH E\ GHIDXOW  DQG WKHQ IROORZ WKH
SURPSWVXQWLOWKHLQVWDOODWLRQSURFHVVLVFRPSOHWHG8QOHVV\RXNQRZZKDW\RXUHGR
LQJGRQWVHOHFWWKHRSWLRQWRHQDEOHURRWDFFHVVIURPUHPRWHPDFKLQHV$OVRGRQW
VHOHFWWKHRSWLRQWRFUHDWHDQDQRQ\PRXVDFFRXQWZHOOGLVFXVVDQRQ\PRXVDFFRXQWV
DQGWKHVHFXULW\SUREOHPVDVVRFLDWHGZLWKWKHPLQ&KDSWHU
<RXPD\ILQGWKDWWKHLQVWDOODWLRQSURJUDPIDLOVWRFRQILJXUHWKHVHUYLFHXQGHU9LVWD
\RXOO VHH DQ HUURU PHVVDJH OLNH &RXOG QRW FRQQHFW WR WKH 6HUYLFH &RQWURO 0DQ
DJHU ,IWKLVKDSSHQVFOLFNWKH%DFNEXWWRQWZLFHWRUHWXUQWRWKHRSWLRQVGLDORJER[
DQGWKHQXQFKHFNWKH,QVWDOODVD:LQGRZV6HUYLFHFKHFNER[&RQWLQXHWKHLQVWDO
ODWLRQSURFHVVIURPWKLVSRLQW
<RXFDQUXQWKHFRQILJXUDWLRQSURJUDPDJDLQDWDQ\WLPHE\VHOHFWLQJWKH0\64/6HUYHU
,QVWDQFH&RQILJ:L]DUGHQWU\IURPWKH0\64/6HUYHUVHFWLRQRIWKH0\64/VXE
PHQXRIWKH:LQGRZV6WDUWPHQX

Starting and stopping MySQL as a service


,IWKHLQVWDOODWLRQSURFHVVVXFFHVVIXOO\FRQILJXUHV0\64/DVD:LQGRZVVHUYLFH\RX
FDQXVHWKH:LQGRZV6HUYLFHVZLQGRZDWDQ\WLPHWRFKHFNDQGFRQWUROWKHVHUYHU2Q
:LQGRZV;3VHOHFWWKH3HUIRUPDQFHDQG0DLQWHQDQFHHQWU\IURPWKH&RQWURO3DQHO
DQG WKHQ FKRRVH $GPLQLVWUDWLYH 7RROV ,I \RX KDYH &ODVVLF 9LHZ HQDEOHG \RX FDQ
FKRRVH$GPLQLVWUDWLYH7RROVGLUHFWO\IURPWKH&RQWURO3DQHO)LJXUHVKRZVWKH
:LQGRZV6HUYLFHVZLQGRZ
Installing Under Windows | 53

)LJXUH7KH:LQGRZVVHUYLFHVZLQGRZ

8QGHU9LVWDRSHQWKH&RQWURO3DQHODQGVHOHFWWKH6\VWHPDQG0DLQWHQDQFHHQWU\
)URPKHUHVHOHFWWKH$GPLQLVWUDWLYH7RROVDQGWKHQWKH6HUYLFHVHQWU\:LQGRZVPD\
SURPSW\RXIRUDXWKRUL]DWLRQFOLFN&RQWLQXH
6FUROO GRZQ WKH OLVW RI VHUYLFHV WLOO \RX VHH DQ HQWU\ IRU 0\64/ DQG VHOHFW LW 7KH
LQVWDOODWLRQSURFHVVVHWVWKHVHUYLFHVWDWXVWREH$XWRPDWLFWKDWLVWKHVHUYHULVVWDUWHG
DXWRPDWLFDOO\HYHU\WLPH:LQGRZVLVERRWHG,I\RXGSUHIHUWRVWDUWDQGVWRSWKHVHUYHU
PDQXDOO\\RXFDQVHWWKHVHUYLFHVWDWXVWR0DQXDO<RXFDQDOVRVWDUWDQGVWRSWKH
VHUYHUE\FOLFNLQJWKH6WDUWRU6WRSOLQNRQWKHOHIWRIWKH6HUYLFHVZLQGRZRUE\RSHQLQJ
DFRPPDQGSURPSWZLQGRZDQGW\SLQJ
C:\> net start mysql

RU
C:\> net stop mysql

54 | Chapter 2:Installing MySQL

<RXFDQUXQ0\64/SURJUDPVIURPWKHFRPPDQGZLQGRZE\ILUVWFKDQJLQJWRWKH
0\64/GLUHFWRU\
C:\> cd "C:\Program Files\MySQL\MySQL Server 5.0"

DQGWKHQW\SLQJLQWKH0\64/SURJUDPQDPH
)RUH[DPSOH\RXFDQVWRSWKHVHUYHUGLUHFWO\E\FDOOLQJWKHmysqladminSURJUDPGLUHFWO\
IURPWKH0\64/LQVWDOODWLRQGLUHFWRU\<RXZRXOGW\SH DOORQRQHOLQH 
C:\Program Files\MySQL\MySQL Server 5.0> bin\mysqladmin \
--user=root \
--password=the_mysql_root_password \
shutdown

1HYHUNLOOWKH0\64/VHUYHUIURPWKH:LQGRZVWDVNPDQDJHU\RXFRXOGORVHGDWD

Starting and stopping MySQL from the command line


,IWKHLQVWDOODWLRQSURJUDPFRXOGQRWLQVWDOOWKHVHUYLFH\RXOOQHHGWRVWDUWDQGVWRS
WKHVHUYHUIURPWKHFRPPDQGOLQH7RGRWKLVRSHQDFRPPDQGSURPSWZLQGRZDQG
FKDQJH\RXUZRUNLQJGLUHFWRU\WRWKHGLUHFWRU\ZKHUHWKH0\64/LQVWDOODWLRQKDVEHHQ
LQVWDOOHG7KLVLVW\SLFDOO\&?3URJUDP)LOHV?0\64/?0\64/6HUYHU?
C:\> cd C:\Program Files\MySQL\MySQL Server 5.0\

7RVWDUWWKHVHUYHUW\SH
C:\Program Files\MySQL\MySQL Server 5.0> bin\mysqld-nt

8QGHU:LQGRZVH[HFXWDEOHSURJUDPVVXFKDVP\VTOGQWKDYHWKHH[WHQVLRQH[H<RX
FDQLQFOXGHWKHIXOOQDPHDQGH[WHQVLRQDVLQP\VTOGQWH[HLI\RXOHDYHLWRXW:LQ
GRZVZRQWFRPSODLQ,IWKHSURJUDPHQGVLPPHGLDWHO\UHVWDUWWKHVHUYHUEXWDGGWKH
RSWLRQno-defaults
C:\Program Files\MySQL\MySQL Server 5.0> bin\mysqld-nt --no-defaults

7KLVWHOOVWKHVHUYHUQRWWRH[SHFWDQRSWLRQVILOHZHGLVFXVVWKLVLQIXUWKHUGHWDLOLQ
&KDSWHU<RXPD\DOVREHSURPSWHGE\\RXUILUHZDOOVRIWZDUHWRDXWKRUL]HWKHVHUYHU
WROLVWHQIRULQFRPLQJFRQQHFWLRQVIURPWKHQHWZRUNXQOHVV\RXQHHGWRDOORZFRQ
QHFWLRQVIURPRWKHUFRPSXWHUVLWVDJRRGLGHDWRNHHSEORFNLQJVXFKFRQQHFWLRQV
2QFHWKHSURJUDPVVWDUWHGQRWKLQJH[FLWLQJZLOOKDSSHQ\RXOOMXVWVHHDEOLQNLQJ
FXUVRUWKLVFRPPDQGZLQGRZZLOOUHPDLQRSHQDVORQJDVWKHVHUYHULVUXQQLQJVRWR
XVHDQ\RWKHU0\64/FRPPDQGOLQHSURJUDPV\RXOOQHHGWRRSHQDQRWKHUFRPPDQG
SURPSWZLQGRZ
)RUH[DPSOHWRVKXWWKHVHUYHUGRZQ\RXVKRXOGRSHQDQRWKHUFRPPDQGSURPSW
ZLQGRZDQGFKDQJHWRWKH0\64/GLUHFWRU\
C:\> cd C:\Program Files\MySQL\MySQL Server 5.0\

DQGWKHQVWRSWKHVHUYHUE\VHQGLQJWKHshutdownFRPPDQG

Installing Under Windows | 55

C:\Program Files\MySQL\MySQL Server 5.0> bin\mysqladmin \


--user=root \
--password=the_mysql_root_password \
shutdown

1HYHUNLOOWKH0\64/VHUYHUIURPWKH:LQGRZVWDVNPDQDJHU\RXFRXOGORVHGDWD

Installation with the no-install .zip Archive


7KH QRLQVWDOO SDFNDJH LV D UHDG\WRXVH FROOHFWLRQ RI ILOHV EXQGOHG WRJHWKHU DQG
FRPSUHVVHGXVLQJWKHSRSXODU=,3FRPSUHVVLRQPHWKRG$OO\RXQHHGWRGRLVH[WUDFW
WKHSDFNDJHWRWKHGHVLUHGGLUHFWRU\7KLVLVXVHIXOLI\RXGRQWKDYHDGPLQLVWUDWRUDFFHVV
RQD:LQGRZVFRPSXWHURULI\RXZDQWWRDYRLGFKDQJHVWKDWWKHLQVWDOOHUSURJUDP
PLJKWPDNHWR\RXU:LQGRZVFRQILJXUDWLRQ
:LQGRZVFDQKDQGOH=,3ILOHVLWVHOILI\RXYHLQVWDOOHGDQDUFKLYLQJSURJUDPVXFKDV
:LQ=LSRU3.=,3WKLVDSSOLFDWLRQZLOOQRUPDOO\SURFHVVWKHILOHLQVWHDGRIWKHVWDQGDUG
:LQGRZV GHFRPSUHVVLRQ WRRO ,Q WKLV ERRN ZH H[SODLQ RQO\ WKH GHIDXOW :LQGRZV
EHKDYLRUDQGDVVXPHWKDW\RXNQRZKRZWRXVHDQ\H[WUDXWLOLW\SURJUDPVRQ\RXU
V\VWHP
7KHLFRQIRUDFRPSUHVVHGILOHRIWHQKDVDSLFWXUHRID]LSSHURQLWDVVKRZQLQ)LJ
XUH,I\RXGRXEOHFOLFNRQWKHLFRQ\RXOOEHDEOHWRVHHLQVLGHWKHSDFNDJHEXW
WKLVLVQWXVHIXOULJKWQRZ,QVWHDGULJKWFOLFNRQWKHLFRQVHOHFW([WUDFW$OODV
VKRZQLQ)LJXUHDQGIROORZWKHSURPSWV,JQRUHWKH3DVVZRUGEXWWRQWKHDUFKLYH
GRHVQWKDYHRQH:KHQ\RXVHHWKHPHVVDJH6HOHFWD'HVWLQDWLRQUHSODFHWKHH[LVWLQJ
WH[WZLWKWKHGLUHFWRU\\RXZDQWWKH0\64/GLUHFWRU\WREHORFDWHGLQ)LJXUH
VKRZVWKLVZLQGRZ7KHUHFRPPHQGHGGLUHFWRU\IRUWKLVSDFNDJHLV&?VRXVHWKLV
DQGFOLFNWKH1H[WEXWWRQ7KHILOHVZLOOEHLQVWDOOHGWRWKHP\VTOZLQVXE
GLUHFWRU\
:KHQ\RXXVHWKH=,3DUFKLYHD:LQGRZVVHUYLFHLVQWFRQILJXUHGIRU0\64/\RXOO
QHHGWRVWDUWWKHVHUYHUXVLQJWKH0\64/FRPPDQGVWKHPVHOYHV7KH0\64/H[HFXW
DEOHVGLUHFWRU\LVQWDGGHGWR\RXU:LQGRZVSDWKHLWKHUVR\RXOOQHHGWRDOZD\VWHOO
:LQGRZVZKHUHWRILQGWKH0\64/SURJUDPV\RXUHWU\LQJWRUXQ,QWKHH[DPSOHV
KHUHZHDVVXPH\RXILUVWFKDQJHWRWKH0\64/GLUHFWRU\DQGWKHQWHOO:LQGRZVWR
UXQWKHSURJUDPVIURPWKHELQGLUHFWRU\$OWHUQDWLYHO\\RXFDQDGGWKHGLUHFWRU\WRWKH
VHDUFK SDWK PDQXDOO\ IROORZLQJ WKH VWHSV RXWOLQHG ODWHU LQ (UURU 0HVVDJH $ERXW
0\64/([HFXWDEOH3URJUDPV1RW%HLQJ)RXQGRU5HFRJQL]HG
7RFRQWURODQGDFFHVVWKHVHUYHURSHQDFRPPDQGSURPSWZLQGRZDQGFKDQJH\RXU
ZRUNLQJGLUHFWRU\WRWKH0\64/GLUHFWRU\)RUH[DPSOHLI\RXH[WUDFWHGWKHILOHVWR
WKHC:\GLUHFWRU\FKDQJHWRWKH0\64/GLUHFWRU\XQGHUWKHUH
C:\> cd C:\mysql-5.0.22-win32

7RVWDUWWKHVHUYHUW\SH
C:\mysql-5.0.22-win32> bin\mysqld-nt

56 | Chapter 2:Installing MySQL

)LJXUH'HFRPSUHVVLQJWKHFRPSUHVVHGSDFNDJH

DVVKRZQLQ)LJXUH8QGHU:LQGRZVH[HFXWDEOHSURJUDPVVXFKDVmysqld-ntKDYH
WKHH[WHQVLRQH[H<RXFDQLQFOXGHWKHIXOOQDPHDQGH[WHQVLRQDVLQmysqld-nt.exe
LI\RXOHDYHLWRXW:LQGRZVZRQWFRPSODLQ,IWKHSURJUDPHQGVLPPHGLDWHO\UHVWDUW
LWZLWKWKHRSWLRQno-defaults
C:\mysql-5.0.22-win32>bin\mysql-nt --no-defaults

7KLVWHOOVWKHVHUYHUQRWWRH[SHFWDQRSWLRQVILOH:HGLVFXVVRSWLRQVILOHVLQ&KDSWHU
<RXPD\DOVREHSURPSWHGE\\RXUILUHZDOOVRIWZDUHWRDXWKRUL]HWKHVHUYHUWROLVWHQ
IRULQFRPLQJFRQQHFWLRQVIURPWKHQHWZRUNXQOHVV\RXQHHGWRDOORZFRQQHFWLRQVIURP
RWKHUFRPSXWHUVLWVDJRRGLGHDWRNHHSEORFNLQJVXFKFRQQHFWLRQV
2QFHWKHSURJUDPVVWDUWHGQRWKLQJH[FLWLQJZLOOKDSSHQ\RXOOMXVWVHHDEOLQNLQJ
FXUVRUWKLVFRPPDQGZLQGRZZLOOUHPDLQRSHQDVORQJDVWKHVHUYHULVUXQQLQJVRWR
XVHDQ\RWKHU0\64/FRPPDQGOLQHSURJUDPV\RXOOQHHGWRRSHQDQRWKHUFRPPDQG
SURPSWZLQGRZ
2SHQDQRWKHUFRPPDQGSURPSWZLQGRZDQGFKDQJHWRWKH0\64/GLUHFWRU\
C:\> cd C:\mysql-5.0.22-win32

1RZVHWDSDVVZRUGIRUWKHGDWDEDVHURRWDFFRXQW DOORQRQHOLQH 

Installing Under Windows | 57

)LJXUH7KH:LQGRZVFRPSUHVVHGILOHH[WUDFWLRQGLDORJZLQGRZ

)LJXUH6WDUWLQJWKHVHUYHULQ:LQGRZV
C:\mysql-5.0.22-win32> bin\mysqladmin --user=root \
password the_new_mysql_root_password

)LQDOO\VWRSWKHVHUYHUE\VHQGLQJWKHshutdownFRPPDQG
C:\mysql-5.0.22-win32> bin\mysqladmin --user=root \
--password=the_mysql_root_password shutdown

)LJXUH  VKRZV WKH VHFRQG FRPPDQGSURPSW ZLQGRZ DQG WKH mysqladmin FRP
PDQGVZHYHMXVWGLVFXVVHG+HUHZHXVHGWKHSDVVZRUG "new root password"DVDQ
H[DPSOH\RXVKRXOGFKRRVHDSDVVZRUGWKDWVKDUGWRJXHVV$VZHYHJRWVSDFHVLQ
WKHSDVVZRUGZHYHHQFORVHGLWLQTXRWHV1RWLFHDOVRKRZWKHFRPPDQGWRVKXWGRZQ
WKHVHUYHUKDVZUDSSHGWRWKHQH[WOLQHWKLVLVILQHEXWGRQWSUHVVWKH(QWHUNH\XQWLO
\RXYHILQLVKHGW\SLQJWKHZKROHFRPPDQG

58 | Chapter 2:Installing MySQL

)LJXUH5XQQLQJWKHP\VTODGPLQSURJUDPIURPWKH:LQGRZVFRPPDQGSURPSW

Installing MySQL, Apache, PHP, and Perl on Windows Using the XAMPP
Integrated Package
7RLQVWDOO;$033RQ\RXU:LQGRZVV\VWHPILUVWYLVLWWKH;$033KRPHSDJHDWKWWS
ZZZDSDFKHIULHQGVRUJHQ[DPSSKWPOIROORZWKHOLQNWR;$033IRU:LQGRZVDQG
GRZQORDG WKH LQVWDOOHU SDFNDJH 7KH SDFNDJH ZLOO KDYH D QDPH OLNH [DPSS
ZLQDLQVWDOOHUH[H
5XQWKHLQVWDOOHUSDFNDJHRQFH\RXYHGRZQORDGHGLW9LVWDPD\SURPSW\RXWRFRQILUP
\RXZDQWWRGRWKLV$FFHSW&?3URJUDP)LOHVDVWKHLQVWDOODWLRQGLUHFWRU\DQGFOLFNWKH
,QVWDOO EXWWRQ ;$033 LV LQVWDOOHG WR WKH &?3URJUDP )LOHV?[DPSS GLUHFWRU\ 'RQW
FKDQJHWKLVXQOHVV\RXUHDOO\KDYHWR:HDVVXPHWKLVLVWKHGLUHFWRU\\RXUHXVLQJ
$IWHU;$033LVLQVWDOOHG\RXOOEHSURPSWHGWRLQVWDOO;$033VHUYHUVDVDVHUYLFH
FKRRVH\HV$OVRVHOHFW\HVZKHQDVNHGZKHWKHU\RXZDQWWRLQVWDOO$SDFKHDVD
VHUYLFHDQGZKHWKHU\RXZDQWWRDXWRVWDUWWKHVHUYHU,I\RXJHWDPHVVDJHDERXWSRUW
 WKHZHEVHUYHUSRUW EHLQJEORFNHGRQ\RXUV\VWHPFKHFNZKHWKHU\RXKDYHDQRWKHU
UXQQLQJZHEVHUYHUVXFKDV0LFURVRIW,,6WKLVVHUYHUFRXOGKDYHEHHQLQVWDOOHGDVSDUW
RI9LVXDO6WXGLR1(7<RXFDQDOVRVHOHFW\HVWRLQVWDOOWKH)LOH=LOOD)73VHUYHUDVD
VHUYLFHQRWRDXWRVWDUWWKHVHUYLFHQRWRVWDUWWKHVHUYLFHDQGQRWRXQLQVWDOO
WKHVHUYHU
,I\RXU:LQGRZV)LUHZDOOLVDFWLYH\RXPD\EHWROGWKDW$SDFKHKDVEHHQEORFNHGIURP
DFFHSWLQJLQFRPLQJQHWZRUNFRQQHFWLRQV8QOHVV\RXQHHGWRDOORZFRQQHFWLRQVIURP
RWKHUFRPSXWHUVWKLVLVDJRRGVHWWLQJWRVWLFNZLWKVRFKRRVHWRNHHSEORFNLQJWKH
FRQQHFWLRQV

Installing Under Windows | 59

)LJXUH7KH;$033FRQWUROSDQHO

)LQDOO\VHOHFW\HVZKHQSURPSWHGWRVWDUWWKH;$033FRQWUROSDQHO7KHLQVWDOODWLRQ
SURJUDPSODFHVDVKRUWFXWWRWKH;$033FRQWUROSDQHORQ\RXUGHVNWRSEXWLILWVQRW
WKHUH\RXFDQDOVRVWDUWLWIURPWKH;$033FRQWUROSDQHOIURPWKHDSDFKHIULHQGV
VXEPHQXRIWKH:LQGRZV6WDUWPHQX)LJXUHVKRZVZKDWWKH;$033FRQWURO
SDQHOORRNVOLNH6WDUWWKH0\64/VHUYHUE\FOLFNLQJWKH6WDUWEXWWRQQH[WWRWKH0\64/
ODEHO<RXQHHGWREHORJJHGLQDVDXVHUZLWK:LQGRZV$GPLQLVWUDWRUSULYLOHJHVWR
FRQWURO;$033DOWKRXJKDQXQSULYLOHJHGXVHULVDOORZHGWRSODFHILOHVRQWKHZHE
VHUYHU6WRSDQ\H[LVWLQJ0\64/RU$SDFKHVHUYHUEHIRUHVWDUWLQJ;$033
;$033GRHVQRWPRGLI\WKH:LQGRZVSDWK,I\RXQHHGWRUXQDQ\0\64/SURJUDPV
IURPWKHFRPPDQGSURPSW\RXOOQHHGWRUXQWKHPIURPWKH0\64/ELQGLUHFWRU\
<RXFDQDYRLGWKLVLQFRQYHQLHQFHE\DGGLQJWKH&?3URJUDP)LOHV?[DPSS?P\VTO?ELQGL
UHFWRU\WR\RXU:LQGRZVSDWKDVGLVFXVVHGLQ(UURU0HVVDJH$ERXW0\64/([HFXW
DEOH3URJUDPV1RW%HLQJ)RXQGRU5HFRJQL]HGODWHULQWKLVFKDSWHU
7KHILUVWWKLQJ\RXVKRXOGGRRQFH\RXYHVWDUWHGWKHVHUYHULVWRVHWDSDVVZRUGIRUWKH
GDWDEDVH URRW DFFRXQW )LUVW RSHQ D FRPPDQG ZLQGRZ DQG FKDQJH WR WKH 0\64/
GLUHFWRU\
C:\> cd C:\Program Files\xampp\mysql

7KHQUXQWKHmysqladminSURJUDPIURPWKHbinGLUHFWRU\
C:\Program Files\xampp\mysql> bin\mysqladmin \
--user=root \
password the_new_mysql_root_password

60 | Chapter 2:Installing MySQL

<RXFDQDOVRFRQILJXUHWKHVHUYHUSDVVZRUGDVZHOODVRWKHUVHWWLQJVIRUEHWWHUVHFXULW\
E\ORDGLQJKWWSORFDOKRVWLQ\RXUEURZVHUDQGFOLFNLQJRQWKH6HFXULW\OLQNRQWKHOHIW
RIWKHSDJH7KLVWDNHV\RXWRDSDJHWKDWGLVSOD\VLQIRUPDWLRQRQ\RXUVHUYHUVHFXULW\
FRQILJXUDWLRQDQGDOORZV\RXWRDGGSDVVZRUGVWRDXWKHQWLFDWHDFFHVVWRWKH0\64/
DQG$SDFKHVHUYHUV
7KH;$033LQVWDOODWLRQKDV3+3FRQILJXUHGZLWKWKHregister_globalsVHWWLQJWXUQHG
RQ <RX VKRXOG GLVDEOH WKLV ROG LQVHFXUH IHDWXUH RSHQ WKH ILOH &?3URJUDP )LOHV
?[DPSS?SKS?SKSLQLDQGORRNIRUWKHOLQHregister_globals = On&KDQJHWKHYDOXH On
WROffVDYHWKHILOHDQGTXLWWKHHGLWRU7KHQHZVHWWLQJZLOOEHLQHIIHFWDIWHU\RXUHVWDUW
\RXU$SDFKHVHUYHU
)LQDOO\\RXFDQVWRSWKH0\64/VHUYHUE\SUHVVLQJWKH6WRSEXWWRQQH[WWRWKH0\64/
ODEHOLQWKH;$033FRQWUROSDQHO

Installing Under Mac OS X


,QWKLVVHFWLRQZHOOORRNDWWKUHHZD\VWRLQVWDOO0\64/RQD0DF26;V\VWHP
6\VWHPZLGHXVLQJDQLQVWDOODWLRQSDFNDJHSURYLGHGE\0\64/$%
/RFDOXVLQJDQQRQLQVWDOODWLRQJ]LSSHGWDUSDFNDJHSURYLGHGE\0\64/$%
6\VWHPZLGHXVLQJWKHXAMPPLQWHJUDWHGSDFNDJH
7RLQVWDOOV\VWHPZLGH\RXVKRXOGEHDEOHWRDFFHVVVXSHUXVHUSULYLOHJHVWKURXJKWKH
sudoFRPPDQG

Installing only MySQL Using the Installer from MySQL AB


)ROORZLQJWKHLQVWUXFWLRQVRI'RZQORDGLQJ0\64/IURPWKH0\64/$%:HE6LWH
HDUOLHULQWKLVFKDSWHUYLVLWWKH0\64/$%GRZQORDGVSDJHDQGFKRRVHWKHSDFNDJH
FRUUHVSRQGLQJWRWKHYHUVLRQRI\RXURSHUDWLQJV\VWHPDQG\RXUV\VWHPSURFHVVRU
3LFNWKH6WDQGDUGLQVWDOOHU UDWKHUWKDQ7$5 SDFNDJH7KLVLVDVPDOOSDFNDJHWKDWKDV
HYHU\WKLQJ\RXQHHG2QFHWKHILOHLVGRZQORDGHGGRXEOHFOLFNRQLWWRXQSDFNWKH
DUFKLYH DQG YLHZ WKH SDFNDJH FRQWHQWV <RX VKRXOG VHH VRPHWKLQJ VLPLODU WR )LJ
XUH
'RXEOHFOLFNRQWKHSDFNDJHILOHZLWKDQDPHEHJLQQLQJZLWKP\VTOVWDQGDUGWRVWDUW
WKHLQVWDOODWLRQSURFHVV
6LPSO\IROORZLQJWKHSURPSWVZLOOLQVWDOOWRWKHXVUORFDOP\VTOYHUVLRQ!GLUHFWRU\
ZKHUHYHUVLRQ!LVWKH0\64/YHUVLRQQXPEHU,WDOVRFUHDWHVWKHV\PEROLFOLQN RU
DOLDV /usr/local/mysqlWKDWSRLQWVWRWKLVLQVWDOODWLRQGLUHFWRU\)RUH[DPSOHWKHILOHV
FRXOGEHLQVWDOOHGLQWKHXVUORFDOP\VTOGLUHFWRU\DQGWKH /usr/local/mysql
OLQNVHWWRSRLQWWRWKLVGLUHFWRU\

Installing Under Mac OS X | 61

)LJXUH7KHFRQWHQWVRIWKH0\64/$%0DF26;LQVWDOOHUSDFNDJH

1H[WGRXEOHFOLFNRQWKH0\64/SUHI3DQHLWHPDQGLQVWDOOLW7KLVDGGVD0\64/
FRQILJXUDWLRQHQWU\WRWKH6\VWHP3UHIHUHQFHVIURPWKH6\VWHP3UHIHUHQFHVZLQGRZ
\RXFDQPDQXDOO\VWDUWDQGVWRSWKH0\64/VHUYHUDQGDOVRVHOHFWZKHWKHU\RXZDQW
WKHVHUYHUWREHDXWRPDWLFDOO\VWDUWHGHDFKWLPHWKHV\VWHPERRWV
)LQDOO\LI\RXZDQWWKH0\64/VHUYHUWREHVWDUWHGDQGVWRSSHGDXWRPDWLFDOO\HDFK
WLPHWKHFRPSXWHULVVWDUWHGRUVWRSSHGGRXEOHFOLFNRQWKH0\64/6WDUWXS,WHPSNJ
LWHPDQGLQVWDOOWKLVWRR

Configuring the installed server


)RU VHFXULW\ UHDVRQV LWV D JRRG LGHD WR KDYH WKH 0\64/ VHUYHU UXQ XQGHU LWV RZQ
XVHUQDPHDQGJURXSUDWKHUWKDQXQGHUWKHVXSHUXVHUDFFRXQW,IVRPHWKLQJJRHVZURQJ
ZLWKWKHVHUYHURUDQDWWDFNHUJDLQVFRQWURORIWKHVHUYHUWKHGDPDJHZLOOEHUHVWULFWHG
WRWKH0\64/XVHUUDWKHUWKDQWKHZKROHV\VWHP0DF26;FRPHVZLWKDmysqlXVHU
DQGJURXSDOUHDG\GHILQHG<RXFDQFKHFNWKLVXVLQJWKHJUDSKLFDO1HW,QIR0DQDJHU
WRRORUIURPWKHVKHOOSURPSW
7RFKHFNXVLQJWKH1HW,QIR0DQDJHUGRXEOHFOLFNRQWKH1HW,QIR0DQDJHULFRQLQWKH
8WLOLWLHVIROGHUXQGHUWKH$SSOLFDWLRQVJURXSDVVKRZQLQ)LJXUH7KHQVHOHFW
JURXSVDQGVFUROOGRZQWRPDNHVXUHWKDWWKHUHLVDQHQWU\IRUWKH mysqlJURXSDV
VKRZQLQ)LJXUH6LPLODUO\\RXFDQVHOHFWXVHUVDQGVFUROOGRZQWRVHHWKDWWKHUH
LVDQHQWU\IRUWKHmysqlXVHUWKHUHWRR
<RXFDQLQVWHDGFKHFNWKHVHVHWWLQJVIURPWKHVKHOOSURPSW7RGRWKLVRSHQDWHUPLQDO
ZLQGRZDQGXVHWKHgrepFRPPDQGWRVHDUFKIRUWKHZRUGmysqlLQWKHV\VWHPVOLVWRI
XVHUV WKHHWFSDVVZGILOH DQGJURXSV WKHHWFJURXSILOH 
$ grep mysql /etc/passwd /etc/group
/etc/passwd:mysql:*:74:74:MySQL Server:/var/empty:/usr/bin/false
/etc/group:mysql:*:74:

62 | Chapter 2:Installing MySQL

)LJXUH6WDUWLQJWKH0DF26;1HW,QIR0DQDJHU

<RXVKRXOGVHHWZROLQHVVLPLODUWRWKHRQHVDERYH
,IIRUVRPHUHDVRQWKH mysqlXVHUDQGJURXSDUHQWFRQILJXUHGRQ\RXUV\VWHP\RX
KDYHWRFUHDWHWKHP<RXFDQDGGWKHPLQWKH1HW,QIR0DQDJHUE\FOLFNLQJRQWKHORFN
LFRQDWWKHERWWRPRIWKHVFUHHQDQGVHOHFWLQJWKH$GGHQWU\IURPWKH(GLWPHQX+RZ
HYHULWVSUREDEO\IDVWHUWRSHUIRUPWKHVHVWHSVIURPWKHFRPPDQGOLQH
)LUVWFUHDWHWKHXVHUmysql QRWHWKDWWKHILUVWIRUZDUGVODVKV\PERO / VWDQGVE\LWVHOI
RQWKHOLQH 
$ sudo niutil -create

/ /users/mysql

DQGDVVLJQLQYDOLG DQGWKHUHIRUHUHODWLYHO\VHFXUH YDOXHVIRUWKHKRPHGLUHFWRU\DQG


ORJLQVKHOO
$ sudo niutil -createprop / /users/mysql home /var/empty
$ sudo niutil -createprop / /users/mysql shell /usr/bin/false

1H[WFUHDWHWKHJURXSmysql
$ sudo niutil -create

/ /groups/mysql

2QFH\RXYHGRQHWKLVGHILQHD*URXS,'QXPEHU gid IRUWKHmysqlJURXSDQGD8VHU


,'QXPEHU uid IRUWKHmysqlXVHU7KH0DF26;GHIDXOWYDOXHIRUERWKWKHVH,'VLV
\RXFDQFKRRVHWKLVRUDQ\RWKHUYDOXHIRUH[DPSOHWKDWVQRWDOUHDG\DO
ORFDWHGWRDXVHURUJURXS/HWVXVHLQRXUH[DPSOHDQGDVVLJQWKLVYDOXHWRWKH
mysqlJURXSDQGXVHU

Installing Under Mac OS X | 63

)LJXUH9HULI\LQJWKDWWKHP\VTOJURXSH[LVWV
$ sudo niutil -createprop / /groups/mysql gid 74
$ sudo niutil -createprop / /users/mysql uid 74

)LQDOO\DVVRFLDWHWKHmysqlXVHUZLWKWKHmysqlJURXS
$ sudo niutil -createprop / /users/mysql gid 74

:KHQ\RXUHVXUHWKHFRUUHFWXVHUDQGJURXSH[LVW\RXKDYHWRLQLWLDOL]HWKH0\64/
GDWDEDVHV)LUVWFKDQJHWRWKH0\64/EDVHGLUHFWRU\
$ cd /usr/local/mysql

7KHQUXQWKHmysql_install_dbVFULSWIURPWKHscriptsGLUHFWRU\7KHuserRSWLRQDV
VLJQVRZQHUVKLSRIWKH0\64/GDWDILOHVDQGIROGHUVWRWKHVSHFLILHGXVHUKHUHWRWKH
V\VWHPmysqlDFFRXQW
$ sudo scripts/mysql_install_db --user=mysql

64 | Chapter 2:Installing MySQL

)LJXUH7KH0\64/SUHIHUHQFHVSDQH

<RXVKRXOGQRZFKDQJHWKHILOHVLQWKH0\64/GLUHFWRU\WREHRZQHGE\rootEXWEH
LQWKHmysqlJURXS
$ sudo chown -RL root:mysql /usr/local/mysql

7KH-RLRSWLRQWHOOVWKHchownFRPPDQGWRDSSO\WKHRZQHUVKLSUXOHUHFXUVLYHO\ R WR
HYHU\WKLQJXQGHUWKH /usr/local/mysqlGLUHFWRU\IROORZLQJV\PEROLFOLQNV L LIQHF
HVVDU\<RXVKRXOGDOVRFKDQJHWKHGDWDEDVHILOHVLQWKHGDWDGLUHFWRU\WREHRZQHGE\
WKHmysqlXVHUDQGJURXS
$ sudo chown -RL mysql:mysql /usr/local/mysql/data

,I\RXXVHGWKH mysql_install_dbVFULSWZLWKWKH user=mysqlRSWLRQWKLVZLOODOUHDG\


KDYHEHHQGRQHIRU\RX
<RXFDQQRZVWDUWWKHVHUYHUDQGVWRSLWLQVHYHUDOZD\VOHWVORRNDWDIHZRIWKHVH
)LUVWLI\RXLQVWDOOHGWKH0\64/SUHI3DQHLWHP\RXFDQXVHWKH0\64/SDQHLQWKH
6\VWHP3UHIHUHQFHVZLQGRZ7RDFFHVVWKLVFOLFNRQWKH$SSOHORJRDWWKHWRSOHIWRI
WKHVFUHHQPHQXVHOHFWWKH6\VWHP3UHIHUHQFHVPHQXHQWU\DQGWKHQFOLFNRQWKH
0\64/LFRQLQWKH6\VWHP3UHIHUHQFHVZLQGRZ7KLVZLOOEULQJXSDZLQGRZVLPLODU
WR)LJXUHZLWKDEXWWRQODEHOHG6WDUW0\64/6HUYHUZKHQWKHVHUYHULVQRWUXQQLQJ
DQG6WRS0\64/6HUYHUZKHQLWLV&OLFNLQJRQWKLVEXWWRQZLOOVWDUWRUVWRSWKHVHUYHU
<RXPD\EHDVNHGWRW\SHLQ\RXUSDVVZRUG
6HFRQG\RXFDQXVHWKHP\VTOVHUYHUVFULSWLQWKH0\64/GLUHFWRU\
$ sudo /usr/local/mysql/support-files/mysql.server start

Installing Under Mac OS X | 65

WRVWDUWWKH0\64/VHUYHUDQG
$ sudo /usr/local/mysql/support-files/mysql.server stop

WRVWRSLW
7KLUGLI\RXLQVWDOOHGWKH0\64/6WDUWXS,WHPSNJILOHGXULQJWKHLQVWDOODWLRQSURFHVV
\RXFDQVWDUWWKHVHUYHUIURPWKHFRPPDQGOLQHE\FDOOLQJ
$ sudo /Library/StartupItems/MySQLCOM/MySQLCOM start

DQGVWRSLWE\FDOOLQJ
$ sudo /Library/StartupItems/MySQLCOM/MySQLCOM start

)LQDOO\\RXFDQXVHWKHJHQHULFmysqld_safeDQGmysqladminSURJUDPVIURPWKHFRP
PDQGSURPSW7RVWDUWWKHVHUYHUWRUXQXQGHUWKHV\VWHPmysqlXVHUDFFRXQWW\SH
$ sudo /usr/local/mysql/bin/mysqld_safe --user=mysql

7KHQSUHVVWKH&WUO=NH\FRPELQDWLRQDQGW\SHbgWROHDYHWKHVHUYHUUXQQLQJLQWKH
EDFNJURXQG
<RXFDQWKHQVWRSWKHVHUYHUE\UXQQLQJWKHFRPPDQG
$ /usr/local/mysql/bin/mysqladmin --user=root \
--password=the_mysql_root_password shutdown

7KLVDSSURDFKLVWKHPRVWUREXVWDQGDOVRWKHPRVWIOH[LEOHLI\RXQHHGWRDGGFXVWRP
RSWLRQVWR\RXUVHUYHU
7KHILUVWWKLQJ\RXVKRXOGGRRQFH\RXYHVWDUWHGWKHVHUYHULVWRVHWDSDVVZRUGIRUWKH
GDWDEDVHrootDFFRXQW
$ sudo /usr/local/mysql/bin/mysqladmin --user=root password \
the_new_mysql_root_password

2QFH\RXYHVHWWKH0\64/URRWSDVVZRUG\RXOOQHHGWRXVHWKLVLQDOOIXUWKHUDFFHVVHV
WRWKHVHUYHU)RUH[DPSOHWRVKXWGRZQWKHVHUYHUXVLQJmysqladmin\RXZRXOGW\SH
$ /usr/local/mysql/bin/mysqladmin --user=root \
--password=the_mysql_root_password shutdown

Installing Only MySQL Using the no-installer Package from MySQL AB


)ROORZLQJWKHLQVWUXFWLRQVLQ'RZQORDGLQJ0\64/IURPWKH0\64/$%:HE6LWH
HDUOLHULQWKLVFKDSWHUYLVLWWKH0\64/$%GRZQORDGVSDJHDQGGRZQORDGWKH:LWKRXW
LQVWDOOHUSDFNDJHFRUUHVSRQGLQJWRWKHYHUVLRQRI\RXURSHUDWLQJV\VWHPDQGSURFHVVRU
W\SH
7KLVZLOOGRZQORDGDFRPSUHVVHGSDFNDJHZLWKDQDPHOLNHP\VTOVWDQGDUG
RV[LWDUJ]7KLVLVQRUPDOO\DXWRPDWLFDOO\GHFRPSUHVVHGDQGXQSDFNHGE\
WKH ZHE EURZVHU WR OHDYH WKH GLUHFWRU\ P\VTOVWDQGDUGRV[L LQ WKH
GRZQORDGGLUHFWRU\<RXPD\LQVWHDGILQGWKDW\RXUEURZVHUGHFRPSUHVVHVWKHILOHEXW
GRHVQRWXQSDFNLW,IWKLVLVWKHFDVH\RXOOILQGWKHILOHP\VTOVWDQGDUGRV[
66 | Chapter 2:Installing MySQL

LWDULQ\RXUGRZQORDGGLUHFWRU\<RXFDQXQSDFNWKLVLQDQ\ORFDWLRQE\RSHQLQJ
DWHUPLQDOZLQGRZFKDQJLQJWRWKHGLUHFWRU\\RXZDQWWRUXQ0\64/IURPDQGFDOOLQJ
WKHtarSURJUDPIURPWKHUHWRXQSDFNWKHILOH)RUH[DPSOHLIWKHILOHZDVGRZQORDGHG
WR\RXU'HVNWRSGLUHFWRU\EXW\RXZDQWWRKDYHWKH0\64/GLUHFWRU\XQGHU\RXUKRPH
GLUHFWRU\\RXFDQRSHQDWHUPLQDOZLQGRZDQGW\SH
$ cd

WRJRWR\RXUKRPHGLUHFWRU\DQG
$ tar --extract --file ~/Desktop/mysql-standard-5.0.22-osx10.4-i686.tar

WRXQSDFNWKHILOHWKDWVLQ\RXU'HVNWRSGLUHFWRU\,IWKHEURZVHUGRHVQRWGHFRPSUHVV
WKHILOHDWDOO\RXOOILQGWKHGRZQORDGHGILOHVWLOOKDVDJ]H[WHQVLRQ<RXFDQIROORZ
WKHVDPHVWHSVDVIRUWKHGHFRPSUHVVHGILOHEXWXVHWKHgunzipRSWLRQWRGHFRPSUHVV
WKHILOHEHIRUHXQSDFNLQJLW
$ tar --gunzip --extract --file \
~/Desktop/mysql-standard-5.0.22-osx10.4-i686.tar.gz

2QFHWKHSDFNDJHKDVEHHQGHFRPSUHVVHG\RXFDQPRYHWKHUHVXOWLQJGLUHFWRU\WRWKH
ORFDWLRQ\RXZDQW)RUH[DPSOH\RXFDQPRYHLWWREHXQGHU\RXUKRPHGLUHFWRU\
HLWKHUE\GUDJJLQJDQGGURSSLQJZLWKWKHPRXVHRUE\XVLQJWKHmvFRPPDQGIURPWKH
VKHOO
$ mv ~/Desktop/mysql-standard-5.0.22-osx10.4-i686 ~

<RXFDQDOVRFUHDWHDV\PEROLFOLQNWRWKH0\64/GLUHFWRU\VRWKDW\RXFDQUHIHUWRLW
DVVLPSO\~/mysql
$ ln -s ~/Desktop/mysql-standard-5.0.22-osx10.4-i686 ~/mysql

2QFH\RXKDYHWKHH[WUDFWHGGLUHFWRU\\RXVKRXOGFKDQJHWRWKDWGLUHFWRU\
$ cd ~/mysql

DQGUXQWKHP\VTOBLQVWDOOBGESURJUDPIURPWKHVFULSWVGLUHFWRU\WRLQLWLDOL]HWKH0\64/
GDWDEDVHV
$ scripts/mysql_install_db

<RXFDQQRZVWDUWWKHVHUYHUXVLQJWKHFRPPDQG
$ bin/mysqld_safe &

6HWDSDVVZRUGIRUWKH0\64/VHUYHUrootDFFRXQWLPPHGLDWHO\
$ bin/mysqladmin --user=root password the_new_mysql_root_password

6LQFHZHYHVHWDSDVVZRUGIRUWKHURRWXVHU\RXQHHGWRXVHWKLVSDVVZRUGLQDOOIXUWKHU
DFFHVVHV WR WKH VHUYHU IRU WKH URRW DFFRXQW <RX FDQ QRZ VWRS WKH VHUYHU XVLQJ WKH
FRPPDQG
$ bin/mysqladmin --user=root --password=the_mysql_root_password shutdown

Installing Under Mac OS X | 67

Installing MySQL, Apache, PHP, and Perl on Mac OS X Using the XAMPP
Integrated Package
7RLQVWDOO;$033RQ0DF26;YLVLWWKH;$033KRPHSDJH KWWSZZZDSDFKHIULHQGV
RUJHQ[DPSSKWPO IROORZWKHOLQNWR;$033IRU0DF26;DQGGRZQORDGWKH
LQVWDOOHUSDFNDJH
7KHLQVWDOOHUSDFNDJHLVLQWKH6WXII,W([SDQGHU VLW[ IRUPDW,I\RXJHWDVFUHHQRI
JDUEOHGWH[WLQ\RXUEURZVHUZKHQWU\LQJWRGRZQORDGLWSUHVVWKHEDFNEXWWRQWR
VHH WKH GRZQORDG OLQNIRU H[DPSOH KWWSHDV\QHZVGOVRXUFHIRUJHQHWVRXUFHIRUJH
[DPSS[DPSSPDFRV[VLW[+ROGGRZQWKH CtrlNH\DQGFOLFNRQWKHOLQN)URP
WKHPHQXWKDWDSSHDUVVHOHFWWKHHQWU\WKDWVD\V'RZQORDG/LQNHG)LOH IRU6DIDUL 
6DYH/LQN$V IRU)LUHIR[ RU'RZQORDG/LQNWR'LVN IRU,QWHUQHW([SORUHU 
2QFHWKH6WXII,WDUFKLYHLVGRZQORDGHGGRXEOHFOLFNRQLWWRH[WUDFWWKHLQVWDOODWLRQ
SDFNDJHDQGWKHQGRXEOHFOLFNRQWKHLQVWDOODWLRQSDFNDJHWRVWDUWWKH;$033LQVWDO
ODWLRQSURJUDP:KHQWKHGHFRPSUHVVLRQSURJUDPILQLVKHV\RXVKRXOGILQGWKHLQ
VWDOODWLRQ SURJUDP VDYHG LQ WKH VDPH GLUHFWRU\ DV WKH GRZQORDGHG ILOH RU RQ \RXU
'HVNWRS7KLVLQVWDOODWLRQSURJUDPKDVDQDPHOLNH[DPSSPDFRV[SNJ5XQQLQJ
WKLVDQGDFFHSWLQJWKHGHIDXOWVHWWLQJVZLOOLQVWDOO;$033WRWKH$SSOLFDWLRQV[DPSS
GLUHFWRU\ZLWKWKH0\64/GDWDILOHVORFDWHGLQWKH$SSOLFDWLRQV[DPSS[DPSSILOHVYDU
P\VTOGLUHFWRU\
,IWKHUHLVDOUHDG\DUXQQLQJ0\64/RU$SDFKHVHUYHUUXQQLQJRQ\RXUV\VWHP;$033
PD\FRPSODLQGXULQJVWDUWXS,IWKLVKDSSHQVVKXWWKHVHGRZQEHIRUHWU\LQJWRVWDUW
;$033DJDLQ7RVZLWFKRIIWKHGHIDXOWLQVWDOODWLRQRI$SDFKHJRWRWKH6\VWHP3UHI
HUHQFHV:LQGRZDQGFOLFNRQ6KDULQJ,IWKH3HUVRQDO:HE6KDULQJHQWU\KDVDFKHFN
PDUNQH[WWRLWXQFKHFNLWWRVWRSWKH$SDFKHZHEVHUYHU
<RXFDQVWDUW;$033E\W\SLQJ
$ sudo /Applications/xampp/xamppfiles/mampp start

1RZWKDWWKHVHUYHUVUXQQLQJWLJKWHQXSWKHVHFXULW\VHWWLQJVE\W\SLQJ
$ sudo /Applications/xampp/xamppfiles/mampp security

DQGIROORZWKHSURPSWVWRDGGDSDVVZRUGWR\RXU0\64/VHUYHU
7KH;$033LQVWDOODWLRQKDV3+3FRQILJXUHGZLWKWKHregister_globalsVHWWLQJWXUQHG
RQ<RXVKRXOGGLVDEOHWKLVROGLQVHFXUHIHDWXUHRSHQWKHILOH$SSOLFDWLRQV[DPSSHWF
SKSLQLDQGORRNIRUWKHOLQHregister_globals = On&KDQJHWKHYDOXHOnWROffVDYH
WKHILOHDQGTXLWWKHHGLWRU7KHQHZVHWWLQJZLOOEHLQHIIHFWDIWHU\RXUHVWDUW\RXU
$SDFKHVHUYHU
<RXFDQDOVRPDQXDOO\VHWWKH0\64/VHUYHUURRWSDVVZRUGDVIROORZV
$ sudo /Applications/xampp/xamppfiles/bin/mysqladmin \
--user root \
password the_new_mysql_root_password

68 | Chapter 2:Installing MySQL

:KHQWKH;$033ZHEVHUYHULVUXQQLQJ\RXFDQORDGSDJHVIURP\RXURZQFRPSXWHU
E\VWDUWLQJDEURZVHUVXFKDV6DIDULDQGRSHQLQJWKHZHESDJHKWWSORFDOKRVW
<RXFDQVWRS;$033E\W\SLQJ
$ sudo /Applications/xampp/xamppfiles/mampp stop

,I\RXUHNHHQWRDFFHVVWKH0\64/H[HFXWDEOHILOHVGLUHFWO\\RXFDQVWDUWWKHVHUYHUE\
W\SLQJ
$ sudo /Applications/xampp/xamppfiles/bin/mysqld_safe

7KHQSUHVVWKH&WUO=NH\FRPELQDWLRQDQGW\SHbgWROHDYHWKHVHUYHUUXQQLQJLQWKH
EDFNJURXQG
6LPLODUO\\RXFDQVKXWGRZQWKHVHUYHUE\W\SLQJ
$ sudo /Applications/xampp/xamppfiles/bin/mysqladmin \
--user root \
--password=the_mysql_root_password \
shutdown

Using a MySQL Installation Provided by an ISP


0RVW LQGLYLGXDOV DQG VPDOO WR PHGLXPVL]HG RUJDQL]DWLRQV GRQW KDYH WKH WLPH RU
UHVRXUFHVWRPDLQWDLQDSURGXFWLRQZHEVHUYHUWKDWVDYDLODEOHDURXQGWKHFORFN)RU
WXQDWHO\WKHUHDUHFRXQWOHVV,QWHUQHW6HUYLFH3URYLGHUV ,63V WKDWSURYLGHXVXDOO\IRU
DIHHDFFHVVWRVHUYHUVWKH\PDLQWDLQ
6LQFH\RXUHUHDGLQJWKLVERRNZHFDQDVVXPH\RXUHLQWHUHVWHGLQVHUYHUVWKDWFDQKRVW
G\QDPLFZHESDJHV IRUH[DPSOHXVLQJ3+3RU3HUOVFULSWV DQGSURYLGHDEDFNHQG
0\64/GDWDEDVHWKDWFDQEHDFFHVVHGE\WKHZHEDSSOLFDWLRQ,WVQRWKDUGWRILQGDQ
,63WKDWSURYLGHVWKLVDZHEVHDUFKIRUSKSP\VTOKRVWLQJWXUQVXSVHYHUDOPLOOLRQ
VLWHV
:KHQVHOHFWLQJDKRVWLQJSDFNDJHVHHZKHWKHU\RXDUHJLYHQ sshRU telnetDFFHVVWR
WKHVHUYHUWRUXQWKH0\64/FOLHQWRUZKHWKHU\RXFDQXVHRQO\ZHEFOLHQWVVXFKDV
SKS0\$GPLQXVLQJZHEFOLHQWVLVHDV\EXW\RXFRXOGVRRQILQGWKHPWHGLRXVWRXVH
RYHUH[WHQGHGSHULRGVRIWLPH2QDGLIIHUHQWQRWHGRQWIRUJHWWRDOVRFKHFNKRZPXFK
GDWDWUDQVIHULVLQFOXGHGZKHQFRPSDULQJFRVWVRIDOWHUQDWLYHZHEKRVWLQJGHDOV,I\RXU
VLWHEHFRPHVSRSXODULWFRXOGHQGXSFRVWLQJ\RXDORWRIPRQH\

Upgrading an Existing MySQL Server


,I\RXYHJRWD0\64/VHUYHUWKDWVUXQQLQJZHOODQGZLWKRXWSUREOHPV\RXPD\ZRQ
GHU ZKHWKHU LWV QHFHVVDU\ WR XSJUDGH LW WR WKH ODWHVW YHUVLRQ 7KHUH DUH WKUHH PDLQ
UHDVRQVWRXSJUDGH

Upgrading an Existing MySQL Server | 69

)L[HVIRUEXJV
1RFRPSOH[VRIWZDUHVXFKDV0\64/FDQEHIUHHRIEXJVRYHUWLPHSHRSOHGLV
FRYHUXQH[SHFWHGEHKDYLRURUSRVVLEOHGDWDFRUUXSWLRQ$VWKHVHSUREOHPVFRPH
WROLJKWWKH\DUHIL[HGIRUWKHODWHVWYHUVLRQ0\64/EXJVDUHUHSRUWHGDQGDQDO\]HG
DWWKHKWWSEXJVP\VTOFRPZHEVLWH<RXFDQXVHWKLVZHEVLWHWRYLHZWKHEXJ
UHSRUWVIRU\RXU0\64/YHUVLRQDQGGHWHUPLQHZKHWKHUDQ\DUHOLNHO\WRDIIHFW\RXU
RSHUDWLRQV
)L[HVIRUVHFXULW\YXOQHUDELOLWLHV
6HFXULW\YXOQHUDELOLWLHVDUHDQHVSHFLDOO\GDQJHURXVFODVVRIEXJE\H[SORLWLQJD
YXOQHUDELOLW\DQDWWDFNHUFRXOGJDLQXQDXWKRUL]HGDFFHVVWRGDWDRUUHQGHU\RXU
V\VWHPXQXVDEOH FDXVHDGHQLDORIVHUYLFH ,I\RXUVHUYHULVFRQQHFWHGWRDQHWZRUN
RURWKHUZLVHDFFHVVLEOHWRSHRSOHRWKHUWKDQ\RXUVHOI\RXQHHGWRWDNHVHFXULW\
LVVXHVYHU\VHULRXVO\
,PSURYHGIHDWXUHV
$VVRIWZDUHPDWXUHVQHZIHDWXUHVDUHDGGHGWRPDNHVRPHWDVNVHDVLHURUWRLP
SURYHHIILFLHQF\)RUH[DPSOH0\64/LQWURGXFHGVXSSRUWIRUYLHZV YLUWXDO
WDEOHV VWRUHGSURFHGXUHV SUHGHILQHGTXHULHVWKDWFOLHQWVFDQFDOO FXUVRUV SRLQWHUV
WRWKHUHVXOWRIGDWDEDVHRSHUDWLRQV DQGWULJJHUV SUHGHILQHGRSHUDWLRQVWKDWDUH
FDUULHGRXWDXWRPDWLFDOO\EHIRUHRUDIWHUDURZLVLQVHUWHGGHOHWHGRUXSGDWHG 
6LPLODUO\VXETXHULHV QHVWHGSELECTTXHULHV ZHUHQRWSRVVLEOHLQ0\64/EHIRUH
YHUVLRQQHLWKHUZHUHPXOWLSOHFRQFXUUHQWFKDUDFWHUVHWV
6RPHQHZIHDWXUHVFRXOGJUHDWO\VLPSOLI\\RXUDSSOLFDWLRQDOORZLQJ\RXWRUHGXFH
GHYHORSPHQWWLPHE\VLPSO\XSJUDGLQJ\RXU0\64/VHUYHU2QDUHODWHGQRWH
DSSOLFDWLRQVRIWZDUHWKDW\RXPLJKWZDQWWRXVHZLWK\RXUGDWDEDVHVHUYHUIRU
H[DPSOHDIUHHZHESRUWDOV\VWHPPLJKWUHTXLUH\RXWRKDYHDPLQLPXPYHUVLRQ
RI0\64/
1HZHUYHUVLRQVRI0\64/DUHJHQHUDOO\EDFNZDUGFRPSDWLEOHZLWKUHFHQWYHUVLRQV
WKDWLVROGHUZD\VRIGRLQJWKLQJVZLOOFRQWLQXHWRZRUN$QHZVHUYHUFDQZRUNZLWK
ROGGDWDDQGHYHQZLWKROGHUFOLHQWV)RUH[DPSOH0\64/SDVVZRUGPDQDJHPHQWZDV
LPSURYHGLQYHUVLRQ7KHQHZVHUYHUFDQFRUUHFWO\KDQGOHSDVVZRUGVVWRUHGLQ
WKH ROG IRUPDW DQG LI LWV VWDUWHG ZLWK WKH old-passwords RSWLRQ LW FDQ PRGLI\ LWV
EHKDYLRUWRFDWHUWRROGHUFOLHQWVVXFKDVDZHEVHUYHUWKDWXVHVWKHROGPHFKDQLVP
+RZHYHUVRIWZDUHLVJHQHUDOO\QRWXSZDUGFRPSDWLEOHWKDWLV\RXUHPRUHOLNHO\WR
KDYHGLIILFXOW\LIPRYLQJIURPDQHZHUYHUVLRQRI0\64/WRDQROGHUYHUVLRQHVSHFLDOO\
LIWKH\DUHPDMRUYHUVLRQVDSDUW IRUH[DPSOHPRYLQJIURP0\64/WR0\64/ 
,WVKDUGWRILQGFDVHVZKHUHGRZQJUDGLQJLVZDUUDQWHG
<RX VKRXOG DVVHVV \RXU RZQ QHHGV DQG GHFLGH ZKHWKHU DQ XSJUDGH LV QHFHVVDU\ RU
ZRUWKZKLOHLIIRUH[DPSOH\RXKDYHDQRQOLQHVKRSSLQJDSSOLFDWLRQWKDWVUXQQLQJ
SHUIHFWO\\RXZRXOGRQO\QHHGWRXSJUDGHLI\RXZDQWHGWRPDNHFKDQJHVWKDWZRXOG
EHHDVLHUGRQHZLWKDQHZHU0\64/YHUVLRQRULI\RXOHDUQRIEXJVWKDWFRXOGDIIHFWWKH
UHOLDELOLW\RUVHFXULW\RI\RXUVLWH8SJUDGLQJD0\64/VHUYHUFRXOGUHTXLUHXSJUDGHV

70 | Chapter 2:Installing MySQL

WRRWKHUDVVRFLDWHGVRIWZDUHIRUH[DPSOHWKHYHUVLRQRI3+3WKDWWKHDSSOLFDWLRQXVHV
\RXPXVWWKLQNFDUHIXOO\DERXWWKHLPSOLFDWLRQVRIDQXSJUDGHEHIRUHGLYLQJLQ
%HIRUHGHFLGLQJWRXSJUDGHUHDGWKHUHOHDVHQRWHVIRUWKHQHZYHUVLRQLQSDUWLFXODU
QRWHDQ\FKDQJHVPDUNHGDVDQLQFRPSDWLEOHFKDQJH<RXFDQILQGDFRPSOHWHVHWRI
UHOHDVHQRWHVXQGHUWKH0\64/&KDQJH+LVWRU\VHFWLRQRIWKH0\64/PDQXDO KWWS
GHYP\VTOFRPGRFUHIPDQHQQHZVKWPO )RUH[DPSOH\RXPD\ILQGWKDWVXSSRUW
IRUVRPHWKLQJWKDW\RXQHHGLVQRORQJHUDYDLODEOHLQWKHQHZYHUVLRQRUWKDW\RXQHHG
WRFDUU\RXWFHUWDLQVWHSVEHIRUH\RXVWDUWWKHQHZVHUYHUZLWK\RXUH[LVWLQJGDWD<RX
VKRXOGDOVRUHDGWKH8SJUDGLQJ0\64/VHFWLRQRIWKH0\64/PDQXDO KWWSGHY
P\VTOFRPGRFUHIPDQHQXSJUDGHKWPO 1RWHWKDWWKHVHOLQNVSRLQWWRWKHODWHVW
YHUVLRQRIWKHPDQXDO  DYDLODEOHDWWKHWLPHRIZULWLQJ
,QWKLVERRNZHGRQWGHVFULEHKRZWRFKDQJHRYHUIURPDQRQ0\64/GDWDEDVHVHUYHU
VXFKDV0LFURVRIW$FFHVV0LFURVRIW64/6HUYHURU2UDFOH7KH0\64/0LJUDWLRQ
7RRONLWLVDJUDSKLFDOWRROWKDWKHOSV\RXWKURXJKWKHSURFHVVRIPRYLQJ\RXUGDWDRYHU
WR0\64/<RXFDQGRZQORDGWKLVSURJUDPDVDVSDUWRIWKH0\64/*8,7RROV%XQGOH
IURPWKH0\64/$%GRZQORDGVSDJHDWKWWSGHYP\VTOFRPGRZQORDGV

Should I Upgrade to MySQL 5.1?


$WWKHWLPHRIZULWLQJ0\64/LVLQEHWDWHVWLQJWKLVPHDQVWKDWLWVDYDLODEOHIRU
HDV\XVHDQGWHVWLQJEXWWKDWLWVEHVWWRDYRLGXVLQJLWIRUPLVVLRQFULWLFDOSURGXFWLRQ
VLWHV<RXFDQGRZQORDGDQGLQVWDOO0\64/XVLQJWKHVDPHSURFHGXUHVGLVFXVVHG
LQWKLVFKDSWHUIRUWKH*HQHUDOO\$YDLODEOHYHUVLRQV3UREDEO\WKHPRVWLQWHUHVWLQJQHZ
IHDWXUHVLQ0\64/DUHLWVSRZHUIXOWH[WVHDUFKFDSDELOLWLHVLPSURYHGVXSSRUWIRU
;0/GDWDDQGRSWLPL]DWLRQVIRUDSSOLFDWLRQVZKHUHWKHVHUYHUPXVWKDQGOHYHU\KLJK
ORDGVZLWKYHU\KLJKUHOLDELOLW\,WVOLNHO\WKDW\RXZRQWQHHGWKHVHIHDWXUHVIRUDFRQ
VLGHUDEOHWLPHDIWHUEHJLQQLQJWRXVH0\64/DQG\RXFDQFRPSOHWHDOOWKHH[DPSOHV
LQWKLVERRNZLWKDQ\YHUVLRQRIWKH0\64/VHUYHUQHZHUWKDQRQZDUGV

How to Upgrade
:HKDYHVHHQLQWKLVFKDSWHUWKDWGLIIHUHQWLQVWDOODWLRQDSSURDFKHVSODFHWKH0\64/
SURJUDPDQGGDWDILOHVLQGLIIHUHQWORFDWLRQV)RUH[DPSOHD0\64/$%530LQVWDOOV
WKH0\64/SURJUDPILOHVDQGWKHGDWDGLUHFWRU\XQGHUWKHXVUORFDOP\VTOGLUHFWRU\
ZKLOHDSDFNDJHSURYLGHGE\D/LQX[GLVWULEXWLRQW\SLFDOO\SODFHVWKH0\64/SURJUDP
ILOHVLQWKHXVUELQGLUHFWRU\DQGWKHGDWDILOHVLQWKHYDUOLEP\VTOGLUHFWRU\8SJUDGLQJ
D 0\64/ VHUYHU LQVWDOOV QHZ YHUVLRQV RI WKH SURJUDP ILOHV EXW ZLOO QRW DIIHFW \RXU
GDWDILOHV
7KHEHVWZD\WRHQVXUHDWURXEOHIUHHXSJUDGHLVWRXVHWKHVDPHDSSURDFKDVWKDWXVHG
WRLQVWDOOWKHRULJLQDOVHUYHUEHFDXVHWKHLQVWDOODWLRQSURFHVVFDQXSJUDGHWKHH[LVWLQJ
SURJUDPILOHVDQGWKHQHZVHUYHUZLOONQRZZKHUHWRILQG\RXUGDWDILOHV$OWHUQDWLYHO\

Upgrading an Existing MySQL Server | 71

\RXVKRXOGLVRODWHRUUHPRYHWKHROGYHUVLRQVRWKDWWKHUHLVQRFRQIXVLRQDERXWZKLFK
SURJUDPYHUVLRQLVFDOOHGZKHQ\RXW\SHLQDFRPPDQG
7REHDEOHWRUHYHUWWRWKHROGHUYHUVLRQRIWKH0\64/VHUYHULIWKHPLJUDWLRQUXQVLQWR
SUREOHPV\RXFDQLQVWDOOWKHQHZVHUYHUWRDGLIIHUHQWGLUHFWRU\IURPWKHGHIDXOW8QGHU
/LQX[DQG0DF26;\RXFDQDOVRPDNHDV\PEROLFOLQNWRWKHGLUHFWRU\FRQWDLQLQJ
WKHYHUVLRQ\RXZDQWWRXVH:HGLVFXVVHGKRZWRGRWKLVHDUOLHULQ,QVWDOOLQJ0\64/
RQ/LQX[8VLQJDJ]LSSHG7DU$UFKLYHIURP0\64/$%DQG,QVWDOOLQJ0\64/RQ
/LQX[ E\ &RPSLOLQJ WKH 6RXUFH &RGH IURP 0\64/ $% IRU WKH WDUEDOO DQG VRXUFH
LQVWDOODWLRQPHWKRGVXQGHU/LQX[DQGLQ,QVWDOOLQJ2QO\0\64/8VLQJWKHQRLQ
VWDOOHU3DFNDJHIURP0\64/$%IRUDORFDO0\64/LQVWDOODWLRQXQGHU0DF26;7KH
0\64/$%LQVWDOOHUIRU0DF26;FUHDWHVWKLVV\PEROLFOLQNDXWRPDWLFDOO\IRUDV\VWHP
ZLGHLQVWDOODWLRQ8QGHU:LQGRZV\RXFDQVSHFLI\DGLIIHUHQWLQVWDOODWLRQGLUHFWRU\
GXULQJWKHLQVWDOODWLRQSURFHVV,WLVQWVWUDLJKWIRUZDUGWRKDYHFRH[LVWLQJ0\64/YHU
VLRQVXQGHU/LQX[LI\RXXVH530RU'HELDQSDFNDJHV

Steps to Upgrade an Existing MySQL Server


7KHUH DUH VHYHUDO ZD\V WR XSJUDGH D VHUYHU +HUH ZH ORRN DW D VLPSOH DQG UHOLDEOH
DSSURDFK:HILUVWVDYHDOOWKHGDWDEDVHVRQWKHROGVHUYHUWRDGXPSILOH1H[WZH
LQVWDOOWKHQHZVHUYHU)LQDOO\ZHORDGWKHVDYHGGDWDEDVHVLQWRWKHQHZVHUYHU7KLV
ODVWVWHSLVQRWDOZD\VQHFHVVDU\\RXFDQRIWHQJHWWKHQHZVHUYHUWRXVHWKHGDWDILOHV
IURPWKHROGRQH
 7RVWDUWFKDQJHGLUHFWRULHVWRPDNHWKHROG0\64/LQVWDOODWLRQGLUHFWRU\\RXU
FXUUHQWZRUNLQJGLUHFWRU\8QGHU/LQX[RU0DF26;WKLVLVW\SLFDOO\XVUORFDO
P\VTOIRUDV\VWHPZLGHLQVWDOODWLRQ
$ cd /usr/local/mysql

DQGaP\VTOIRUDORFDOLQVWDOODWLRQ
$ cd ~/mysql

8QGHU:LQGRZVWKH0\64/VHUYHULVW\SLFDOO\LQVWDOOHGXQGHUWKHMySQLGLUHFWRU\
IRUH[DPSOH&?3URJUDP)LOHV?0\64/?0\64/6HUYHU
C:\> cd C:\Program Files\MySQL\MySQL Server 5.0

$JDLQZHOOVKRZWKHFRPPDQGOLQHLQVWUXFWLRQVIRU/LQX[DQG0DF26;XQGHU
:LQGRZVVLPSO\UHSODFHWKHIRUZDUGVODVK  ZLWKWKHEDFNVODVK ? 
 :H GLVFXVV KRZ WR PDNH D GDWDEDVH GXPSV LQ GHWDLO LQ &KDSWHU  <RX
FDQGXPSDOOWKHGDWDEDVHVRQWKHROG0\64/VHUYHUWRWKHILOHGXPSBRIBDOOBGDWD
EDVHVBIURPBROGBVHUYHUVTOE\W\SLQJ DOORQRQHOLQH 
$ bin/mysqldump \
--user=root \
--password=the_mysql_root_password \
--result-file=dump_of_all_databases_from_old_server.sql \
--all-databases

72 | Chapter 2:Installing MySQL

,WVDJRRGLGHDWRPDNHDEDFNXSRIWKLVILOHRQ&'RUFRS\LWDFURVVWRDQRWKHU
FRPSXWHU
 6KXWGRZQWKHROGVHUYHU
$ bin/mysqladmin --user root --password=the_mysql_root_password shutdown

 ,QVWDOOWKHQHZVHUYHU
 &RQILJXUH DQG VWDUW WKH QHZ VHUYHU XVLQJ WKH DSSURSULDWH FRPPDQGV GLVFXVVHG
HDUOLHULQWKLVFKDSWHU
 $WWKLVSRLQW\RXVKRXOGKDYHDIUHVKLQVWDOODWLRQRIWKH0\64/VHUYHUDQGDVVR
FLDWHGSURJUDPV,IWKHQHZVHUYHUYHUVLRQZDVLQVWDOOHGXVLQJWKHVDPHDSSURDFK
DVWKHROGYHUVLRQLWVOLNHO\WRKDYHWKHVDPHGDWDGLUHFWRU\7RFKHFNWKDW\RXU
GDWDEDVHVDUHDYDLODEOHRQWKHQHZVHUYHU\RXFDQXVHWKHmysqlshowFRPPDQGWR
FRQQHFWWRLWDQGOLVWWKHGDWDEDVHV
$ bin/mysqlshow --user root --password=the_mysql_root_password

<RXFDQDOVRXVHWKHSHOW DATABASESFRPPDQGLQWKH0\64/PRQLWRU GHVFULEHG


LQ&KDSWHU 
,I\RXXVHGDGLIIHUHQWDSSURDFKRUIRUVRPHUHDVRQWKHQHZVHUYHUGRHVQWNQRZ
DERXW\RXUROGGDWDEDVHV\RXVKRXOGQRZFKDQJH\RXUZRUNLQJGLUHFWRU\WRWKH
ORFDWLRQ RI WKH QHZ 0\64/ LQVWDOODWLRQ DQG WKHQ ORDG WKH GDWDEDVHV IURP WKH
GXPSILOH\RXFUHDWHGHDUOLHU
$ bin/mysql \
--user root \
--password=the_mysql_root_password \
< dump_of_all_databases_from_old_server.sql

2IFRXUVH\RXVKRXOGXVHWKHSDVVZRUGRIWKHQHZ0\64/VHUYHUKHUH
 <RXUQHZVHUYHUVKRXOGQRZKDYHORDGHGDOOWKHGDWDEDVHVIURP\RXUROGVHUYHU
2QH RI WKHVH WKH mysql GDWDEDVH FRQWDLQV JUDQW WDEOHV WKDW VSHFLI\ XVHU DFFHVV
OHYHOV<RXVKRXOGQRZFKHFNDQGXSJUDGHWKHVHWDEOHVLIQHFHVVDU\
8QGHU/LQX[FKDQJHWR\RXU0\64/EDVHGLUHFWRU\DQGW\SH
$scripts/mysql_fix_privilege_tables \
--user=root \
--password=the_mysql_root_password

)RUD:LQGRZV0\64/VHUYHUYHUVLRQRUQHZHUW\SH
C:\Program Files\MySQL\MySQL Server 5.0> bin/mysql \
--user=root \
--password=the_mysql_root_password \
--database=mysql \
< scripts\mysql_fix_privilege_tables.sql

)LQDOO\IRU0DF26;W\SH

Upgrading an Existing MySQL Server | 73

$ sudo /usr/local/mysql/bin/mysql_fix_privilege_tables \
--user=root \
--password=the_mysql_root_password

'RQW ZRUU\ LI \RX VHH ZDUQLQJV DERXW GXSOLFDWH FROXPQ QDPHV 2QFH \RXYH
FRPSOHWHGXSJUDGLQJWKHWDEOHVVWRSWKHVHUYHU

Configuring Access to the MySQL Server


%\GHIDXOWWKHUHLVQRSDVVZRUGVHWIRUWKH0\64/VHUYHU<RXPXVWVHWDURRWSDVVZRUG
DVVRRQDVSRVVLEOH7KH0\64/$%:LQGRZVLQVWDOOHUDXWRPDWLFDOO\SURPSWV\RXWR
VHWRQHDVSDUWRIWKHFRQILJXUDWLRQSURFHVV)RURWKHUFDVHVPDNHVXUH\RXIROORZRXU
LQVWDOODWLRQLQVWUXFWLRQVWRVHWDURRWSDVVZRUG
$0\64/FOLHQWFRQQHFWVWRDVHUYHUGLIIHUHQWO\GHSHQGLQJRQZKHUHWKHVHUYHULVUXQ
QLQJ:KHQWKHFOLHQWDQGVHUYHUDUHRQWKHVDPH/LQX[RU0DF26;V\VWHPDORFDO
FRQQHFWLRQLVPDGHWKURXJKD8QL[VRFNHWILOHW\SLFDOO\WPSP\VTOVRFNRUYDUOLE
P\VTOP\VTOVRFN2QD:LQGRZVV\VWHPWKHFRQQHFWLRQLVPDGHWKURXJKWKH MYSQL
QDPHGSLSHLIWKHVHUYHUZDVVWDUWHGZLWKWKHenable-named-pipeRSWLRQ,QRWKHUFDVHV
FOLHQWVVHQGWKHLUUHTXHVWVWKURXJKD7&3,3QHWZRUNFRQQHFWLRQ8VLQJDQDPHGSLSH
FDQDFWXDOO\EHVORZHUWKDQXVLQJ7&3,3
,I\RXLQWHQGIRU\RXUVHUYHUWREHDFFHVVHGRQO\IURPWKHKRVWLWLVUXQQLQJRQ\RXFDQ
GLVDEOHQHWZRUNDFFHVVWRWKHVHUYHUE\VWDUWLQJWKHVHUYHUZLWKWKH skip-networking
RSWLRQ )RU D VHUYHU UXQQLQJ RQ :LQGRZV UHPHPEHU WR HQDEOH WKH enable-namedpipeRSWLRQDWWKHVDPHWLPHRWKHUZLVH\RXZRQWEHDEOHWRFRQQHFWWRWKHVHUYHU
,I\RXFDUU\RXWWKHVWHSVRXWOLQHGLQWKLVFKDSWHUWKHILOHV\VWHPDFFHVVSHUPLVVLRQVIRU
WKH0\64/GDWDGLUHFWRU\DQGWKHVHUYHUORJVVKRXOGEHFRQILJXUHGFRUUHFWO\.HHSLQ
PLQGWKDWXVHUVQHHGDFFHVVWRWKHVRFNHWILOHWRFRQQHFWWRWKHVHUYHULIWKHVRFNHWILOH
LVLQWKHGDWDGLUHFWRU\ VRPHWLPHVWKHFDVHZKHQXVLQJ/LQX[GLVWULEXWLRQ530V WDNH
FDUHWKDWXVHUVFDQWDFFHVVRWKHUILOHVLQWKDWGLUHFWRU\:HGLVFXVVHGSHUPLVVLRQVHW
WLQJVLQ5HVWULFWLQJDFFHVVWRILOHVDQGGLUHFWRULHVDWWKHEHJLQQLQJRIWKLVFKDSWHU2I
FRXUVHVHFXULQJWKHGDWDEDVHVHUYHULVRQO\DVPDOOSDUWRIRYHUDOOV\VWHPVHFXULW\
,I\RXUHUXQQLQJ/LQX[RU0DF26;\RXFDQXVHWKHP\VTOBVHFXUHBLQVWDOODWLRQVFULSW
IURPWKH0\64/ binGLUHFWRU\WRZDONLQWHUDFWLYHO\WKURXJKVWHSVWRLPSURYHWKHVH
FXULW\RI\RXUVHUYHU
$ bin/mysql_secure_installation
...
Change the root password? [Y/n] n
...
Remove anonymous users? [Y/n] y
...
Disallow root login remotely? [Y/n] y
...
Remove test database and access to it? [Y/n] n
...

74 | Chapter 2:Installing MySQL

Reload privilege tables now? [Y/n] y


...

7KHHOOLSVLV ... V\PEROVLQGLFDWHZKHUHZHYHOHIWRXWVRPHRIWKHSURJUDPRXWSXW

What If Things Dont Work?


+RSHIXOO\\RXOOKDYHPDQDJHGWRJHWWKHVHUYHUXSDQGUXQQLQJZLWKRXWSUREOHPV
6DGO\WKLQJVGRQWDOZD\VZRUNSHUIHFWO\+HUHVKRZWRJHWDURXQGVRPHRIWKHPRUH
FRPPRQSUREOHPV

Cant Download Files from Behind a Proxy


,I\RXKDYHWRXVHDSUR[\WRFRQQHFWWRWKH:HE\RXOOQHHGWRDVNZHEFOLHQWVWRXVH
WKHP:HEEURZVHUVW\SLFDOO\DOORZ\RXWRFRQILJXUHSUR[LHVXQGHUWKHSURJUDPFRQ
QHFWLRQSUHIHUHQFHV)RUWKH/LQX[ wget yumDQG apt-getSURJUDPV\RXFDQGHFODUH
WKH+773DQG)73SUR[\VHWWLQJVDVVKRZQEHORZ
# export http_proxy=http://proxy_username:mypass@server_name:port
# export ftp_proxy=http://proxy_username:mypass@server_name:port

)RUH[DPSOH\RXPLJKWW\SH
# export http_proxy=http://adam:mypass@proxy.mycompany.com:8080
# export ftp_proxy=http://adam:mypass@proxy.mycompany.com:8080

<RXU ,QWHUQHW VHUYLFH SURYLGHU RU FRPSDQ\ QHWZRUN DGPLQLVWUDWRU FDQ SURYLGH WKH
SUR[\VHWWLQJVWKDW\RXVKRXOGXVH,IIRUVRPHUHDVRQWKHrpmFRPPDQGGRHVQRWZRUN
WKURXJKWKHSUR[\\RXFDQGRZQORDGWKHILOH\RXUVHOIXVLQJDEURZVHURUZLWK wget
<RX FDQ WKHQ LQVWDOO WKLV GRZQORDGHG ILOH PDQXDOO\ XVLQJ WKH rpm --upgrade RU
dpkg --installFRPPDQGV

Error Message About MySQL Executable Programs Not Being Found


or Recognized
7RXVH0\64/\RXQHHGWRUXQ0\64/H[HFXWDEOHSURJUDPVVXFKDVWKHVHUYHUSUR
JUDPVmysqld_safeDQGmysqld-nt.exe GHVFULEHGLQ&KDSWHU WKHPRQLWRUSURJUDP
mysql GHVFULEHGLQ&KDSWHU DQGWKHmysqladminDGPLQLVWUDWLRQSURJUDPWKDWZHXVH
LQWKLVFKDSWHUDQGWKURXJKRXWWKLVERRN7KHVHSURJUDPVDUHORFDWHGWRJHWKHULQD
ELQGLUHFWRU\VRPHZKHUHRQWKHV\VWHPH[DPSOHVRIWKHVHDUH
/LQX[
XVUORFDOP\VTOELQ IRU D V\VWHPZLGH LQVWDOODWLRQ IURP D WDUEDOO RU VRXUFH ILOHV
aP\VTOELQIRUDORFDOJ]LSSHGWDULQVWDOODWLRQXVUELQGLUHFWRU\IRUDQLQ
VWDOODWLRQ IURP 530 RU 'HELDQ SDFNDJHV DQG RSWODPSSELQ IRU DQ ;$033
LQVWDOODWLRQ

What If Things Dont Work? | 75

:LQGRZV
&?P\VTOZLQ?ELQ IRU D QRLQVWDOO ]LS  LQVWDOODWLRQ &?3URJUDP )LOHV
?0\64/?0\64/6HUYHU?ELQIRUDVWDQGDUGLQVWDOODWLRQDQG&?3URJUDP)LOHV
?[DPSS?P\VTO?ELQIRUDQ;$033LQVWDOODWLRQ
0DF26;
XVUORFDOP\VTOELQ IRU D V\VWHPZLGH LQVWDOODWLRQ IURP D WDUEDOO RU VRXUFH ILOHV
aP\VTOELQIRUDORFDOJ]LSSHGWDULQVWDOODWLRQ$SSOLFDWLRQV[DPSS[DPSS
ILOHVELQIRUDQ;$033LQVWDOODWLRQ
,I\RXFDQWILQGWKH0\64/SURJUDPVLQRQHRIWKHVHGLUHFWRULHVWU\WRUHPHPEHU
ZKHUH \RX LQVWDOOHG WKH VHUYHU ILOHV 2Q D /LQX[ RU 0DF 26 ; V\VWHP XVH WKH find
FRPPDQGDVWKHURRWXVHUWRORFDWHWKHmysqld_safeSURJUDP
# find / -name mysqld_safe

,I\RXUXQWKLVFRPPDQGDVDQRUGLQDU\XVHU QRWDVroot \RXUHOLNHO\WRVHHORWVRI


SHUPLVVLRQGHQLHGPHVVDJHVWHOOLQJ\RXWKDW\RXFDQWORRNLQVLGHFHUWDLQGLUHFWRULHV
2QD:LQGRZVV\VWHPXVHWKHVHDUFKWRROWRORRNIRUILOHVZLWKWKHZRUGP\VTOLQ
WKHLUQDPHV,I\RXUVHDUFKGRHVQWWXUQDQ\WKLQJXSLWVOLNHO\WKDW0\64/KDVQWLQ
IDFWEHHQLQVWDOOHG5XQWKHLQVWDOODWLRQSURFHVVDJDLQQRWHWKHGLUHFWRU\LQZKLFKWKH
ILOHVZLOOEHLQVWDOOHGDQGHQVXUHWKDWDOOWKHVWHSVFRPSOHWHVXFFHVVIXOO\
2QFH\RXNQRZZKHUHWKHH[HFXWDEOHSURJUDPVDUHORFDWHG\RXFDQUXQHDFKH[HFXW
DEOHSURJUDPE\VSHFLI\LQJWKHIXOOSDWKWRLWIRUH[DPSOH
$ /usr/local/mysql/mysqladmin status

RQD/LQX[RU0DF26;V\VWHPDQG
C:\> "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqladmin status

RQD:LQGRZVV\VWHP
,IWKH0\64/binGLUHFWRU\LVOLVWHGLQ\RXUV\VWHP3$7+\RXFDQVLPSO\W\SH
$ mysqladmin status

IURP\RXURSHUDWLQJV\VWHPFRPPDQGSURPSW,I\RXJHWDPHVVDJHVXFKDV
command not found

XQGHU/LQX[RU0DF26;RU
'mysqladmin' is not recognized as an internal or external command,
operable program or batch file.

XQGHU:LQGRZVWKHGLUHFWRU\FRQWDLQLQJWKH0\64/H[HFXWDEOHSURJUDPVLVQRWLQ
WKHV\VWHPSDWK
7KHFRQYHQLHQWWKLQJWRGRLVWRDGGWKH0\64/ELQGLUHFWRU\WR\RXUV\VWHPSDWK<RX
FDQVHHWKHOLVWRIGLUHFWRULHVLQ\RXUV\VWHPSDWKE\W\SLQJ
$ echo $PATH

76 | Chapter 2:Installing MySQL

DWWKHFRPPDQGOLQH,IWKH0\64/ELQGLUHFWRU\LVQWOLVWHGWKHUHWDNHWKHIROORZLQJ
VWHSV
)RUD/LQX[RU0DFV\VWHPRSHQ\RXUaEDVKUFVKHOOFRQILJXUDWLRQILOH VWDUWDQHZILOH
LIWKHUHLVQWRQHDOUHDG\ LQDWH[WHGLWRUXVLQJWKHLQVWUXFWLRQVLQ8VLQJD7H[W(GL
WRUDWWKHEHJLQQLQJRIWKLVFKDSWHUDQGDGGWKLVOLQHWRWKHERWWRP
export PATH=$PATH:/usr/local/mysql/bin:

,I\RXXVHDVKHOORWKHUWKDQbash\RXOOQHHGWRHGLWWKHDSSURSULDWHVKHOOFRQILJXUDWLRQ
ILOH)RUH[DPSOHLI\RXXVH tcsh\RXOOQHHGWRHGLWWKHaWFVKUFRUaFVKUFILOHDQG
DGGWKHOLQH
setenv PATH $PATH:/usr/local/mysql/bin

7RDFWLYDWHWKHFKDQJHVW\SH $ source ~/.bashrcORJRXWDQGORJLQDJDLQRUVLPSO\


UHVWDUWWKHFRPSXWHU
)RU:LQGRZV\RXFDQXSGDWHWKHSDWKLQWZRZD\V7KHILUVWZD\LVWRUXQWKH0\64/
VHUYHUFRQILJXUDWLRQSURJUDPDJDLQE\VHOHFWLQJ0\64/6HUYHU,QVWDQFH&RQILJ:L]DUG
IURPWKH:LQGRZV6WDUWPHQXDQGVHOHFWLQJWKH,QFOXGH%LQ'LUHFWRU\LQ:LQGRZV
3$7+FKHFNER[DVGHVFULEHGHDUOLHULQWKLVFKDSWHU
7KHVHFRQGZD\LVWRPDQXDOO\DGGWKHDSSURSULDWHHQWU\WR\RXU:LQGRZVSDWKE\
IROORZLQJWKHVHVWHSV
 2SHQWKH:LQGRZVFRQWUROSDQHO
 ,I\RXGRQWKDYHWKHFRQWUROSDQHO&ODVVLF9LHZHQDEOHG LWVGLVDEOHGE\GHIDXOW 
\RXOOQHHGWRVWHSWKURXJKRQHDGGLWLRQDOZLQGRZ LI\RXKDYH&ODVVLF9LHZHQD
EOHG\RXFDQVNLSWKLVVWHS 8QGHU;3LI\RXKDYH&DWHJRU\9LHZHQDEOHG\RXOO
VHHDQLFRQIRU3HUIRUPDQFHDQG0DLQWHQDQFHRSHQWKLV8QGHU9LVWDWKHFRQWURO
SDQHOZLQGRZZLOORSHQDWWKH&RQWURO3DQHO+RPHYLHZE\GHIDXOWFOLFNRQWKH
6\VWHPDQG0DLQWHQDQFHHQWU\
 2SHQWKH6\VWHPHQWU\8QGHU9LVWDFOLFNRQWKH$GYDQFHG6\VWHP6HWWLQJVOLQN
XQGHUWKHOLVWRIWDVNV
 6HOHFWWKH$GYDQFHGWDE
 &OLFNRQWKH(QYLURQPHQW9DULDEOHVEXWWRQ
 ,QWKHERWWRPKDOIRIWKHZLQGRZ\RXOOVHHWKH6\VWHPYDULDEOHVSDQH6FUROO
GRZQWKLVOLVWXQWLO\RXVHHDQHQWU\IRU3DWK
 'RXEOHFOLFNRQWKLVHQWU\RUVHOHFWLWDQGSUHVVWKH(GLWEXWWRQ
 ,QWKHGLDORJER[WKDWDSSHDUVJRWRWKHHQGRIWKH9DULDEOHYDOXHILHOGDQGDGGD
VHPLFRORQIROORZHGE\WKHSDWKWRWKH0\64/ELQGLUHFWRU\)RUH[DPSOHLI\RX
LQVWDOOHG0\64/WRWKH&?3URJUDP)LOHV?0\64/?0\64/6HUYHU?ELQGLUHFWRU\
\RXVKRXOGDGG
;C:\Program Files\MySQL\MySQL Server 5.0\bin

7KHVHPLFRORQDWWKHVWDUWLVDGHOLPLWHUXVHGWRVHSDUDWHHQWULHVLQWKHV\VWHPSDWK
What If Things Dont Work? | 77

 3UHVVWKH2.EXWWRQWRFORVHWKHHGLWGLDORJER[DQGWKHQSUHVVWKH2.EXWWRQWR
FORVH WKH (QYLURQPHQW 9DULDEOHV GLDORJ ER[ 7KH QHZ SDWK VKRXOG EH DFWLYH
LPPHGLDWHO\

Error Message Running mysql_install_db


,I RQ D /LQX[ RU 0DF 26 ; V\VWHP \RX JHW PHVVDJHV OLNH WKHVH ZKHQ UXQQLQJ
mysql_install_db
$ bin/mysql_install_db
Installing all prepared tables
/home/saied/mysql/libexec/mysqld: Can't read dir of '/root/tmp/' (Errcode: 13)
Fill help tables
/home/saied/mysql/libexec/mysqld: Can't read dir of '/root/tmp/' (Errcode: 13)
...

WKHQWKHVHWWLQJIRU\RXUWHPSRUDU\ILOHVLVQWVHWFRUUHFWO\7KHVROXWLRQLVWRGHFODUH
WKHGLUHFWRU\WRXVHIRUWHPSRUDU\ILOHVDV
$ export TMPDIR=/tmp

2QPRVWV\VWHPVWKHGLUHFWRU\WPSLVSUHVHQWDQGDFFHVVLEOHE\DOOXVHUV<RXFDQXVH
DQ\ RWKHU GLUHFWRU\ \RX ZLVK EXW UHPHPEHU WKDW LW PXVW H[LVW DQG \RX PXVW KDYH
SHUPLVVLRQWRFUHDWHDQGGHOHWHILOHVLQWKDWGLUHFWRU\

Server Doesnt Start


3RVVLEOHTXHVWLRQVWRDVN\RXUVHOILQFOXGH
'R\RXKDYHILOHV\VWHPDFFHVVWRWKH0\64/FRPPDQGV"8QGHU/LQX[WU\UXQQLQJ
mysqld_safeDVWKHXVHUroot8QGHU:LQGRZVHQVXUHWKDW\RXKDYHDGPLQLVWUDWRU
SULYLOHJHV8QGHU0DF26;FKHFNWKDW\RXXVHGWKHsudoNH\ZRUGZKHQFDOOLQJ
mysqld_safe
,VWKHVHUYHUDOUHDG\UXQQLQJ"7U\VWRSSLQJWKHVHUYHUILUVWDQGWKHQVWDUWLQJLWDJDLQ
,VWKHUHDQRWKHUVHUYHUXVLQJSRUW"7U\VWDUWLQJ\RXUVHUYHUZLWKDGLIIHUHQW
SRUWXVLQJWKHportRSWLRQ
,I\RXUHLQWHUHVWHG\RXFDQOLVWWKHRSHQSRUWVRQDV\VWHPXVLQJWKHRSHQVRXUFH
nmapVHFXULW\VFDQQHUSURJUDPWKDWLVDYDLODEOHIRU/LQX[:LQGRZVDQG0DF26
;7ROLVWWKHRSHQSRUWVRQ\RXURZQPDFKLQH localhost \RXGW\SH
$ nmap localhost
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2006-07-23 02:09 EST
Interesting ports on saied-ltc.cs.rmit.edu.au (127.0.0.1):
Not shown: 1669 closed ports
PORT
STATE SERVICE
22/tcp
open ssh
25/tcp
open smtp
80/tcp
open http

78 | Chapter 2:Installing MySQL

143/tcp
631/tcp
1494/tcp
3306/tcp
6000/tcp
8080/tcp
32770/tcp

open
open
open
open
open
open
open

imap
ipp
citrix-ica
mysql
X11
http-proxy
sometimes-rpc3

Nmap finished: 1 IP address (1 host up) scanned in 0.472 seconds

+HUH\RXFDQVHHWKDWWKHUHLVD0\64/VHUYHUOLVWHQLQJRQSRUW
$JRRGSODFHWRILQGFOXHVWR\RXUSUREOHPLVWRORRNDWWKHHUURUORJILOHWKLVLVQRUPDOO\
LQWKHdataGLUHFWRU\ZLWKWKHV\VWHPKRVWQDPHDQGWKHH[WHQVLRQHUU)RUH[DPSOH
WKHORJILOHIRUWKHKRVWHGHQOHDUQLQJP\VTOFRPLVJHQHUDOO\FDOOHGHGHQHUURUHGHQOHDU
QLQJP\VTOFRPHUU)RUD/LQX[KRVWWKLVPLJKWEHWKHILOHYDUOLEP\VTOHGHQHUUXVU
ORFDOP\VTOHGHQHUURURSWODPSSYDUP\VTOHGHQHUUGHSHQGLQJRQWKHZD\0\64/
ZDVLQVWDOOHG6LPLODUO\RQD:LQGRZVV\VWHPSRVVLEOHORFDWLRQVIRUWKHHUURUORJILOH
LQFOXGH
&?P\VTOZLQ?GDWD?HGHQHUU
&?3URJUDP
)LOHV?0\64/
?0\64/6HUYHU?GDWD?HGHQHUUDQG&?3URJUDP)LOHV?[DPSS?P\VTO?GDWD?HGHQHUU)L
QDOO\IRUD0DF26;V\VWHPOLNHO\ORFDWLRQVIRUWKHHUURUORJILOHDUHXVUORFDOP\VTO
HGHQHUUDQG$SSOLFDWLRQV[DPSS[DPSSILOHVYDUP\VTOHGHQHUU
<RXFDQXVHWKHmoreFRPPDQGWRORRNLQVLGHWKLVILOH
$ more /var/lib/mysql/eden.err
050813 22:31:04 mysqld started
050813 22:31:04 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.
050813 22:31:04 mysqld ended

7KLVSDUWLFXODUPHVVDJHLQGLFDWHVWKDWWKHGLUHFWRU\SHUPLVVLRQVPD\QRWEHVHWFRU
UHFWO\3UHVV&WUO&WRH[LWWKHmoreSURJUDP
,I \RX LQVWDOOHG 0\64/ RQ D /LQX[ V\VWHP XVLQJ SDFNDJHV SURYLGHG E\ \RXU /LQX[
GLVWULEXWLRQ\RXPD\LQVWHDGILQGWKH0\64/ORJVXQGHUDGLIIHUHQWQDPHIRUH[
DPSOHP\VTOGORJLQWKHYDUORJP\VTORUYDUORJP\VTOGGLUHFWRU\

Client Programs Cant Connect to the Server


&RQVLGHUWKHVHTXHVWLRQV
 'LG\RXXVHWKHFRUUHFWXVHUQDPHDQGSDVVZRUG"6LQFHWKHGHIDXOW0\64/LQVWDO
ODWLRQGRHVQWKDYHDSDVVZRUGVHWLWLVHDV\WREHFRQIXVHGZKHQSDVVZRUGVDUH
HQDEOHG )RU WKH 0\64/ FRPPDQGOLQH WRROV WU\ XVLQJ WKH user DQG password
RSWLRQV,I\RXYHIRUJRWWHQ\RXUSDVVZRUGWU\UHVHWWLQJLWE\IROORZLQJWKHVWHSV
RI5HVHWWLQJ)RUJRWWHQ0\64/3DVVZRUGVLQ&KDSWHU

What If Things Dont Work? | 79

 ,VWKHVHUYHUUXQQLQJ"7U\UXQQLQJWKHFRPPDQGmysqladmin statusIURPDWHUPLQDO
ZLQGRZRUFRPPDQGSURPSW
 ,IFRQQHFWLQJWRDVHUYHURQlocalhostGR\RXKDYHILOHV\VWHPDFFHVVWRWKHVRFNHW
ILOH"7KHVRFNHWILOHLVQRUPDOO\FUHDWHGDVWPSP\VTOVRFNEXWFDQEHFUHDWHGLQ
DQ\ORFDWLRQVSHFLILHGZKHQWKHVHUYHUZDVVWDUWHG,ILWVFUHDWHGLQDGLUHFWRU\WKDW
VRPH XVHUV FDQW DFFHVVIRU H[DPSOH LQ WKH 0\64/ VHUYHUV GDWD GLUHFWRU\
WKHVHXVHUVZRQWEHDEOHWRFRQQHFWWRWKHVHUYHU)RUWKH0\64/FRPPDQGOLQH
WRROVXVHWKHsocketRSWLRQWRVSHFLI\DFXVWRPVRFNHWSDWK
 ,IFRQQHFWLQJWRDVHUYHURQDKRVWRWKHUWKDQlocalhostLVWKHVHUYHUUXQQLQJRQD
SRUWRWKHUWKDQ"<RXVKRXOGVSHFLI\WKHVDPHSRUWWRWKHFOLHQWDVWKHRQH\RX
VSHFLILHG ZKHQ VWDUWLQJ \RXU VHUYHU LI \RX GRQW DGPLQLVWHU WKH VHUYHU DVN WKH
V\VWHPDGPLQLVWUDWRUWRWHOO\RXWKHFRUUHFWSRUWQXPEHU)RUWKH0\64/FRP
PDQGOLQHWRROVXVHWKHportRSWLRQWRVSHFLI\DFXVWRPSRUWQXPEHU
 ,IFRQQHFWLQJWRDVHUYHURQDKRVWRWKHUWKDQlocalhostLVLWFRQILJXUHGWRDFFHSW
QHWZRUN FRQQHFWLRQV" (QVXUH WKDW WKH VHUYHU ZDV QRW VWDUWHG ZLWK WKH skip-net
workingRSWLRQRQWKHFRPPDQGOLQHRULQDQRSWLRQVILOH ZHGLVFXVVRSWLRQVILOHV
LQ&KDSWHU 
 ,IFRQQHFWLQJWRDVHUYHURQDKRVWRWKHUWKDQ localhostLVDILUHZDOOSUHYHQWLQJ
QHWZRUNFRQQHFWLRQV")LUHZDOOVRIWZDUHRUKDUGZDUHPD\EHSUHYHQWLQJFRQQHF
WLRQVWRWKHSRUWRQZKLFK0\64/OLVWHQVIRULQFRPLQJFRQQHFWLRQV WKHGHIDXOW
SRUWLV 7RIL[WKLV\RXQHHGWRPRGLI\WKHILUHZDOOVRWKDWFRQQHFWLRQVRQ
WKLVSRUWDUHDOORZHG)LUHZDOOVYDU\EHWZHHQQHWZRUNVDQGSODWIRUPVDQG\RXOO
QHHGWRUHIHUWR\RXUGRFXPHQWDWLRQRUGLVFXVVZLWK\RXUV\VWHPDGPLQLVWUDWRU
KRZWRPDNHWKHVHFKDQJHVWR\RXUQHWZRUNRUKRVWEDVHGILUHZDOO$Q\ILUHZDOO
FKDQJHV VKRXOG EH FRQVLGHUHG FDUHIXOO\ WR EDODQFH IHDWXUH DQG VHFXULW\
UHTXLUHPHQWV

Server Doesnt Stop


:KHQ\RXWU\WRVKXWGRZQWKHVHUYHU\RXPD\JHWDPHVVDJHOLNH
$ bin/mysqladmin shutdown
mysqladmin: shutdown failed; error: 'Access denied; you need the SHUTDOWN privilege
for this operation'

7KLVLQGLFDWHVWKDW\RXKDYHWRXVHD0\64/XVHUDFFRXQWWKDWKDVWKHSULYLOHJHWRVKXW
GRZQWKHVHUYHU,I\RXUHQRWORJJHGLQWR\RXUV\VWHPXQGHUWKHrootDFFRXQW0\64/
ZLOOXVH\RXURZQXVHUQDPHDQGWKHSDVVZRUGLIDQ\ IRUH[DPSOHadam ZKHQFRQ
QHFWLQJWRWKH0\64/VHUYHU :HGLVFXVVXVHUSULYLOHJHVLQGHWDLOLQ&KDSWHU )RU
QRZLWVHQRXJKWRNQRZWKDW\RXVKRXOGXVHWKH0\64/URRWDFFRXQWWRVKXWGRZQ
WKHVHUYHU<RXFDQGRWKLVE\VSHFLI\LQJWKHXVHUQDPHIURPWKHFRPPDQGOLQH
$ bin/mysqladmin --user=root --password-che-root.passwordshutdown
STOPPING server from pid file /var/run/mysql.pid
060706 21:04:02 mysqld ended

80 | Chapter 2:Installing MySQL

The Contents of the MySQL Directory


$0\64/LQVWDOODWLRQKDVVHYHUDONH\ILOHVDQGGLUHFWRULHVDQGVHYHUDORSWLRQDORQHV
,QWKLVVHFWLRQZHOOEULHIO\FRYHUWKHFRQWHQWVRIWKH0\64/GLUHFWRU\ZKHQ\RXYH
GRZQORDGHGDQGLQVWDOOHG0\64/XVLQJD0\64/$%SDFNDJH
)LUVWWKHUHDUHVRPHWH[WILOHVFRYHULQJWKHOLFHQVLQJFRQGLWLRQVDQGWKHLQVWDOODWLRQ
SURFHVV,WVDJRRGLGHDWRKDYHDTXLFNUHDGWKURXJKWKHVH

&23<,1*
5($'0(
(;&(37,216&/,(17
,167$//%,1$5<

7KHGLUHFWRU\DOVRFRQWDLQVWKHFRQILJXUHVFULSWWRFRQILJXUHDQGVWDUWDIUHVKO\LQVWDOOHG
VHUYHU\RXVKRXOGQWQHHGWRXVHWKLVLI\RXYHIROORZHGWKHLQVWUXFWLRQVLQWKLVFKDSWHU
7KHQWKHUHDUHVHYHUDOVXEGLUHFWRULHVWKHLPSRUWDQWRQHVDUH
ELQ
&RQWDLQVWKHH[HFXWDEOHSURJUDPVELQDULHVVXFKDV mysqld_safeDQG mysqlad
min&RPSLOHGSURJUDPVFRQWDLQELQDU\ DQG FRGHUDWKHUWKDQKXPDQUHDG
DEOHWH[WKHQFHWKHQDPHRIWKLVGLUHFWRU\+RZHYHU\RXOOSUREDEO\ILQGVRPH
KXPDQUHDGDEOHVFULSWILOHVLQWKLVGLUHFWRU\WRR
GDWD
&RQWDLQVDVXEGLUHFWRU\KROGLQJWKHGDWDDQGLQGH[ILOHVIRUHDFKGDWDEDVHRQWKH
VHUYHU$QHZO\LQVWDOOHGDQGFRQILJXUHG0\64/VHUYHUFRPHVZLWKWKHmysqlDQG
testGDWDEDVHVVR\RXOOKDYHDWOHDVWWKHVHWZRVXEGLUHFWRULHVLQ\RXUGDWDGLUHF
WRU\7KHmysqlGDWDEDVHFRQWDLQVLQIRUPDWLRQRQXVHUDFFHVVSULYLOHJHVWRGLIIHUHQW
GDWDEDVHVDVLWVQDPHVXJJHVWVWKHtestGDWDEDVHFDQEHXVHGIRUWHVWLQJ
GRFV
&RQWDLQVWKH0\64/PDQXDO8QGHU/LQX[DQG0DF26;WKHPDQXDOILOHLVLQ
DQLQIRILOHFDOOHGP\VTOLQIR\RXFDQYLHZWKLVE\FKDQJLQJLQWRWKHGRFVGLUHFWRU\
DQGW\SLQJ
$ info mysql.info

7RVHHKRZWRQDYLJDWHLQWKHinfoYLHZHUSUHVVWKH"NH\LQWKHSURJUDP
8QGHU:LQGRZVWKHPDQXDOILOHLVLQWKH0LFURVRIW+70/+HOSILOHFDOOHGPDQ
XDOFKP\RXFDQYLHZWKLVILOHE\GRXEOHFOLFNLQJRQWKHILOHLFRQRUE\FKDQJLQJ
WRWKH'RFVGLUHFWRU\DQGW\SLQJ
C:\Program Files\MySQL\MySQL Server 5.0> hh manual.chm

,QSUDFWLFH\RXUHPRUHOLNHO\WRILQGLWPRUHFRQYHQLHQWWRUHIHUWRWKH+70/
YHUVLRQRIWKH0\64/PDQXDODYDLODEOHIURPWKH0\64/$%ZHEVLWH

The Contents of the MySQL Directory | 81

LQFOXGH
&RQWDLQVKHDGHUILOHVIRUXVHZKHQGHYHORSLQJSURJUDPVWKDWXVH0\64/OLEUDULHV
OLE
&RQWDLQVOLEUDU\ILOHVWKDWFDQEHXVHGE\WKLUGSDUW\SURJUDPVWRDFFHVVWKH0\64/
VHUYHU
P\VTOWHVW
&RQWDLQVGHWDLOHGWHVWV\RXFDQUXQWRFRQILUPWKDW\RXUVHUYHULVZRUNLQJSURSHUO\
VTOEHQFK
&RQWDLQVGHWDLOHGWHVWVWKDWFDQEHXVHGWRPHDVXUHGDWDEDVHVHUYHUSHUIRUPDQFH
VFULSWV
&RQWDLQVVFULSWVVXFKDVP\VTOBLQVWDOOBGEWKDWPD\EHQHHGHGIRUVHUYHUDGPLQ
LVWUDWLRQ8QGHU:LQGRZV\RXFDQWUXQPRVWRIWKHVFULSWVGLUHFWO\EXWWKHUHDUH
VHYHUDOILOHVWKDWFRQWDLQ64/VWDWHPHQWVWRGRFHUWDLQWDVNVZKLFKFDQEHUXQ
WKURXJKWKH0\64/VHUYHU
VKDUH
&RQWDLQVFRQILJXUDWLRQILOHVVXFKDVWUDQVODWLRQVRI0\64/GLVSOD\PHVVDJHVIRU
GLIIHUHQWODQJXDJHV
2WKHUGLUHFWRULHVWKDWDUHW\SLFDOO\SUHVHQWRQDIXOOLQVWDOODWLRQLQFOXGH
PDQ
&RQWDLQV LQIRUPDWLRQ RQ VRPH 0\64/ SURJUDPV LQ WKH FODVVLF 8QL[ PDQXDO
IRUPDW
,I\RXLQVWDOOHG0\64/XVLQJ530VRUDQLQVWDOOHU\RXVKRXOGEHDEOHWRYLHZWKH
PDQXDOSDJHVE\W\SLQJmanIROORZHGE\WKHFRPPDQGQDPHIRUH[DPSOH
$ man mysqldump

,I\RXXVHGDJ]LSSHGWDUDUFKLYH\RXFDQDGGWKH0\64/PDQGLUHFWRU\WRWKH
VHDUFK SDWK XVHG E\ WKH PDQXDO SDJHYLHZHU SURJUDP 7R GR WKLV HGLW WKH
ILOHEDVKUFLQ\RXUKRPHGLUHFWRU\ aEDVKUF DQGDGGWKLVOLQHWRWKHHQG
export MANPATH=$MANPATH:/usr/local/mysql/man

7RDFWLYDWHWKHFKDQJHVW\SH$source ~/.bashrcORJRXWDQGORJLQDJDLQRUVLPSO\
UHVWDUWWKHFRPSXWHU
)LQDOO\\RXFDQDOZD\VYLHZWKHVHILOHVE\W\SLQJDFRPPDQGVXFKDVWKHRQHEHORZ
XVLQJWKHP\VTOGXPSILOHDVDQH[DPSOH 
$ man /usr/local/mysql/man/man1/mysqldump.1

VXSSRUWILOHV
&RQWDLQVILOHVDQGVFULSWVXVHGWRFRQILJXUHWKHVHUYHULQFOXGLQJRQHV\RXFDQXVH
RUPRGLI\IRU\RXUV\VWHP

82 | Chapter 2:Installing MySQL

WHVWV
&RQWDLQVVDPSOH3HUOSURJUDPVWRFRQQHFWWRWKH0\64/VHUYHUDQGSHUIRUPYDU
LRXVVLPSOHGDWDEDVHRSHUDWLRQV
,I\RXLQVWDOO0\64/XVLQJSDFNDJHVSURYLGHGE\\RXU/LQX[GLVWULEXWLRQVWKHGLUHF
WRU\ORFDWLRQVZLOOYDU\IURPWKHVWDQGDUGOD\RXW)RUH[DPSOHWKHH[HFXWDEOHILOHV
VXFKDVP\VTOGBVDIHP\VTODQGP\VTODGPLQDUHW\SLFDOO\LQVWDOOHGLQXVUELQDQG
WKHGDWDGLUHFWRU\LVORFDWHGDWYDUOLEP\VTO6LPLODUO\WKHORJILOHVPD\EHVWRUHGLQ
WKH YDUORJP\VTOG GLUHFWRU\ RU WKH PDLQ VHUYHU ORJ PD\ EH WKH ILOH YDUORJP\VTO
&OHDUO\WKHUHVDWUDGHRIIEHWZHHQHDV\LQVWDOODWLRQXVLQJ530SDFNDJHVDQGWKHGLV
SDUDWHORFDWLRQRI0\64/UHODWHGILOHVZKHQWKHVHUYHULVLQVWDOOHGLQWKLVZD\7KH
;$033ZHESDJHKDVDVHFWLRQXQGHU%DVLF4XHVWLRQVQDPHG:KHUHLV:KDW"
ZKLFKOLVWVWKHORFDWLRQVRIFRQILJXUDWLRQILOHVDQGFRPSRQHQWV

Configuring and Controlling the Apache Web Server


)RUDOOFKDSWHUVXSWKURXJK&KDSWHU\RXZLOOQHHGDFFHVVWRRQO\D0\64/VHUYHU
7RSUDFWLFHWKHH[DPSOHVLQ&KDSWHUVDQG\RXOOQHHGDQ$SDFKHZHEVHUYHU
ZLWKVXSSRUWIRUWKH3+3ODQJXDJH,Q&KDSWHU\RXOOOHDUQKRZWRUXQ3HUOVFULSWV
RQD$SDFKHZHEVHUYHU
,I\RXKDYHQWLQVWDOOHG$SDFKHXVLQJ;$033\RXVKRXOGFKHFNZKHWKHU\RXKDYH
$SDFKHLQVWDOOHGDQGLIVRZKHWKHULWVXSSRUWV3+3<RXVKRXOGDOVRFKHFNZKHWKHU
\RXU3+3HQJLQHVXSSRUWV\RXULQVWDOODWLRQRI0\64/
,I\RXYHXVHGWKH;$033SDFNDJH\RXFDQUHOD[NQRZLQJWKDWWKLVKDVEHHQGRQHIRU
\RX<RXDOVRNQRZKRZWRVWDUWDQGVWRS$SDFKHXVLQJWKHRSWODPSSODPSSVFULSW
/LQX[ WKH;$033FRQWUROSDQHO :LQGRZV RUWKH$SSOLFDWLRQV[DPSS[DPSSILOHV
PDPSSVFULSW 0DF26; ,I\RXUHXVLQJ/LQX[DQGDUHQWXVLQJ;$033\RXOOQHHG
WRHQVXUHWKDW\RXUZHEVHUYHUFDQZRUNZLWK\RXUGDWDEDVHVHUYHU
$SDFKHLVLQVWDOOHGDVSDUWRIWKHVWDQGDUG0DF26;FRQILJXUDWLRQZKHUHLWVUHIHUUHG
WRDV3HUVRQDO:HE6KDULQJ<RXFDQFRQILJXUHLWIURPWKH6KDULQJVHFWLRQRIWKH6\VWHP
3UHIHUHQFHVZLQGRZ+RZHYHUZHOOUHO\RQWKH;$033LQVWDOODWLRQLQWKLVERRNVR
JRWRWKH6KDULQJVHWWLQJVDQGHQVXUHWKDW3HUVRQDO:HE6KDULQJLVVZLWFKHGRII
,QWKLVVHFWLRQZHORRNDWKRZWRFKHFNWKDW\RXUZHEVHUYHULVUXQQLQJDQGKRZWR
ILQGWKHGLUHFWRU\IURPZKLFKLWVHUYHVILOHVWR\RXUEURZVHU:HDOVRH[SODLQZKHUHWR
ILQG WKH $SDFKH FRQILJXUDWLRQ ILOH DQG HUURU ORJ )LQDOO\ ZH GHVFULEH KRZ \RX FDQ
FRQWUROWKH$SDFKHZHEVHUYHURQD/LQX[V\VWHPZKHUH\RXKDYHQWXVHG;$033DQG
KRZWRFKHFNWKDW\RXUZHEVHUYHULVFRUUHFWO\FRQILJXUHGIRUWKHZRUNWKDW\RXOOGR
LQWKLVERRN
<RXFDQWHVWZKHWKHUDZHEVHUYHULVUXQQLQJRQ\RXUPDFKLQHE\RSHQLQJDEURZVHU
IRUH[DPSOH)LUHIR[,QWHUQHW([SORUHURU6DIDUL DQGW\SLQJLQWKHDGGUHVVKWWS
ORFDOKRVW,I\RXUEURZVHUUHSRUWVWKDWLWFDQWRSHQWKLVSDJH\RXFDQWU\WRVWDUWWKH

Configuring and Controlling the Apache Web Server | 83

VHUYHU E\ XVLQJ WKH DSSURSULDWH ;$033 VWDUWXS FRPPDQG RU WKH apachectl RU
DSDFKHFWO FRPPDQGV GHVFULEHG ODWHU LQ WKLV VHFWLRQ LQ 6WDUWLQJ DQG 6WRSSLQJ
$SDFKH
,I\RXVHHVRPHUHVSRQVHZKHQ\RXWU\WRORDGDSDJHLQ\RXUEURZVHU\RXFDQWU\
SODFLQJFRQWHQWLQWKHVHUYHUVGRFXPHQWURRW/HWVVHHKRZWRILQGWKLVGLUHFWRU\

The Apache Document Root


7KHGRFXPHQWURRWLVWKHEDVHRUSDUHQWGLUHFWRU\LQZKLFKWKHZHEVHUYHUVWRUHVZHE
UHVRXUFHV VXFKDV+70/3+3RULPDJHILOHV DQGVHUYHVWKHPWRZHEEURZVHUV)RU
WKH$SDFKHZHEVHUYHUFRPPRQORFDWLRQVRIWKHGRFXPHQWURRWLQFOXGH
/LQX[
YDUZZZKWPOYDUZZZKWGRFVRUYDUZZZIRUDGLVWULEXWLRQLQVWDOODWLRQXVU
ORFDODSDFKHKWGRFV IRU D VWDQGDORQH LQVWDOODWLRQ DQG RSWODPSSKWGRFV IRU DQ
;$033LQVWDOODWLRQ
:LQGRZV
&?3URJUDP)LOHV?[DPSS?KWGRFVIRUDQ;$033LQVWDOODWLRQDQG&?3URJUDP)LOHV
?$SDFKH*URXS?$SDFKH?KWGRFVLI$SDFKHLVLQVWDOOHGLQGHSHQGHQWO\
0DF26;
$SSOLFDWLRQV[DPSSKWGRFVIRUDQ;$033LQVWDOODWLRQDQG/LEUDU\:HE6HUYHU
'RFXPHQWVIRUWKHLQVWDOODWLRQRI$SDFKHWKDWLVSDUWRIWKHVWDQGDUG0DF26;
FRQILJXUDWLRQ
,I\RXUHXVLQJD/LQX[V\VWHPDQGGRQWNQRZZKHUH\RXUVHUYHUVGRFXPHQWURRWLV
VHDUFKIRULWE\IROORZLQJWKHVHLQVWUXFWLRQV
)LUVWORJLQDVWKHV\VWHPVXSHUXVHUE\W\SLQJsu -LQDWHUPLQDOZLQGRZ7KHQWU\WR
OLVWWKHFRPPRQGRFXPHQWURRWGLUHFWRULHVWKDWZHOLVWHGSUHYLRXVO\
# ls --directory /var/www/html /var/www/htdocs /var/www /usr/local/apache/htdocs
/bin/ls: /var/www/htdocs: No such file or directory
/bin/ls: /usr/local/apache/htdocs: No such file or directory
/var/www /var/www/html

7KH--directoryRSWLRQDVNVWKHlsSURJUDPWROLVWRQO\GLUHFWRU\QDPHVDQGQRWWKHLU
FRQWHQWV
,I \RX JHW DQ HUURU PHVVDJH IRU D GLUHFWRU\ WKDW GLUHFWRU\ GRHVQW H[LVW :KHUH WKH
GLUHFWRU\QDPHLVOLVWHGDVIRUYDUZZZDQGYDUZZZKWPODERYHWKHGLUHFWRU\H[LVWV
2QHRIWKHVHLVOLNHO\WREHWKHGRFXPHQWURRW,IQRQHRIWKHGLUHFWRULHVH[LVW\RXFDQ
WU\VHDUFKLQJ\RXUZKROHILOHV\VWHPIRUDGLUHFWRU\FDOOHGhtdocs
# find / -type d -name htdocs

%HSDWLHQWWKLVPD\WDNHDIHZPLQXWHV$Q\GLUHFWRU\LWILQGVLVOLNHO\WREHWKHGLUHFWRU\
URRWLIPRUHWKDQRQHLVIRXQG\RXOOQHHGWRH[SHULPHQWE\FUHDWLQJILOHVLQHDFKWR
GHWHUPLQHZKLFKLVWKHRQHXVHGE\\RXU$SDFKHLQVWDOODWLRQ
84 | Chapter 2:Installing MySQL

The Apache Configuration File


7KH$SDFKHFRQILJXUDWLRQILOHLVXVXDOO\FDOOHGKWWSGFRQIDQGLVIRXQGLQRQHRIVHYHUDO
FRPPRQORFDWLRQV
/LQX[
HWFKWWSGFRQIKWWSGFRQIRUHWFDSDFKHFRQIKWWSGFRQIIRUDQLQVWDOODWLRQIURP/L
QX[ GLVWULEXWLRQ ILOHV XVUORFDODSDFKHFRQIKWWSGFRQI IRU DQ LQVWDOODWLRQ IURP
$SDFKH)RXQGDWLRQILOHVDQGRSWODPSSHWFKWWSGFRQIIRUDQ;$033LQVWDOODWLRQ
:LQGRZV
&?3URJUDP)LOHV?[DPSS?DSDFKH?FRQI?KWWSGFRQIIRUDQ;$033LQVWDOODWLRQ
0DF26;
$SSOLFDWLRQV[DPSSHWFKWWSGFRQI IRU DQ ;$033 LQVWDOODWLRQ DQG HWFKWWSG
KWWSGFRQIIRUWKHLQVWDOODWLRQRI$SDFKHWKDWLVSDUWRIWKHVWDQGDUG0DF26;
FRQILJXUDWLRQ
,WVLQFUHDVLQJO\FRPPRQWRILQGVHUYHUVFRQILJXUHGLQDPRGXODUZD\ZLWKDPDLQ
FRQILJXUDWLRQILOHWKDWUHDGVLQRWKHUILOHVIRUH[DPSOHXQGHUWKHGLUHFWRU\HWFKWWSG
PRGXOHVGRQD/LQX[V\VWHPRULQWKHDSDFKH?FRQI?H[WUDGLUHFWRU\XQGHUWKH;$033
LQVWDOOGLUHFWRU\)RUH[DPSOHGLUHFWLYHVVSHFLILFWR3+3DUHRIWHQVWRUHGLQWKHILOHHWF
KWWSGPRGXOHVGBPRGBSKSFRQI
,I\RXPDNHFKDQJHVWRWKH$SDFKHFRQILJXUDWLRQILOH\RXQHHGWRUHVWDUWWKHZHEVHUYHU
WRSXWWKHFKDQJHVLQWRHIIHFW

The Apache Error Log


&RPPRQORFDWLRQVIRUWKHZHEVHUYHUHUURUORJLQFOXGH
/LQX[
XVUORFDODSDFKHORJVHUURUORJ IRU $SDFKH LQVWDOOHG IURP $SDFKH )RXQGDWLRQ
ILOHVYDUORJKWWSGHUURUBORJRUYDUORJDSDFKHHUURUORJIRUDQLQVWDOODWLRQXVLQJ
GLVWULEXWLRQSDFNDJHVDQGRSWODPSSORJVHUURUBORJIRUDQ;$033LQVWDOODWLRQ
:LQGRZV
&?3URJUDP)LOHV?[DPSS?DSDFKH?ORJV?HUURUORJIRUDQ;$033LQVWDOODWLRQ
0DF26;
$SSOLFDWLRQV[DPSS[DPSSILOHVORJVHUURUBORJ IRU DQ ;$033 LQVWDOODWLRQ
DQGSULYDWHYDUORJKWWSGHUURUBORJIRUWKH$SDFKHLQVWDOODWLRQWKDWLVSDUWRIWKH
VWDQGDUG0DF26;FRQILJXUDWLRQ

Starting and Stopping Apache


$SDFKHZHEVHUYHULQVWDOODWLRQVXVXDOO\LQFOXGHDFRQWUROVFULSWFDOOHG apachectlWKDW
\RXFDQXVHWRVWDUWRUVWRSWKHVHUYHU2QQHZHULQVWDOODWLRQVWKLVLVVRPHWLPHVFDOOHG

Configuring and Controlling the Apache Web Server | 85

apache2ctlLIWKHH[DPSOHVEHORZGRQ
WZRUNIRU\RXWU\UHSODFLQJ apachectlZLWK
apache2ctl<RXFDQJHQHUDOO\VWDUWDQLQVWDOOHG$SDFKHVHUYHUE\XVLQJWKHFRPPDQG
# apachectl start

,IWKLVIDLOVRQD/LQX[RU0DF26;V\VWHPEHFDXVHWKHFRPPDQGLVQ
WIRXQGXVHWKH
findFRPPDQGWRORFDWHWKHDSDFKHFWOVFULSWILOH
# find / -type f -name apachectl

2QD:LQGRZVV\VWHPXVHWKHEXLOWLQVHDUFKLQVWHDGRIWKH findFRPPDQG,ILWV
UHSRUWHGDVEHLQJLQVD\XVUORFDODSDFKHELQDSDFKHFWOWU\VWDUWLQJ$SDFKHXVLQJWKDW
IXOOSDWK
# /usr/local/apache/bin/apachectl start

$SDFKHVKRXOGVWDUWDQG\RXVKRXOGEHDEOHWRWHVWLWE\ORDGLQJWKHZHESDJHKWWS
ORFDOKRVWLQ\RXUEURZVHU
<RXFDQVWRSWKHVHUYHUE\W\SLQJ
# apachectl stop

,I\RXPDNHDFKDQJHWRWKHZHEVHUYHUFRQILJXUDWLRQILOH\RXFDQVWRSDQGVWDUWWKH
VHUYHULQRQHJRE\W\SLQJ
# apachectl restart

,I\RXKDYHDQ;$033LQVWDOODWLRQ\RXFDQPRUHHDVLO\VWDUWDQGVWRSWKH$SDFKHZHE
VHUYHUXVLQJWKH;$033FRQWUROVFULSWV /LQX[DQG0DF26; RUFRQWUROSDQHO :LQ
GRZV (DUOLHUZHGHVFULEHGKRZWRGRWKLVDORQJVLGHRXU;$033LQVWDOODWLRQLQVWUXF
WLRQVIRUHDFKRSHUDWLQJV\VWHP

Checking Whether Your Apache Installation Supports PHP


2QFH \RXYH IRXQG \RXU GRFXPHQW URRW DQG KDYH $SDFKH UXQQLQJ \RX FDQ FKHFN
ZKHWKHULWFDQVHUYH3+3UHTXHVWVDQGZKHWKHULWV3+3HQJLQHKDVVXSSRUWIRU0\64/
8VLQJDWH[WHGLWRUFUHDWHWKHILOHSKSLQIRSKSVRWKDWLWKDVRQHOLQHZLWKWKHIROORZLQJ
FRQWHQWV
<?php phpinfo(); ?>

6DYHWKLVILOHZLWKWKHQDPHSKSLQIRSKSLQWKHGRFXPHQWURRWGLUHFWRU\2QD/LQX[RU
0DF26;V\VWHP\RXFDQFKHFNWKHILOHSHUPLVVLRQVE\OLVWLQJWKHILOHSDWKBWRBGRFX
PHQWBURRW!SKSLQIRSKSIRUH[DPSOH
$ ls -al /var/www/html/phpinfo.php
-rw------- 1 saied saied 20 Jul 22 11:35 /var/www/html/phpinfo.php

+HUHRQO\WKHXVHUZKRRZQVWKHILOH saied KDVSHUPLVVLRQWRUHDGDQGZULWHWKHILOH


)RUWKHZHEVHUYHUWRUHDGDILOHWKHILOHVKRXOGEHUHDGDEOHE\HYHU\RQH<RXFDQVHW
WKHDSSURSULDWHSHUPLVVLRQVDVIROORZV
$ chmod u=rw,g=r,o=r path_to_document_root/phpinfo.php

86 | Chapter 2:Installing MySQL

,I\RXFKHFNWKHSHUPLVVLRQVDJDLQ\RXVKRXOGILQGWKDWRWKHUXVHUVFDQDFFHVVWKHILOH
ZHYHJUDQWHGWKHJURXSUHDGDFFHVVDVZHOOEXWWKDWVQRWVWULFWO\QHFHVVDU\
$ ls -al path_to_document_root/phpinfo.php
-rw-r--r-- 1 saied saied 20 Jul 22 11:35 /var/www/html/phpinfo.php

$FRPPRQFDXVHRI$FFHVV'HQLHGSUREOHPVLVWKHILOHRUGLUHFWRU\QRWEHLQJUHDGDEOH
7KHZHEVHUYHUDOVRQHHGVH[HFXWHDFFHVVWRWKHGLUHFWRU\FRQWDLQLQJWKHILOHDQGDOO
WKHGLUHFWRULHVDERYHLW2QVRPHV\VWHPVRQO\WKHVXSHUXVHUFDQZULWHWRWKHGRFXPHQW
URRWVR\RXPD\DOVRQHHGWRDOORZZULWHDFFHVVWRWKHGRFXPHQWURRW6HH5HVWULFWLQJ
DFFHVVWRILOHVDQGGLUHFWRULHVDWWKHEHJLQQLQJRIWKLVFKDSWHUIRUPRUHGLVFXVVLRQRI
ILOHDQGGLUHFWRU\SHUPLVVLRQV
$IWHUFUHDWLQJWKHILOHUXQWKHVFULSWE\UHTXHVWLQJWKHDGGUHVVKWWSORFDOKRVWSKSLQIR
SKSZLWKDZHEEURZVHUWKDWLVUXQQLQJRQWKHVDPHPDFKLQHDVWKHZHEVHUYHU,I\RX
VHHDUHDGDEOHZHESDJHDQGQRWMXVWZKDW\RXW\SHGLQWRWKHILOHWKHQ\RXUZHE
VHUYHUKDV3+3VXSSRUW6HDUFKWKLVSDJHIRUWKHZRUGP\VTOLI\RXILQGDVHFWLRQ
ODEHOHGP\VTO DQGSHUKDSVDQRWKHUODEHOHGP\VTOL \RXU3+3LQVWDOODWLRQFDQWDON
WR\RXU0\64/VHUYHU
,I\RXMXVWVHHWKHFRQWHQWVRIWKHSKSLQIRSKSILOHRU\RXUEURZVHUWULHVWRGRZQORDG
WKHILOH\RXU$SDFKHVHUYHUPD\QRWVXSSRUW3+3+RZHYHUWKHUHDUHWKUHHFRPPRQ
SUREOHPVWKDWFDQFDXVHWKLVWRKDSSHQHYHQZKHQ\RXUVHUYHUGRHVVXSSRUW3+3
<RXU3+3WHVWILOHVGRQWKDYHWKHH[WHQVLRQSKS,IWKLVLVWKHFDVH\RXUZHEVHUYHU
ZLOO GHOLYHU WKH VRXUFH FRGH DQG QRW UXQ WKH VFULSWV 5HQDPH \RXU VFULSWV ZLWK
DSKSH[WHQVLRQ
<RXUZHEVHUYHULVQWFRQILJXUHGWRUXQWKH3+3HQJLQHZKHQDILOHZLWKWKHSKS
H[WHQVLRQLVUHTXHVWHG,Q$SDFKHWKLVLVFRQWUROOHGE\WKH$SDFKHFRQILJXUDWLRQ
ILOHGHVFULEHGHDUOLHULQ7KH$SDFKH&RQILJXUDWLRQ)LOH2SHQWKHFRQILJXUDWLRQ
ILOHDQGVHDUFKIRUWKHIROORZLQJOLQH
AddType application/x-httpd-php .php

,IWKLVOLQHLVFRPPHQWHGRXWWKDWLVWKHUHVDSRXQGRUKDVKV\PERO # EHIRUH
WKHWH[WRQWKHOLQHXQFRPPHQWWKHOLQHE\UHPRYLQJWKLVV\PEROVDYHWKHILOH
DQGUHVWDUWWKHZHEVHUYHUIROORZLQJWKHLQVWUXFWLRQVOLVWHGHDUOLHULQ6WDUWLQJDQG
6WRSSLQJ$SDFKH,IWKHOLQHLVQWWKHUHDWDOODGGLWDQGUHVWDUWWKHVHUYHU
<RXU$SDFKH3+3PRGXOHLVQWEHLQJORDGHGE\$SDFKH2SHQWKH$SDFKHFRQ
ILJXUDWLRQILOHDQGFKHFNZKHWKHURQHRIWKHIROORZLQJOLQHVDSSHDUVLQWKHILOH
LoadModule php4_module
LoadModule php5_module

libexec/libphp4.so
libexec/libphp5.so

$GGRQHRIWKHVHOLQHVLIWKH\GRQWDSSHDULQWKHILOH7U\XVLQJWKH php5_module
OLQHILUVW,IERWKOLQHVKDYHWKHSRXQGRUKDVKV\PEROEHIRUHWKHWH[WRQWKHOLQH
UHPRYHWKHFRPPHQWV\PEROIURPRQHRIWKHOLQHVWRDFWLYDWHWKH3+3PRGXOH,I
\RXFKDQJHWKH$SDFKHFRQILJXUDWLRQILOHUHVWDUWWKHZHEVHUYHU

Configuring and Controlling the Apache Web Server | 87

,I\RXUHVXUHWKDW\RXKDYH$SDFKHEXWQRW3+3RUWKDW\RXU3+3LQVWDOODWLRQGRHV
QRWVXSSRUW0\64/WKHHDVLHVWVROXWLRQLVWRUHLQVWDOOE\IROORZLQJWKHLQVWUXFWLRQV
HDUOLHULQWKLVFKDSWHU

Setting up Perl
&KDSWHUVDQGUHTXLUHWKDW\RXKDYHDZRUNLQJLQVWDOODWLRQRI3HUO3HUOLV
DYDLODEOHDVVWDQGDUGRQDOPRVWDOO/LQX[DQG0DF26;V\VWHPVDQGLWLVLQFOXGHGLQ
WKH;$033LQWHJUDWHGSDFNDJHVR\RXGRQWQHHGWRLQVWDOOLWVHSDUDWHO\)RU&KDSWHUV
DQG\RXOOQHHGWZR3HUOH[WHQVLRQSDFNDJHVRUPRGXOHV:HOOXVHWKH3HUO'%,
'DWDEDVH,QWHUIDFH PRGXOHLQ&KDSWHUWRWDONWRD0\64/VHUYHUDQGWKH3HUO&*,
&RPPRQ*DWHZD\,QWHUIDFH PRGXOHLQ&KDSWHUWRZULWHFOHDQDQGUHDGDEOHVFULSWV
WKDWFDQEHUXQE\DZHEVHUYHU,I\RXUHQRWSODQQLQJWRZULWHFRPSOH[3HUOVFULSWVIRU
DZHEDSSOLFDWLRQ\RXFDQPDQDJHZLWKRXWWKH&*,PRGXOHEXW\RXOOGHILQLWHO\QHHG
WKH'%,PRGXOHWRXVH3HUOIRULQWHUDFWLRQZLWK0\64/

Checking Your Existing Setup


7RUXQ3HUOVFULSWV\RXQHHGWRNQRZZKHUHWKH3HUOLQWHUSUHWHU FDOOHGperl LVLQVWDOOHG
RQ\RXUV\VWHP)RU/LQX[ZHOOXVHWKHLQVWDQFHRI3HUOWKDWFRPHVZLWKWKHGLVWULEX
WLRQWRILQGZKHUHWKLVLVORFDWHGXVHWKHwhichFRPPDQG
$ which perl
/usr/bin/perl

,QWKLVH[DPSOHWKH3HUOLQWHUSUHWHULVWKHILOHXVUELQSHUO
)RU:LQGRZVDQG0DF26;V\VWHPVZHOOXVHWKHLQVWDQFHRI3HUOWKDWFRPHVZLWK
;$033 2Q D :LQGRZV V\VWHP WKH ;$033 3HUO LQWHUSUHWHU LV &?3URJUDP )LOHV
?[DPSS?SHUO?ELQ?SHUOH[H ZKLOH RQ D 0DF 26 ; V\VWHP WKH ;$033 3HUO LQWHUSUHWHU
LV$SSOLFDWLRQV[DPSS[DPSSILOHVELQSHUO<RXFDQDOVRXVHWKH0DF26;V\VWHPGH
IDXOWLQVWDOODWLRQ XVUELQSHUO EXWDVZHGLVFXVVODWHULQ,QVWDOOLQJ3HUOPRGXOHVXQGHU
0DF26;ZHUHFRPPHQG\RXVWLFNZLWKWKH;$033LQVWDOODWLRQIRUFRQVLVWHQF\
/HWVVWDUWE\H[DPLQLQJZKDWWKHYHUVLRQRIWKLV3HUOLQVWDOODWLRQLV2QD/LQX[V\VWHP
W\SH
$ perl --version

2QD:LQGRZVRU0DF26;V\VWHPWKH;$0333HUOLQWHUSUHWHULVQRWLQWKHV\VWHP
SDWKVR\RXVKRXOGVSHFLI\WKHIXOOSDWKRQD:LQGRZVV\VWHPDV
C:\> C:\Program Files\xampp\perl\bin\perl --version

RURQD0DFV\VWHPDV
$ /Applications/xampp/xamppfiles/bin/perl --version

88 | Chapter 2:Installing MySQL

<RXVKRXOGHLWKHUDGGWKLVELQGLUHFWRU\WR\RXUV\VWHPSDWKIROORZLQJWKHLQVWUXFWLRQV
HDUOLHULQWKLVFKDSWHULQ(UURU0HVVDJH$ERXW0\64/([HFXWDEOH3URJUDPV1RW%HLQJ
)RXQGRU5HFRJQL]HGRUVSHFLI\WKHIXOOSDWKWRWKH3HUOLQWHUSUHWHUZKHQHYHU\RXVHH
perlIRUWKHUHPDLQGHURIWKLVFKDSWHU
,I3HUOLVDYDLODEOHWKHFRPPDQGZLOOGLVSOD\VHYHUDOOLQHVRIWH[WGHVFULELQJWKHYHUVLRQ
DQGRWKHUFRQILJXUDWLRQGHWDLOV,I3HUOLVQRWLQVWDOOHG\RXOOVHHDQHUURUPHVVDJHVD\LQJ
VRPHWKLQJOLNHcommand not found /LQX[RU0DF26; RU'perl' is not recognized
as an internal or external command, operable program or batch file :LQGRZV 
<RXFDQILQGPRUHLQIRUPDWLRQRQREWDLQLQJDQGLQVWDOOLQJ3HUODWKWWSZZZSHUORUJ
JHWKWPODQGPRUHLQIRUPDWLRQRQLQVWDOOLQJPRGXOHVDWKWWSZZZFSDQRUJPRGXOHV
,167$//KWPO)RUD/LQX[V\VWHPGRZQORDGDQGLQVWDOOWKH3HUOSDFNDJHIRU\RXU
GLVWULEXWLRQDFFRUGLQJWRWKHLQVWUXFWLRQVLQ,QVWDOOLQJ0\64/$SDFKH3+3DQG3HUO
RQ/LQX[8VLQJ'LVWULEXWLRQ3DFNDJHV)RUD:LQGRZVRU0DF26;V\VWHPFKHFN
WKDW\RXYHLQVWDOOHG;$033FRUUHFWO\
2QFH\RXNQRZWKDW3HUOLVLQVWDOOHG\RXFDQWHVWZKHWKHUWKH'%,DQG&*,PRGXOHV
DUHLQVWDOOHGE\DVNLQJWKH3HUOLQWHUSUHWHUWRXVHWKHVHPRGXOHVWRUXQDQHPSW\3HUO
VFULSW7RFKHFNZKHWKHUWKH'%,PRGXOHLVLQVWDOOHGW\SH
$ perl -mDBI -e ''

,I\RXVHHDQHUURUPHVVDJHWKDW3HUO&DQWORFDWH'%,SP\RXOOQHHGWRLQVWDOOWKH
PRGXOH\RXUVHOI6LPLODUO\FKHFNZKHWKHUWKH&*,PRGXOHLVLQVWDOOHGE\W\SLQJ
$ perl -mCGI -e ''

,IWKH'%,PRGXOHLVLQVWDOOHG\RXVKRXOGDOVRFKHFNZKHWKHUWKH0\64/GDWDEDVH
GULYHU '%' LVLQVWDOOHG$QHDV\ZD\WRGRWKLVLVWRDVN3HUOWRSULQWRXWDOOWKHGULYHUV
WKDWDUHDYDLODEOH
$ perl -e "use DBI; foreach $d (DBI->available_drivers()){print $d;}"
DBMExamplePFileSpongemysql

,I\RXGRQWVHHWKHOHWWHUVP\VTO\RXOOQHHGWRLQVWDOOWKH0\64/GDWDEDVHGULYHU

Installing the Perl DBI and CGI Modules


,I\RXIRXQGWKDW\RXQHHGWRLQVWDOOWKH&*,RU'%,PRGXOHRUWKH0\64/'%'WKHQ
\RX QHHG WR IROORZ WKH VWHSV RXWOLQHG LQ WKH IROORZLQJ VHFWLRQV IRU HDFK RSHUDWLQJ
V\VWHP

Installing Perl modules under Linux


7KHVWDQGDUGZD\WRLQVWDOO3HUOPRGXOHVLVWRJHW3HUOWRXVHWKH&3$1 &RPSUHKHQVLYH
3HUO$UFKLYH1HWZRUN PRGXOHWRLQVWDOOQHZPRGXOHVIURPWKH,QWHUQHW/RJLQDVWKH
V\VWHPURRWXVHUE\W\SLQJ su -DQGWKHQLQVWDOOWKH'%,PRGXOHWKH'%,0\64/
'DWDEDVH'ULYHUDQGWKH&*,PRGXOHE\UXQQLQJWKHIROORZLQJFRPPDQGVLQWXUQ

Setting up Perl | 89

# perl -MCPAN -e 'install DBI'


# perl -MCPAN -e 'install DBD::mysql;'
# perl -MCPAN -e 'install CGI;'

,IWKLVLVWKHILUVWWLPH\RXUHLQVWDOOLQJ3HUOPRGXOHVWKLVZD\\RXPD\EHSURPSWHGWR
DQVZHUDIHZTXHVWLRQV,WVJHQHUDOO\VDIHWRDQVZHUQRWRWKHTXHVWLRQ
Are you ready for manual configuration? [yes]

DQGOHDYHLWWR3HUOWRILJXUHRXWKRZWRIHWFKWKHUHTXLUHGSDFNDJHV,IDOOJRHVZHOO
\RXVKRXOGVHHUHDVVXULQJVWDWXVPHVVDJHVDV3HUOGRZQORDGVDQGLQVWDOOVHYHU\WKLQJ
3HUOPRGXOHVDUHDOVRDYDLODEOHIRULQGLYLGXDO/LQX[GLVWULEXWLRQVDQG\RXFDQGRZQ
ORDGDQGLQVWDOOWKHPPDQXDOO\)RU530EDVHGV\VWHPV\RXVKRXOGGRZQORDGDQG
LQVWDOOWKHSHUO'%,SDFNDJHIRU'%,WKHSHUO'%'P\VTOSDFNDJHIRUWKH'%,0\64/
GULYHUDQGWKHSHUO&*,SDFNDJHIRU&*,)RUH[DPSOHRQD5HG+DWRU)HGRUDV\VWHP
W\SH
# yum update perl-DBI perl-DBD-mysql perl-CGI

)RUD0DQGULYDRU0DQGUDNHV\VWHPW\SH
# urpmi perl-DBI perl-DBD-mysql perl-CGI

)RUD'HELDQEDVHGV\VWHPWKHSDFNDJHQDPHVDUHVOLJKWO\GLIIHUHQW
# apt-get install libdbi-perl libdbd-mysql-perl libcgi-pm-perl

Installing Perl modules under Windows


:LQGRZVGRHVQRWKDYH3HUOVXSSRUWE\GHIDXOWVR\RXQHHGWRLQVWDOOD3HUOLQWHUSUHWHU
\RXUVHOI7KH;$033SDFNDJH\RXLQVWDOOHGHDUOLHULQWKLVFKDSWHULQFOXGHVDPLQLPDO
3HUOVHWXS+RZHYHUWRLQFOXGHDUHDVRQDEOHVHWRI3HUOOLEUDULHVLQFOXGLQJWKH'%,DQG
&*,PRGXOHVDQGWKH0\64/'%'\RXVKRXOGDOVRYLVLWWKHZHESDJHKWWSZZZ
DSDFKHIULHQGVRUJHQ[DPSSKWPODQGGRZQORDGDQGLQVWDOOWKH3HUO$GGRQVLQVWDOOHU
7KLVZLOOKDYHDILOHQDPHVLPLODUWR[DPSSSHUODGGRQLQVWDOOHUH[H,QVWDOO
WKLVLQWKHVDPHGLUHFWRU\LQZKLFK\RXU;$033LQVWDOODWLRQLVORFDWHGZHDVVXPHWKLV
LV&?3URJUDP)LOHV?[DPSS
0DQ\RIWKH0\64/FRPPDQGOLQHSURJUDPVLQWKHVFULSWVGLUHFWRU\DUHLQIDFW3HUO
VFULSWVLI\RXZDQWWRXVHWKHVHVFULSWV\RXOOQHHGWRDVVRFLDWH3HUOILOHVZLWKWKH3HUO
LQWHUSUHWHU7RGRWKLV\RXWHOO:LQGRZVWKDWDOOILOHVZLWKWKHVWDQGDUG3HUOH[WHQ
VLRQSOPXVWEHUXQE\WKH3HUOLQWHUSUHWHU2SHQDFRPPDQGSURPSWZLQGRZDQG
W\SHWKHIROORZLQJWZROLQHV
C:\> ASSOC .pl=PerlScript
C:\> FTYPE PerlScript=C:\Program Files\xampp\perl\bin\perl.exe %1 %*

<RXFDQQRZUXQ3HUOVFULSWVE\GRXEOHFOLFNLQJRQWKHLFRQRIWKHVFULSWILOHRUE\
W\SLQJLQWKHQDPHRIWKHVFULSWILOHDWWKHFRPPDQGSURPSW<RXFDQILQGRWKHUWLSV
IRUXVLQJ3HUOXQGHU:LQGRZVLQWKH3HUO:LQ)$4 KWWSZZZSHUOFRPGRF)$4V
QWSHUOZLQIDTKWPO 

90 | Chapter 2:Installing MySQL

Installing Perl modules under Mac OS X


0DF26;FRPHVZLWKD3HUOLQWHUSUHWHUDOUHDG\LQVWDOOHGVRDIWHULQVWDOOLQJ;$033
IROORZLQJWKHLQVWUXFWLRQVHDUOLHULQWKLVFKDSWHU\RXOOKDYHWZR3HUOLQWHUSUHWHUVRQ
\RXUV\VWHPXVUELQSHUODQG$SSOLFDWLRQV[DPSS[DPSSILOHVELQSHUO<RXOOQHHGWR
FRQILJXUHWKH'%,DQG&*,PRGXOHVIRUDWOHDVWRQHRIWKHVH
6LQFHZHXVH;$033IRURWKHUSDUWVRIWKLVERRNRXULQVWUXFWLRQVZLOOIRFXVRQLW<RX
FDQVWLOOFRQILJXUHWKHV\VWHPGHIDXOW3HUOLQWHUSUHWHUE\W\SLQJXVUELQSHUOLQSODFH
RI$SSOLFDWLRQV[DPSS[DPSSILOHVELQSHUOLQRXULQVWUXFWLRQVEXWZHIHHOWKDW\RXOO
KDYHIHZHUGLIILFXOWLHVLI\RXZRUNZLWKWKH;$033LQVWDOODWLRQ
)RU;$033\RXQHHGWRGRWZRWKLQJVWRHQVXUHDKDVVOHIUHH'%'0\64/GULYHU
LQVWDOODWLRQ)LUVWWRDOORZWKH'%'LQVWDOODWLRQSURFHVVWRWHVWWKHLQVWDOODWLRQSURFHVV
XVLQJWKH0\64/VHUYHUVWDUW;$033E\W\SLQJ
$ sudo /Applications/xampp/xamppfiles/mampp start

7KHQFUHDWHDV\PEROLFOLQNWRWKH;$0330\64/VRFNHWILOHLQWKHGHIDXOW0\64/
VRFNHWILOHORFDWLRQWPSP\VTOVRFNZKLFKLVZKHUH3HUOZLOOH[SHFWWRILQGLW
$ ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /tmp/mysql.sock

6RPHYHUVLRQVRI;$033FRPHZLWKSHUPLVVLRQVHWWLQJVIRUWKH$SSOLFDWLRQV[DPSS
[DPSSILOHVOLESHUOGLUHFWRU\WKDWGRQWDOORZRUGLQDU\XVHUVWRDFFHVVLWFDXVLQJPRG
XOHVWRDSSHDUPLVVLQJ7RHQVXUHWKDWWKHSHUPLVVLRQVDUHFRUUHFWO\VHWW\SH
$ sudo chmod u=rwx,g=rx,o=rx /Applications/xampp/xamppfiles/lib/perl5

:HGLVFXVVHGSHUPLVVLRQVHWWLQJVLQ5HVWULFWLQJDFFHVVWRILOHVDQGGLUHFWRULHVDWWKH
EHJLQQLQJRIWKLVFKDSWHU
<RXFDQGRZQORDGDQGLQVWDOOWKH'%,PRGXOHWKH0\64/GULYHUDQGWKH&*,PRGXOH
IRUWKH;$0333HUOLQVWDOODWLRQE\W\SLQJWKHVHFRPPDQGVLQWXUQ
$ sudo /Applications/xampp/xamppfiles/bin/perl -MCPAN -e 'install DBI;'
$ sudo /Applications/xampp/xamppfiles/bin/perl -MCPAN -e 'install DBD::mysql;'
$ sudo /Applications/xampp/xamppfiles/bin/perl -MCPAN -e 'install CGI;'

<RXPD\EHSURPSWHGIRUWKHV\VWHPURRWXVHUSDVVZRUG<RXPD\DOVREHSURPSWHG
WRFRQILJXUHWKHGRZQORDGORFDWLRQVZLWKWKHPHVVDJH
Are you ready for manual configuration? [yes]

8QOHVV\RXUHYHU\VXUHRIZKDW\RXUHGRLQJMXVWW\SHnoDQGSUHVVWKH(QWHUNH\WROHW
3HUOILJXUHRXWKRZEHVWWRGRZQORDGWKHUHTXLUHGILOHV

Problems installing the Perl modules


,IGXULQJWKHLQVWDOOSURFHVV\RXVHHDQHUURUPHVVDJHVXFKDVWKLVRQH
Error: Unable to locate installed Perl libraries or Perl source code.
It is recommended that you install perl in a standard location before

Setting up Perl | 91

building extensions. Some precompiled versions of perl do not contain


these header files, so you cannot build extensions. In such a case,
please build and install your perl from a fresh perl distribution. It
usually solves this kind of problem.
(You get this message, because MakeMaker could not find
"/System/Library/Perl/5.8.1/darwin-thread-multi-2level/CORE/perl.h")
# Looks like your test died before it could output anything.
Running make test
Make had some problems, maybe interrupted? Won't test
Running make install
Make had some problems, maybe interrupted? Won't install

\RXOOQHHGWRLQVWDOOWKH$SSOH'HYHORSHU7RROV7KHVHDUHDYDLODEOHRQWKH0DF26;
LQVWDOOGLVNWKDWFDPHZLWK\RXUV\VWHP'RXEOHFOLFNRQWKH;FRGH7RROVPSNJLFRQRQ
WKHVFUHHQRIGLVNFRQWHQWVDQGIROORZWKHSURPSWVWRLQVWDOOWKLVSDFNDJH
<RXFDQDOVRJHWWKHODWHVWYHUVLRQRIWKH'HYHORSHU7RROVE\YLVLWLQJKWWSGHYHORSHU
DSSOHFRPDQGUHJLVWHULQJDVDGHYHORSHU LWVIUHH 2QFH\RXYHUHJLVWHUHGDQGORJJHG
LQWRWKHVLWHFOLFNRQWKH'RZQORDGVOLQNDQGWKHQFOLFNRQWKH'HYHORSHU7RROVOLQN
RQWKHGRZQORDGVSDJH)URPWKH'HYHORSHU7RROVGRZQORDGSDJHFOLFNRQWKHODWHVW
UHOHDVHRIWKH0DF6'.DWWKHWLPHRIZULWLQJWKLVZDVZLWKYHUVLRQDYDLODEOH
IRUWHVWLQJ
,I\RXVHHDPHVVDJHVLPLODUWRWKHRQHEHORZ
Writing Makefile for DBD::mysql
-- NOT OK
Running make test
Can't test without successful make
Running make install
make had returned bad status, install seems impossible

\RXOO QHHG WR EXLOG WKH GRZQORDGHG PRGXOH PDQXDOO\ )LUVW FKHFN WKH GLUHFWRULHV
FRQWDLQLQJWKHGRZQORDGHGPRGXOHVRXUFHILOHV
$ ls ~/.cpan/build
DBD-mysql-3.0002

DBI-1.48

,QWKLVH[DPSOHZHKDYHILOHVIRU'%,YHUVLRQDQG'%'0\64/GULYHUYHUVLRQ
7KHYHUVLRQV\RXGRZQORDGPD\EHGLIIHUHQW
1RZEXLOGWKHPRGXOHE\FKDQJLQJWRWKHFRUUHVSRQGLQJGLUHFWRU\ KHUHZHOOFRPSLOH
WKH'%,PRGXOH 
$ cd ~/.cpan/build/DBI-1.48

DQGXVLQJWKHmakeFRPPDQG
$ make

2QFHWKHPRGXOHKDVEHHQVXFFHVVIXOO\EXLOWLQVWDOOLWDVWKHV\VWHPURRWXVHU
$ sudo make install

5HSHDWWKLVSURFHVVIRUDQ\RWKHUPRGXOHV\RXQHHGWRFRPSLOH
92 | Chapter 2:Installing MySQL

Resources
<RXFDQILQGDGHWDLOHGUHIHUHQFHPDQXDORQ0\64/DQGVHYHUDOVDPSOHGDWDEDVHVRQ
WKH0\64/$%ZHEVLWHDWKWWSGHYP\VTOFRPGRFDOWKRXJKZHUHFRPPHQG\RXH[
SORUHWKHVHDIWHU\RXYHILQLVKHGUHDGLQJWKLVERRN
<RXFDQDOVRSDUWLFLSDWHLQ0\64/UHODWHGGLVFXVVLRQIRUXPVDQGPDLOLQJOLVWV6RPH
RIWKHVHDUHUXQE\0\64/$%7ROHDUQPRUHYLVLWWKH0\64/$%IRUXPVSDJHDW
KWWSIRUXPVP\VTOFRPDQGWKHOLVWVSDJHDWKWWSOLVWVP\VTOFRP
7KHUHVDOVRDORWRIKHOSIXOPDWHULDORQWKH0\64/FRPPXQLW\ZHEVLWH KWWSIRUJH
P\VTOFRP ,QSDUWLFXODUORRNDWWKHFROOHFWLRQRI PRVWO\XVHUFRQWULEXWHG GRFX
PHQWDWLRQE\IROORZLQJWKH:LNLOLQNQHDUWKHWRSRIWKHSDJH'RQWZRUU\LILWDOO
VHHPVRYHUZKHOPLQJDWILUVW\RXOOEHDEOHWRPDNHVHQVHRIPRVWRILWE\WKHWLPH\RX
UHDFKWKHHQGRIWKLVERRN
7ROHDUQPRUHDERXWLQVWDOOLQJWKHVRIWZDUHGHVFULEHGLQWKLVERRNZHUHFRPPHQGWKH
IROORZLQJUHVRXUFHV
)RUPRUHRQWKH:LQGRZV;3FRPPDQGSURPSWYLVLWWKH0LFURVRIW;3FRPPDQG
OLQH UHIHUHQFH DW KWWSZZZPLFURVRIWFRPUHVRXUFHVGRFXPHQWDWLRQZLQGRZV[S
DOOSURGGRFVHQXVQWFPGVBRPVS[0XFKRIWKLVLQIRUPDWLRQDSSOLHVWR9LVWDWRR
$XVHIXOOLVWRIIUHTXHQWO\DVNHGTXHVWLRQVDERXW;$033LQFOXGLQJGLVFXVVLRQRI
FRPPRQLQVWDOODWLRQSUREOHPVLVDYDLODEOHIURPWKH;$033ZHEVLWH KWWSZZZ
DSDFKHIULHQGVRUJHQ 
)RUGHWDLOHGLQIRUPDWLRQRQVHWWLQJXSDQGFRQILJXULQJWKH$SDFKHZHEVHUYHU
LQFOXGLQJDOLVWRIDOOWKHFRQILJXUDWLRQGLUHFWLYHVYLVLWKWWSKWWSGDSDFKHRUJ
7ROHDUQPRUHDERXWVKHOORUFRPPDQGSURPSWLQVWUXFWLRQVGRDZHEVHDUFKIRUOHDUQ
XQL[/LQX[ IRU/LQX[ OHDUQXQL[PDFRV[ IRU0DF26; RU:LQGRZVFRPPDQG
SURPSW IRU:LQGRZV 
7KURXJKRXWWKLVERRNZHSRLQWRXWVHFXULW\DVSHFWV\RXVKRXOGFRQVLGHUZKLOHLQVWDO
OLQJFRQILJXULQJDQGUXQQLQJ0\64/DQGDVVRFLDWHGZHEDSSOLFDWLRQV7REHWWHUXQ
GHUVWDQGVHFXULW\LVVXHVZHKLJKO\UHFRPPHQGWKHVHUHVRXUFHV
6HFXULW\(QJLQHHULQJ$*XLGHWR%XLOGLQJ'HSHQGDEOH'LVWULEXWHG6\VWHPVE\5RVV
-$QGHUVRQ :LOH\ 7KLVERRNLVDOVRDYDLODEOHRQOLQHDWKWWSZZZFOFDPDFXN
aUMDERRNKWPO
6HFUHWVDQG/LHV'LJLWDO6HFXULW\LQD1HWZRUNHG:RUOGE\%UXFH6FKQHLHU :LOH\ 
7KHPRQWKO\&U\SWR*UDP1HZVOHWWHUZULWWHQE\%UXFH6FKQHLHUDYDLODEOHDWKWWS
ZZZVFKQHLHUFRPFU\SWRJUDPKWPO

Resources | 93

Exercises
 :KDWLVFRPPDQGFRPSOHWLRQ"
 :KDWDUHWKHUHODWLYHDGYDQWDJHVRILQVWDOOLQJ0\64/XVLQJWKHSDFNDJHGLUHFWRU\
DUFKLYH WDUEDOORUQRLQVWDOO RUFRPSLOHGPHWKRGV"
 +RZGR\RXYHULI\WKHLQWHJULW\RIGRZQORDGHGSDFNDJHV"
 +RZGR\RXDGGWKH0\64/ELQGLUHFWRU\WRWKHRSHUDWLQJV\VWHPSDWK"

94 | Chapter 2:Installing MySQL

CHAPTER 3

Using the MySQL Monitor

0\64/KDVDFOLHQWVHUYHUDUFKLWHFWXUHFOLHQWVFRQQHFWWRWKHVHUYHUWRSHUIRUPGDWDEDVH
RSHUDWLRQVVXFKDVUHDGLQJRUVWRULQJGDWD7KHUHDUHPDQ\0\64/FOLHQWVDYDLODEOH
LQFOXGLQJVRPHWKDWKDYHJUDSKLFDOLQWHUIDFHV<RXFDQDOVRGHYHORS\RXURZQFOLHQWV
7KHVWDQGDUG0\64/FRPPDQGOLQHFOLHQWRUPRQLWRUSURJUDPSURYLGHGE\0\64/
$%LVWKHFOLHQW\RXOOSUREDEO\XVHWKHPRVWRIWHQ7KHPRQLWRUDOORZV\RXWRFRQWURO
DOPRVWDOODVSHFWVRIGDWDEDVHFUHDWLRQDQGPDLQWHQDQFHXVLQJ64/DQGWKHFXVWRP
0\64/H[WHQVLRQVWR64/
,QWKLVFKDSWHUZHOOH[DPLQHKRZWRVWDUWWKHPRQLWRUDQGKRZWRUXQFRPPDQGV
WKURXJKWKHPRQLWRUHLWKHULQWHUDFWLYHO\RULQEDWFKPRGH:HOOGHVFULEHKRZ\RXFDQ
DFFHVVWKHLQEXLOW0\64/KHOSIXQFWLRQVDQGKRZWRWHVW\RXU0\64/VHWXSXVLQJWKH
VDPSOHGDWDEDVHVIURPWKHERRNZHEVLWH:HOODOVRWDNHDTXLFNORRNDWDFRXSOHRI
JUDSKLFDOWRROVWKDW\RXFDQXVHLQVWHDGRIWKHPRQLWRU

Starting the Monitor


7KHPRQLWRUSURJUDPLVFDOOHGVLPSO\mysqlDQGLVIRXQGLQDGLUHFWRU\ZLWKWKHRWKHU
0\64/SURJUDPV7KHH[DFWORFDWLRQGHSHQGVRQ\RXURSHUDWLQJV\VWHPDQGKRZ\RX
FKRVHWRLQVWDOO0\64/ZHFRQVLGHUHGVRPHRIWKHVHLQ(UURU0HVVDJH$ERXW0\64/
([HFXWDEOH3URJUDPV1RW%HLQJ)RXQGRU5HFRJQL]HGLQ&KDSWHU
,I\RXU0\64/VHUYHULVQWDOUHDG\UXQQLQJVWDUWLWXVLQJWKHDSSURSULDWHSURFHGXUHIRU
\RXUVHWXSDVGLVFXVVHGLQ&KDSWHU1RZIROORZWKHVHVWHSVWRVWDUWWKHPRQLWRUDQG
FRQQHFWWR\RXU0\64/VHUYHUDVWKH0\64/DGPLQLVWUDWRU WKH0\64/rootXVHU E\
W\SLQJWKLVIURPWKHFRPPDQGOLQH
$ mysql --user=root

,I\RXIROORZHGRXULQVWUXFWLRQVLQ&KDSWHUWKH0\64/rootDFFRXQWLVSURWHFWHGE\
WKHSDVVZRUG\RXFKRVHHDUOLHUDQGVR\RXOOJHWDPHVVDJHVD\LQJWKDW\RXYHEHHQ
GHQLHGDFFHVVWRWKHVHUYHU,I\RXUVHUYHUKDVDSDVVZRUG\RXVKRXOGVSHFLI\WKHSDVV
ZRUGDVIROORZV
$ mysql --user=root --password=the_mysql_root_password

95

,I\RXJHWDPHVVDJHIURPWKHRSHUDWLQJV\VWHPVD\LQJWKDWLWFDQWILQGWKH0\64/
SURJUDP\RXOOQHHGWRVSHFLI\WKHIXOOSDWKWRWKHmysqlH[HFXWDEOHILOHDVGLVFXVVHGLQ
(UURU0HVVDJH$ERXW0\64/([HFXWDEOH3URJUDPV1RW%HLQJ)RXQGRU5HFRJQL]HG
,I\RXXVHGDQRQVWDQGDUGVRFNHWILOHZKHQVWDUWLQJ\RXUVHUYHU\RXOOQHHGWRSURYLGH
WKHGHWDLOVWRDQ\0\64/FOLHQWSURJUDPV\RXUXQLQFOXGLQJmysql)RUH[DPSOH\RX
PLJKWW\SH
$ mysql \
--socket=server_socket \
--user=root \
--password=the_mysql_root_password

,I\RXUHWU\LQJWRFRQQHFWWRD0\64/VHUYHURQDGLIIHUHQWFRPSXWHURUDQRQVWDQGDUG
SRUW\RXVKRXOGVSHFLI\WKHVHZKHQVWDUWLQJWKHPRQLWRU
$mysql \
--host=server_host_name \
--port=server_port \
--user=root \
--password=the_mysql_root_password

:HOLVWDIHZPRUHRSWLRQVWRWKHPRQLWRUSURJUDPDWWKHHQGRIWKLVFKDSWHU
0RVWRIWKHRWKHU0\64/SURJUDPVZHOOGHVFULEHLQWKLVERRNWDNHWKHVDPHportDQG
socketRSWLRQVWRLGHQWLI\WKHVHUYHUWRFRQQHFWWRDQGWKHVDPH userDQG password
RSWLRQVWRLGHQWLI\DQGDXWKHQWLFDWHWKH0\64/XVHU
,IDOOJRHVZHOO\RXOOJHWWKHPRQLWRUVmysql>SURPSW
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 456 to server version: 5.0.22
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

<RXFDQQRZW\SHLQFRPPDQGVWKDW0\64/XQGHUVWDQGV7RVWDUWWKLQJVRIIDVNWKH
VHUYHUZKDWYHUVLRQRI0\64/LWLV
mysql> SELECT VERSION();
+------------+
| VERSION() |
+------------+
| 5.0.22 |
+------------+
1 row in set (0.03 sec)

<RXOODOPRVWFHUWDLQO\EHXVLQJDGLIIHUHQWYHUVLRQQXPEHUIURPWKHRQHZHUHXVLQJ
1RZDVNWKHVHUYHUWROLVWDOOWKHGDWDEDVHVWKDWLWKDV
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+

96 | Chapter 3:Using the MySQL Monitor

| mysql
|
| test
|
+----------+
2 rows in set (0.00 sec)

<RXPD\VHHGLIIHUHQWUHVXOWVRQ\RXU0\64/VHUYHU7KHUHDUHWZRGDWDEDVHVKHUHWKH
mysqlGDWDEDVHLVXVHGWRVWRUHLQIRUPDWLRQDERXWXVHUDFFHVVSULYLOHJHVDQGWKHtest
GDWDEDVHLVDQHPSW\VFUDWFKVSDFHIRUH[SHULPHQWDWLRQ1RWWHUULEO\H[FLWLQJEXW\RXOO
UHPHG\WKLVVLWXDWLRQDV\RXSURJUHVVWKURXJKWKLVERRN

Style, Case, and Semicolons


:KHQLQWHUDFWLQJZLWKD0\64/VHUYHU\RXOOXVHDFRPELQDWLRQRI64/NH\ZRUGV
0\64/SURSULHWDU\FRPPDQGVDQGQDPHVRIGDWDEDVHVDQGGDWDEDVHFRPSRQHQWV
:HIROORZFRPPRQFRQYHQWLRQDQGXVHDVW\OHWRPDNHLWHDVLHUWRGLVWLQJXLVKEHWZHHQ
FRPSRQHQWVRIDQ64/TXHU\:HDOZD\VVKRZ64/VWDWHPHQWVDQGNH\ZRUGVLQFDS
LWDOVVXFKDV SELECTRU FROM:HDOVRVKRZWKH0\64/PRQLWRUVSURSULHWDU\64/
FRPPDQGVVXFKDVUSELQXSSHUFDVH:HDOZD\VHQWHUGDWDEDVHFRPSRQHQWVVXFK
DVGDWDEDVHWDEOHDQGFROXPQQDPHVLQORZHUFDVH7KLVPDNHVRXU64/PRUHUHDG
DEOHDQGHDVLHUWRIROORZLQVRXUFHFRGHDQGERRNV
0\64/LVQWIXVV\DERXWZKHWKHU\RXHQWHU64/RUWKHPRQLWRUVSURSULHWDU\VWDWH
PHQWV LQ XSSHUFDVH RU ORZHUFDVH )RU H[DPSOH SELECT select Select DQG HYHQ
SeLeCtDUHHTXLYDOHQW+RZHYHUGHSHQGLQJRQ\RXUSODWIRUP0\64/FDQEHIXVV\
DERXWGDWDEDVHDQGWDEOHQDPHV)RUH[DPSOHXQGHU:LQGRZV0\64/LVQWIXVV\DW
DOO EHFDXVH:LQGRZVLWVHOILVQWIXVV\DERXWWKHILOHQDPHVWKDWVWRUHWKRVHVWUXFWXUHV 
ZKLOHRQ0DF26;LWVIXVVLQHVVGHSHQGVRQZKDWXQGHUO\LQJILOHV\VWHP\RXXVHWRVWRUH
GLVNILOHV/LQX[DQG8QL[V\VWHPVREVHUYHWKHGLIIHUHQFHEHWZHHQXSSHUFDVHDQGORZ
HUFDVHVWULFWO\$UHOLDEOHDSSURDFKLVWRDGRSWWKHFRQYHQWLRQRIXVLQJORZHUFDVHIRUDOO
GDWDEDVHWDEOHDQGFROXPQQDPHV<RXFDQFRQWUROKRZ0\64/PDQDJHVGLIIHUHQW
FDVHEHKDYLRUXVLQJDQRSWLRQZKHQ\RXVWDUWWKH0\64/VHUYHUmysqldEXWZHGRQW
UHFRPPHQG\RXGRWKLVDQGZHGRQWGLVFXVVLWIXUWKHULQWKLVERRN
7KHUHDUHVRPHUHVWULFWLRQVRQZKDWFKDUDFWHUVDQGZRUGV\RXFDQXVHLQ\RXUGDWDEDVH
WDEOHDQGRWKHUQDPHV)RUH[DPSOH\RXFDQWKDYHDFROXPQQDPHG fromRUselect
LQDQ\PL[RIXSSHUFDVHDQGORZHUFDVH 7KHVHUHVWULFWLRQVDUHPRVWO\REYLRXVVLQFH
WKH\DSSO\WRUHVHUYHGNH\ZRUGVWKDWFRQIXVH0\64/VSDUVHU:HGLVFXVVWKHFKDU
DFWHUVWKDWFDQDQGFDQWEHXVHGLQ&KDSWHU
<RXOOQRWLFHWKDWZHWHUPLQDWHDOO64/VWDWHPHQWVZLWKWKHVHPLFRORQFKDUDFWHU ; 
7KLVWHOOV0\64/WKDWZHYHILQLVKHGHQWHULQJDVWDWHPHQWDQGWKDWLWVKRXOGQRZSDUVH
DQGH[HFXWHLW7KLVJLYHV\RXIOH[LELOLW\DOORZLQJ\RXWRW\SHLQDVWDWHPHQWRYHUVHYHUDO
OLQHV)RUH[DPSOHWKHIROORZLQJVWDWHPHQWZRUNVILQH
mysql> SELECT User,Host
-> FROM user;
+------+--------------------------+

Style, Case, and Semicolons | 97

| User | Host
|
+------+--------------------------+
|
| localhost
|
| root | localhost
|
|
| saied-ltc.cs.rmit.edu.au |
| root | saied-ltc.cs.rmit.edu.au |
+------+--------------------------+
4 rows in set (0.00 sec)

:HRIWHQXVHWKLVVW\OHLQWKLVERRNEHFDXVHLWKHOSVORQJVWDWHPHQWVILWLQWKHPDUJLQV
RIDSDJH1RWLFHWKDWWKHPRQLWRUVKRZV\RXDGLIIHUHQWSURPSW -> WRLQGLFDWHWKDW
LWVZDLWLQJIRU\RXWRHQWHUPRUHRI\RXU64/VWDWHPHQWRUWRW\SHLQDVHPLFRORQ
,QIDFW\RXFDQDGGZKLWHVSDFHVXFKDVVSDFHDQGWDEFKDUDFWHUVDQ\ZKHUHEHWZHHQ
WKHFRPSRQHQWVRIDVWDWHPHQWWRLPSURYHLWVIRUPDWWLQJDQGZHRIWHQGRWKLVLQRXU
ORQJHUVWDWHPHQWV2IFRXUVHEHFDXVHZKLWHVSDFHVHSDUDWHVNH\ZRUGVDQGYDOXHV\RX
FDQWDGGVSDFHZLWKLQWKHNH\ZRUGVRUYDOXHVWKHPVHOYHVIRUH[DPSOHLI\RXW\SHWKH
NH\ZRUGSELECTDVSEL ECT\RXOOJHWDQHUURU
,QFRQWUDVWWR64/VWDWHPHQWV\RXFDQWVSDQWKH0\64/PRQLWRUVRZQFRPPDQGV
RYHUPRUHWKDQRQHOLQH7KLVLVEHFDXVHWKHVHPLFRORQLVQWDFWXDOO\UHTXLUHGIRUWKHVH
DQGMXVWSUHVVLQJWKH(QWHUNH\KDVWKHVDPHHIIHFW)RUH[DPSOHWKHUSEFRPPDQGWHOOV
0\64/WKDW\RXZDQWWRXVHDSDUWLFXODUGDWDEDVH7KHIROORZLQJZRUNVILQH
mysql> USE test
Database changed

+RZHYHULI\RXWU\WRVSDQWKHFRPPDQGRYHUPRUHWKDQRQHOLQH\RXZRQWJHWIDU
mysql> USE
ERROR:
USE must be followed by a database name

The Monitor Help


7KHPRQLWRUKDVDKDQG\HELPFRPPDQGWKDW\RXFDQXVHWRJHWPRUHLQIRUPDWLRQRQ
WKHPRQLWRUFRPPDQGVRU64/V\QWD[,I\RXW\SH+(/3DQGSUHVVWKH(QWHUNH\\RXOO
JHWDOLVWRIFRPPDQGVWKHPRQLWRUXQGHUVWDQGV
mysql> HELP
For information about MySQL products and services, visit:
http://www.mysql.com/
For developer information, including the MySQL Reference Manual, visit:
http://dev.mysql.com/
To buy MySQL Network Support, training, or other products, visit:
https://shop.mysql.com/
List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
?
(\?) Synonym for `help'.
clear
(\c) Clear command.
connect
(\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter. NOTE: Takes the rest of the line as new

98 | Chapter 3:Using the MySQL Monitor

delimiter.
Edit command with $EDITOR.
Send command to mysql server, display result vertically.
Exit mysql. Same as quit.
Send command to mysql server.
Display this help.
Disable pager, print to stdout.
Don't write into outfile.
Set PAGER [to_pager]. Print the query results via PAGER.
Print current command.
Change your mysql prompt.
Quit mysql.
Rebuild completion hash.
Execute an SQL script file. Takes a file name as an argument.
Get status information from the server.
Execute a system shell command.
Set outfile [to_outfile]. Append everything into given outfile.
Use another database. Takes database name as argument.
Switch to another charset. Might be needed for processing binlog with
multi-byte charsets.
warnings (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
edit
ego
exit
go
help
nopager
notee
pager
print
prompt
quit
rehash
source
status
system
tee
use
charset

(\e)
(\G)
(\q)
(\g)
(\h)
(\n)
(\t)
(\P)
(\p)
(\R)
(\q)
(\#)
(\.)
(\s)
(\!)
(\T)
(\u)
(\C)

For server side help, type 'help contents'

'HSHQGLQJRQWKHYHUVLRQRIWKHPRQLWRUWKDW\RXUHXVLQJ\RXPD\VHHDGLIIHUHQWOLVW
7KHFKDUDFWHUVLQWKHSDUHQWKHVHVLQGLFDWHDVKRUWFXWIRUHDFKFRPPDQG<RXW\SHGLQ
WKHUSEFRPPDQGHDUOLHULQWKLVFKDSWHUWRFKDQJHWRWKHtestGDWDEDVH)URPWKHOLVW
\RXFDQVHHDVKRUWGHVFULSWLRQRIWKLVFRPPDQGDQGDOVRVHHWKDW\RXFDQW\SH \u
LQVWHDGRIUSE
/HWVORRNDWDQRWKHUHQWU\RQWKLVOLVW7KHPRQLWRUKDVFRPPDQGFRPSOHWLRQMXVWOLNH
WKH/LQX[DQG0DF26;VKHOOVDQGOLNHWKH:LQGRZVFRPPDQGSURPSW<RXFDQ
SUHVVWKHTabNH\WRFRPSOHWH64/VWDWHPHQWVDQGWDEOHDQGDWWULEXWHQDPHV,IQRWDOO
WKH RSWLRQV \RX H[SHFW DUH VKRZQ \RX FDQ XSGDWH WKH LQWHUQDO OLVW RI H[SDQVLRQV
UHEXLOG WKH FRPSOHWLRQ KDVK  E\ W\SLQJ reKDVK RU XVLQJ WKH VKRUWFXW FKDUDFWHUV
\# DQGSUHVVLQJWKH(QWHUNH\
8VLQJWKHKHOSIXQFWLRQRIWKHPRQLWRU\RXFDQDOVRJHWKHOSRQKRZWRLQWHUDFWZLWK
WKH0\64/VHUYHU7RVHHDWDEOHRIFRQWHQWVIRUWKHKHOSGRFXPHQWDWLRQW\SH+(/3
&RQWHQWV
mysql> HELP Contents
You asked for help about help category: "Contents"
For more information, type 'help <item>', where <item> is one of the following
categories:
Account Management
Administration
Data Definition
Data Manipulation
Data Types
Functions
Functions and Modifiers for Use with GROUP BY

The Monitor Help | 99

Geographic Features
Language Structure
Storage Engines
Stored Routines
Table Maintenance
Transactions
Triggers

<RX PD\ VHH PRUH RU OHVV KHOS FRQWHQW GHSHQGLQJ RQ WKH KHOS ILOHV WKDW KDYH EHHQ
LQVWDOOHGZLWK\RXUVHUYHU<RXFDQJHWLQIRUPDWLRQRQLQGLYLGXDOWRSLFVE\W\SLQJLQ
WKH+(/3FRPPDQGIROORZHGE\WKHWRSLFQDPH)RUH[DPSOHWRJHWLQIRUPDWLRQRQ
GDWDPDQLSXODWLRQ\RXZRXOGW\SH
mysql> HELP Data Manipulation
You asked for help about help category: "Data Manipulation"
For more information, type 'help <item>', where <item> is one of the following
topics:
CACHE INDEX
...
DELETE
...
EXPLAIN
...
INSERT
...
SELECT
...
SHOW
...
SHOW CREATE DATABASE
...
SHOW CREATE TABLE
...
SHOW DATABASES
...
SHOW GRANTS
...
SHOW STATUS
...
SHOW TABLES
...
UPDATE

:HYHRPLWWHGVRPHLWHPVWRNHHSWKHRXWSXWVKRUW
<RXFDQUHTXHVWIXUWKHULQIRUPDWLRQRQDQ\RIWKHLWHPVE\W\SLQJ+(/3IROORZHGE\
WKHDSSURSULDWHNH\ZRUGV)RUH[DPSOHIRULQIRUPDWLRQRQWKHSHOW DATABASESFRP
PDQG\RXGW\SH
mysql> HELP SHOW DATABASES
Name: 'SHOW DATABASES'
Description:
Syntax:
SHOW {DATABASES | SCHEMAS} [LIKE 'pattern']

100 | Chapter 3:Using the MySQL Monitor

SHOW DATABASES lists the


only those databases for
you have the global SHOW
list using the mysqlshow

databases on the MySQL server host. You see


which you have some kind of privilege, unless
DATABASES privilege. You can also get this
command.

If the server was started with the --skip-show-database option, you


cannot use this statement at all unless you have the SHOW DATABASES
privilege.
SHOW SCHEMAS can be used as of MySQL 5.0.2

Running the Monitor in Batch Mode


7KH0\64/PRQLWRUFDQEHXVHGLQLQWHUDFWLYHPRGHRULQEDWFKPRGH,QLQWHUDFWLYH
PRGH\RXW\SHLQ64/TXHULHVRU0\64/FRPPDQGVVXFKDV SHOW DATABASESDWWKH
0\64/SURPSWDQGYLHZWKHUHVXOWV
,QEDWFKPRGH\RXWHOOWKHPRQLWRUWRUHDGLQDQGH[HFXWHDOLVWRIFRPPDQGVIURPD
ILOH7KLVLVXVHIXOZKHQ\RXQHHGWRUXQDODUJHVHWRIRSHUDWLRQVIRUH[DPSOHZKHQ
\RXZDQWWRUHVWRUHDGDWDEDVHIURPDEDFNXSILOH,WVDOVRXVHIXOZKHQ\RXQHHGWR
UXQDSDUWLFXODUVHTXHQFHRIRSHUDWLRQVIUHTXHQWO\\RXFDQVDYHWKHFRPPDQGVLQD
ILOHDQGWKHQWHOOWKHPRQLWRUWRUHDGLQWKHILOHZKHQHYHU\RXQHHGLW
7KHH[DPSOHVZHYHSUHVHQWHGHDUOLHULQWKLVFKDSWHUDQGPRVWRIWKHH[DPSOHVLQWKLV
ERRNVKRZWKHPRQLWRUEHLQJXVHGLQLQWHUDFWLYHPRGH/HWVORRNDWDQH[DPSOHIRU
EDWFK PRGH 6D\ \RX KDYH D WH[W ILOH FDOOHG FRXQWBXVHUVVTO FRQWDLQLQJ WKH 64/
FRPPDQGV
use mysql;
SELECT COUNT(*) FROM user;

7KLVVFULSWWHOOV0\64/WKDW\RXZDQWWRXVHWKHmysqlGDWDEDVHDQGWKDW\RXZDQWWR
FRXQWDOOWKHXVHUVZKRKDYHDFFRXQWVRQWKH0\64/VHUYHU ZHOOH[SODLQWKHV\QWD[
RIWKHSELECTFRPPDQGLQ&KDSWHU 
<RXFDQUXQDOOWKHFRPPDQGVLQWKLVILOHXVLQJWKHSOURCEFRPPDQG
mysql> SOURCE count_users.sql
Database changed
+----------+
| count(*) |
+----------+
| 4
|
+----------+
1 row in set (0.00 sec)

,IWKHFRXQWBXVHUVVTOILOHLVQWLQWKHFXUUHQWGLUHFWRU\\RXVKRXOGJLYHWKHIXOOSDWKWR
WKHILOHIRUH[DPSOHKRPHDGDP'HVNWRSFRXQWBXVHUVVTORU&?FRXQWBXVHUVVTO$O
WHUQDWLYHO\IURPWKHFRPPDQGOLQH\RXFDQXVHWKHOHVVWKDQ  UHGLUHFWLRQRSHUDWRU
IROORZHGE\WKHILOHQDPH

Running the Monitor in Batch Mode | 101

$ mysql --user=root --password=the_mysql_root_password < count_users.sql


count(*)
4

Loading the Sample Databases


7RJHWDZRUNLQJVDPSOHGDWDEDVHWKDW\RXFDQSOD\ZLWKVWDUWE\YLVLWLQJWKHERRNV
ZHEVLWHDQGGRZQORDGLQJWKHPXVLFGDWDEDVHILOHPXVLFVTOIURPWKHVDPSOHGDWDEDVHV
VHFWLRQ
7RORDGWKHILOHLQWR\RXUVHUYHU\RXQHHGWRXVHWKHSOURCEFRPPDQGDQGVSHFLI\ZKHUH
0\64/ FDQ ILQG WKH music.sql ILOH )RU H[DPSOH WKLV PLJKW EH aPXVLFVTO RU
a'HVNWRSPXVLFVTORQD/LQX[RU0DF26;V\VWHPRU &?'RFXPHQWVDQG6HWWLQJV
?P\BZLQGRZVBORJLQBQDPH?'HVNWRS?PXVLFVTORQD:LQGRZVV\VWHP
2QFH\RXUXQWKHSOURCEFRPPDQG\RXVKRXOGVHHVRPHUHDVVXULQJPHVVDJHVIODVKE\
mysql> SOURCE path_to_music.sql_file;
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.01 sec)
Query OK, 1 row affected (0.00 sec)
...

<RXFDQQRZVHHLIWKHGDWDEDVHLVWKHUHE\XVLQJWKHSHOW DATABASESFRPPDQG
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| music
|
| mysql
|
| test
|
+----------+
3 rows in set (0.00 sec)
mysql>

:HOOVHHKRZWRXVHWKLVGDWDEDVHLQIXWXUHFKDSWHUV
5HSHDWWKLVSURFHVVIRUWKHWZRDGGLWLRQDOVDPSOHGDWDEDVHILOHVIOLJKWVTODQGXQLYHU
VLW\VTOWKDWDUHDYDLODEOHIURPWKHERRNVZHEVLWH)LQDOO\\RXFDQOHDYHWKH0\64/
PRQLWRUE\W\SLQJquit
mysql> quit

MySQL Monitor Program Options


7KHPRQLWRUSURJUDPFDQWDNHVHYHUDOSDUDPHWHUVWKHRQHV\RXOOQHHGPRVWIUHTXHQWO\
DUH

102 | Chapter 3:Using the MySQL Monitor

host

7KHKRVWWKHVHUYHULVUXQQLQJRQ\RXFDQOHDYHWKLVRXWLIWKHVHUYHULVUXQQLQJRQ
WKHVDPHKRVWDVWKHFOLHQW localhost 
user

7KHXVHUQDPHWRXVHZKHQFRQQHFWLQJWRWKH0\64/VHUYHU7KLVEHDUVQRUHODWLRQ
WRWKHXVHUQDPHWKHVHUYHULVUXQQLQJXQGHURUWR\RXU/LQX[RU0DF26;XVHU
QDPH,I\RXGRQWSURYLGHDXVHUQDPHZLWKWKLVRSWLRQWKHPRQLWRUXVHVDGHIDXOW
YDOXHWKLVGHIDXOWXVHUQDPHLV\RXUPDFKLQHDFFRXQWQDPHRQD/LQX[RU0DF26
;V\VWHPDQGODBCRQD:LQGRZVV\VWHP
password

7KHSDVVZRUGRIWKLVXVHU,I\RXGRQWSURYLGHWKH passwordSDUDPHWHUQRSDVV
ZRUGLVVXSSOLHGWRWKHVHUYHU7KLVLVILQHLIWKHUHLVQRSDVVZRUGVWRUHGIRUWKDW
XVHUEXWLIWKHXVHUGRHVKDYHDSDVVZRUGWKHFRQQHFWLRQZLOOIDLO
$ mysql --user=the_username
ERROR 1045 (28000): Access denied for user 'the_username'@'localhost'
(using password: NO)

,I\RXLQFOXGHWKH passwordRSWLRQEXWGRQWVSHFLI\DSDVVZRUGWKHFOLHQWZLOO
SURPSW\RXIRUDSDVVZRUGDIWHU\RXSUHVVWKH(QWHUNH\,IWKHXVHUKDVQRSDVV
ZRUGSUHVVLQJWKH(QWHUNH\ZLOOZRUNRWKHUZLVHWKHFRQQHFWLRQZLOOIDLODJDLQ
$ mysql --user=the_username --password
Enter password:
ERROR 1045 (28000): Access denied for user 'the_username'@'localhost'
(using password: NO)

,I\RXSURYLGHDQLQFRUUHFWSDVVZRUGRU\RXGRQWKDYHSHUPLVVLRQWRDFFHVVD
VSHFLILHGGDWDEDVH0\64/ZLOOQRWHWKLVLQWKHHUURUPHVVDJH
$ mysql --user=the_username --password=wrong_password
Enter password:
ERROR 1045 (28000): Access denied for user 'the_username'@'localhost'
(using password: YES)

,I\RXVSHFLI\WKHFRUUHFWSDVVZRUGDWWKHEnter password:SURPSWRULI\RXVSHFLI\
WKHFRUUHFWSDVVZRUGRQWKHFRPPDQGOLQHZKHQVWDUWLQJWKHPRQLWRUWKHFRQ
QHFWLRQZLOOVXFFHHG
$ mysql --user=the_username --password=the_password
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 169 to server version: 5.0.22
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

6RPHXVHUVSUHIHUQRWWRVSHFLI\WKHSDVVZRUGRQWKHFRPPDQGOLQHEHFDXVHVXS
SUHVVLQJWKHSDVVZRUGJXDUDQWHHVWKHSDVVZRUGZRQWEHGLVSOD\HGLQWKHRSHUDWLQJ
V\VWHPSURFHVVWDEOHRUFRPPDQGKLVWRU\8QGHUDOORSHUDWLQJV\VWHPVZHYHWHV
WHGWKHSDVVZRUGLVKLGGHQDQGFDQWEHVHHQXVLQJRSHUDWLQJV\VWHPXWLOLWLHVWR
MySQL Monitor Program Options | 103

YLHZUXQQLQJSURFHVVHV+RZHYHUWKHSDVVZRUGPD\EHVWRUHGLQ\RXUFRPPDQG
OLQHKLVWRU\ZKLFKRWKHUXVHUVPD\EHDEOHWRDFFHVV
database

7KHGDWDEDVHWRXVH7KLVVDYHV\RXIURPKDYLQJWRW\SH86( the_database_name
DIWHUWKH0\64/PRQLWRUVWDUWV<RXFDQDOVRVLPSO\RPLWWKHdatabaseRSWLRQDQG
MXVWDGGWKHQDPHRIWKHGDWDEDVH\RXZDQWWRXVHDWWKHHQGRIWKHmysqlFRPPDQG
safe-updates

0RVWH[SHULHQFHG0\64/XVHUVFDQUHPHPEHURFFDVLRQVZKHUHWKH\YHDFFLGHQ
WDOO\GHOHWHGDOOWKHGDWDLQDWDEOHE\LVVXLQJDDELETE FROM table_nameFRPPDQG
IRUJHWWLQJWRDGGDOLPLWLQJFRQGLWLRQ
7KHsafe-updatesRSWLRQSUHYHQWV\RXIURPGRLQJWKLVE\UHTXLULQJ\RXWRSURYLGH
DNH\FRQVWUDLQWWRDELETEDQGUPDATERUWRXVHDLIMITFODXVH)RUH[DPSOH
mysql> DELETE FROM user;
ERROR 1175 (HY000): You are using safe update mode and you tried to update
a table without a WHERE that uses a KEY column

:HOOH[SODLQWKHVHFRPPDQGVLQODWHUFKDSWHUV
/HWVORRNDWDFRXSOHRIH[DPSOHV)LUVWOHWVVD\\RXZDQWWRFRQQHFWWRWKHVHUYHU
UXQQLQJ RQ WKH VDPH PDFKLQH \RXUH ZRUNLQJ RQ localhost  DV WKH 0\64/ XVHU
rootDQGZLWKWKHSDVVZRUGthe_mysql_root_password<RXZDQWWRXVHWKHGDWDEDVH
musicVR\RXZRXOGW\SH
$ mysql --user=root --password=the_mysql_root_password --database=music

1RZ IRU D PRUH FRPSOH[ H[DPSOH VD\ \RXUH ZRUNLQJ RQ WKH KRVW VDGULOHDUQLQJ
P\VTOFRPDQGZLVKWRXVHWKHMoodleGDWDEDVHRQWKH0\64/VHUYHUOLVWHQLQJWRSRUW
 RQ WKH KRVW ]DKUDOHDUQLQJP\VTOFRP )RU WKLV 0\64/ VHUYHU \RX KDYH WKH
0\64/DFFRXQWQDPHmoodleuserDQGWKHSDVVZRUGmoodlepass<RXZRXOGW\SHWKH
FRPPDQG DOORQRQHOLQH 
$ mysql \
--host=zahra.learningmysql.com \
--port=57777 \
--user=moodleuser \
--password=moodlepass \
--database=Moodle

:HOOORRNDWKRZWRFUHDWHDQGPDQDJHXVHUVLQ&KDSWHU
,QVWHDG RI VSHFLI\LQJ RSWLRQV RQ WKH FRPPDQG OLQH \RX FDQ OLVW WKHP LQ WKH mysql
VHFWLRQRIDQRSWLRQVILOH<RXFDQDOVRVWRUH\RXUSDVVZRUGLQDQRSWLRQVILOHWRDYRLG
W\SLQJLWLQHYHU\WLPH\RXVWDUWWKHPRQLWRU:HGLVFXVVKRZWRGRWKLVLQ&KDSWHU

Graphical Clients
%HIRUHZHHQGWKLVFKDSWHUOHWVKDYHDTXLFNORRNDWWZRJUDSKLFDOFOLHQWVWKDW\RXFDQ
XVHLQSODFHRIWKHPRQLWRU
104 | Chapter 3:Using the MySQL Monitor

)LJXUH7KH0\64/$GPLQLVWUDWRUJUDSKLFDO0\64/DGPLQLVWUDWLRQWRRO

7KH0\64/$GPLQLVWUDWRUSURJUDPLVDJUDSKLFDOWRROWKDW\RXFDQGRZQORDGDVSDUW
RIWKH0\64/*8,7RROV%XQGOHIURPWKH0\64/$%GRZQORDGVSDJHDWKWWSGHY
P\VTOFRPGRZQORDGV7KLVSURJUDPDOORZV\RXWRSHUIRUPPRVWGDWDEDVHDGPLQLV
WUDWLRQIURPZLWKLQDJUDSKLFDOHQYLURQPHQWDVVKRZQLQ)LJXUH
7KH0\64/4XHU\%URZVHUSURJUDPLVDOVRDYDLODEOHIRUGRZQORDGIURPWKHVDPHZHE
SDJH7KLVDOORZV\RXWRUXQ64/TXHULHVIURPZLWKLQDJUDSKLFDOHQYLURQPHQWDQG
YLHZWKHUHVXOWV$VDPSOHTXHU\LVVKRZQLQ)LJXUH7RJHWKHUWKHVHWRROVUHSODFH
DQROGHUSURJUDPNQRZQDVWKH0\64/&RQWURO&HQWHUmysqlcc,QWKLVERRNZHIRFXV
RQGRLQJWKLQJVXVLQJWKHPRQLWRURQFH\RXXQGHUVWDQGWKHZD\0\64/ZRUNV\RXOO
ILQGLWHDV\WRXVHRWKHUFOLHQWVVXFKDVWKHVH

Exercises
 :KDWGRZHPHDQZKHQZHVD\WKDW0\64/KDVDFOLHQWVHUYHUDUFKLWHFWXUH"
 8VHWKHPRQLWRUKHOSWRORRNXSLQIRUPDWLRQRQWKHSELECTVWDWHPHQW :HOOGLV
FXVVSELECTLQGHWDLOLQ&KDSWHU
 :KDWLVWKHGLIIHUHQFHEHWZHHQXVLQJWKHPRQLWRULQLQWHUDFWLYHPRGHDQGXVLQJ
WKHPRQLWRULQEDWFKPRGH"
 :KDWGRWKHPRQLWRUuserpasswordDQGdatabaseRSWLRQVGR"

Exercises | 105

)LJXUH7KH0\64/4XHU\%URZVHUJUDSKLFDO0\64/FOLHQW

106 | Chapter 3:Using the MySQL Monitor

PART II

Using MySQL

CHAPTER 4

Modeling and Designing Databases

:KHQLPSOHPHQWLQJDQHZGDWDEDVHLWVHDV\WRIDOOLQWRWKHWUDSRIWU\LQJWRTXLFNO\
JHWVRPHWKLQJXSDQGUXQQLQJZLWKRXWGHGLFDWLQJDGHTXDWHWLPHDQGHIIRUWWRWKHGH
VLJQ 7KLV FDUHOHVVQHVV IUHTXHQWO\ OHDGV WR FRVWO\ UHGHVLJQV DQG UHLPSOHPHQWDWLRQV
GRZQWKHWUDFN'HVLJQLQJDGDWDEDVHLVVLPLODUWRGUDIWLQJWKHEOXHSULQWVIRUDKRXVH
LWVVLOO\WRVWDUWEXLOGLQJZLWKRXWGHWDLOHGSODQV,PSRUWDQWO\JRRGGHVLJQDOORZV\RX
WRH[WHQGWKHRULJLQDOEXLOGLQJZLWKRXWKDYLQJWRSXOOHYHU\WKLQJGRZQDQGVWDUWIURP
VFUDWFK

How Not to Develop a Database


'DWDEDVHGHVLJQLVSUREDEO\QRWWKHPRVWH[FLWLQJWDVNLQWKHZRUOGEXWLWVVWLOOLP
SRUWDQW%HIRUHZHGHVFULEHKRZWRJRDERXWWKHGHVLJQSURFHVVOHWVORRNDWDQH[DPSOH
RIGDWDEDVHGHVLJQRQWKHUXQ
,PDJLQHZHZDQWWRFUHDWHDGDWDEDVHWRVWRUHVWXGHQWJUDGHVIRUDXQLYHUVLW\FRPSXWHU
VFLHQFHGHSDUWPHQW:HFRXOGFUHDWHD Student_GradesWDEOHWRVWRUHJUDGHVIRUHDFK
VWXGHQWDQGHDFKFRXUVH7KHWDEOHZRXOGKDYHFROXPQVIRUWKHJLYHQQDPHVDQGWKH
VXUQDPHRIHDFKVWXGHQWDVZHOODVIRUHDFKFRXUVHWKH\KDYHWDNHQWKHFRXUVHQDPH
DQGWKHSHUFHQWDJHUHVXOW VKRZQDVPctg :HGKDYHDGLIIHUHQWURZIRUHDFKVWXGHQW
IRUHDFKRIWKHLUFRXUVHV
+------------+---------+---------------------------+------+
| GivenNames | Surname | CourseName
| Pctg |
+------------+---------+---------------------------+------+
| John Paul | Bloggs | Web Database Applications | 72 |
| Sarah
| Doe
| Programming 1
| 87 |
| John Paul | Bloggs | Computing Mathematics
| 43 |
| John Paul | Bloggs | Computing Mathematics
| 65 |
| Sarah
| Doe
| Web Database Applications | 65 |
| Susan
| Smith
| Computing Mathematics
| 75 |
| Susan
| Smith
| Programming 1
| 55 |
| Susan
| Smith
| Computing Mathematics
| 80 |
+------------+---------+---------------------------+------+

109

7KLVLVQLFHDQGFRPSDFWDQGZHFDQHDVLO\DFFHVVJUDGHVIRUDQ\VWXGHQWRUDQ\FRXUVH
+RZHYHUZHFRXOGKDYHPRUHWKDQRQHVWXGHQWFDOOHG6XVDQ6PLWKLQWKHVDPSOHGDWD
WKHUHDUHWZRHQWULHVIRU6XVDQ6PLWKDQGWKH&RPSXWLQJ0DWKHPDWLFVFRXUVH:KLFK
6XVDQ6PLWKJRWDQ"$FRPPRQZD\WRGLIIHUHQWLDWHGXSOLFDWHGDWDHQWULHVLVWRDVVLJQ
DXQLTXHQXPEHUWRHDFKHQWU\+HUHZHFDQDVVLJQDXQLTXH6WXGHQW,'QXPEHUWR
HDFKVWXGHQW
+------------+------------+---------+---------------------------+------+
| StudentID | GivenNames | Surname | CourseName
| Pctg |
+------------+------------+---------+---------------------------+------+
| 12345678
| John Paul | Bloggs | Web Database Applications | 72 |
| 12345121
| Sarah
| Doe
| Programming 1
| 87 |
| 12345678
| John Paul | Bloggs | Computing Mathematics
| 43 |
| 12345678
| John Paul | Bloggs | Computing Mathematics
| 65 |
| 12345121
| Sarah
| Doe
| Web Database Applications | 65 |
| 12345876
| Susan
| Smith | Computing Mathematics
| 75 |
| 12345876
| Susan
| Smith | Programming 1
| 55 |
| 12345303
| Susan
| Smith | Computing Mathematics
| 80 |
+------------+------------+---------+---------------------------+------+

6RWKH6XVDQ6PLWKZKRJRWLVWKHRQHZLWKWKH6WXGHQW,'QXPEHU
7KHUHV DQRWKHU SUREOHP ,Q RXU WDEOH -RKQ 3DXO %ORJJV KDV IDLOHG WKH &RPSXWLQJ
0DWKHPDWLFVFRXUVHRQFHZLWKSHUFHQWDQGSDVVHGLWZLWKSHUFHQWLQKLVVHFRQG
DWWHPSW,QDUHODWLRQDOGDWDEDVHWKHURZVIRUPDVHWDQGWKHUHLVQRLPSOLFLWRUGHULQJ
EHWZHHQWKHP\RXPLJKWJXHVVWKDWWKHSDVVKDSSHQHGDIWHUWKHIDLOEXW\RXFDQW
DFWXDOO\EHVXUH7KHUHVQRJXDUDQWHHWKDWWKHQHZHUJUDGHZLOODSSHDUDIWHUWKHROGHU
RQHVRZHQHHGWRDGGLQIRUPDWLRQDERXWZKHQHDFKJUDGHZDVDZDUGHGVD\E\DGGLQJ
D\HDUDQGVHPHVWHU Sem 
+------------+------------+---------+---------------------------+------+-----+------+
| StudentID | GivenNames | Surname | CourseName
| Year | Sem | Pctg |
+------------+------------+---------+---------------------------+------+-----+------+
| 12345678
| John Paul | Bloggs | Web Database Applications | 2004 | 2 | 72 |
| 12345121
| Sarah
| Doe
| Programming 1
| 2006 | 1 | 87 |
| 12345678
| John Paul | Bloggs | Computing Mathematics
| 2005 | 2 | 43 |
| 12345678
| John Paul | Bloggs | Computing Mathematics
| 2006 | 1 | 65 |
| 12345121
| Sarah
| Doe
| Web Database Applications | 2006 | 1 | 65 |
| 12345876
| Susan
| Smith | Computing Mathematics
| 2005 | 1 | 75 |
| 12345876
| Susan
| Smith | Programming 1
| 2005 | 2 | 55 |
| 12345303
| Susan
| Smith | Computing Mathematics
| 2006 | 1 | 80 |
+------------+------------+---------+---------------------------+------+-----+------+

1RWLFHWKDWWKH Student_GradesWDEOHKDVEHFRPHDELWEORDWHGWKHVWXGHQW,'JLYHQ
QDPHVDQGVXUQDPHDUHUHSHDWHGIRUHYHU\JUDGH:HFRXOGVSOLWXSWKHLQIRUPDWLRQ
DQGFUHDWHDStudent_DetailsWDEOH
+------------+------------+---------+
| StudentID | GivenNames | Surname |
+------------+------------+---------+
| 12345121
| Sarah
| Doe
|
| 12345303
| Susan
| Smith |
| 12345678
| John Paul | Bloggs |

110 | Chapter 4:Modeling and Designing Databases

| 12345876
| Susan
| Smith |
+------------+------------+---------+

DQGNHHSOHVVLQIRUPDWLRQLQWKHStudent_GradesWDEOH
+------------+---------------------------+------+-----+------+
| StudentID | CourseName
| Year | Sem | Pctg |
+------------+---------------------------+------+-----+------+
| 12345678
| Web Database Applications | 2004 | 2 | 72 |
| 12345121
| Programming 1
| 2006 | 1 | 87 |
| 12345678
| Computing Mathematics
| 2005 | 2 | 43 |
| 12345678
| Computing Mathematics
| 2006 | 1 | 65 |
| 12345121
| Web Database Applications | 2006 | 1 | 65 |
| 12345876
| Computing Mathematics
| 2005 | 1 | 75 |
| 12345876
| Programming 1
| 2005 | 2 | 55 |
| 12345303
| Computing Mathematics
| 2006 | 1 | 80 |
+------------+---------------------------+------+-----+------+

7R ORRN XS D VWXGHQWV JUDGHV ZHG QHHG WR ILUVW ORRN XS KHU 6WXGHQW ,' IURP WKH
Student_Details WDEOH DQG WKHQ UHDG WKH JUDGHV IRU WKDW 6WXGHQW ,' IURP WKH Stu
dent_GradesWDEOH
7KHUHDUHVWLOOLVVXHVZHKDYHQWFRQVLGHUHG)RUH[DPSOHVKRXOGZHNHHSLQIRUPDWLRQ
RQDVWXGHQWVHQUROOPHQWGDWHSRVWDODQGHPDLODGGUHVVHVIHHVRUDWWHQGDQFH"6KRXOG
ZHVWRUHGLIIHUHQWW\SHVRISRVWDODGGUHVV"+RZVKRXOGZHVWRUHDGGUHVVHVVRWKDWWKLQJV
GRQWEUHDNZKHQDVWXGHQWFKDQJHVKLVDGGUHVV"
,PSOHPHQWLQJDGDWDEDVHLQWKLVZD\LVSUREOHPDWLFZHNHHSUXQQLQJLQWRWKLQJVZH
KDGQWWKRXJKWDERXWDQGKDYHWRNHHSFKDQJLQJRXUGDWDEDVHVWUXFWXUH&OHDUO\ZH
FDQVDYHDORWRIUHZRUNLQJE\FDUHIXOO\GRFXPHQWLQJWKHUHTXLUHPHQWVDQGWKHQZRUN
LQJWKURXJKWKHPWRGHYHORSDFRKHUHQWGHVLJQ

The Database Design Process


7KHUHDUHWKUHHPDMRUVWDJHVLQGDWDEDVHGHVLJQHDFKSURGXFLQJDSURJUHVVLYHO\ORZHU
OHYHOGHVFULSWLRQ
5HTXLUHPHQWVDQDO\VLV
)LUVWZHGHWHUPLQHDQGZULWHGRZQZKDWH[DFWO\WKHGDWDEDVHLVQHHGHGIRUZKDW
GDWDZLOOEHVWRUHGDQGKRZWKHGDWDLWHPVUHODWHWRHDFKRWKHU,QSUDFWLFHWKLV
PLJKWLQYROYHGHWDLOHGVWXG\RIWKHDSSOLFDWLRQUHTXLUHPHQWVDQGWDONLQJWRSHRSOH
LQYDULRXVUROHVWKDWZLOOLQWHUDFWZLWKWKHGDWDEDVHDQGDSSOLFDWLRQ
&RQFHSWXDOGHVLJQ
2QFHZHNQRZZKDWWKHGDWDEDVHUHTXLUHPHQWVDUHZHGLVWLOOWKHPLQWRDIRUPDO
GHVFULSWLRQRIWKHGDWDEDVHGHVLJQ,QWKLVFKDSWHUZHOOVHHKRZWRXVHPRGHOLQJ
WRSURGXFHWKHFRQFHSWXDOGHVLJQ
/RJLFDOGHVLJQ
)LQDOO\ZHPDSWKHGDWDEDVHGHVLJQRQWRDQDFWXDOGDWDEDVHPDQDJHPHQWV\VWHP
DQGGDWDEDVHWDEOHV
The Database Design Process | 111

Customer

Product

)LJXUH$QHQWLW\VHWLVUHSUHVHQWHGE\DQDPHGUHFWDQJOH

$WWKHHQGRIWKHFKDSWHUZHOOORRNDWKRZZHFDQXVHWKHRSHQVRXUFH MySQL Work


bench WRRO WR DXWRPDWLFDOO\ FRQYHUW WKH FRQFHSWXDO GHVLJQ WR D 0\64/ GDWDEDVH
VFKHPD

The Entity Relationship Model


$WDEDVLFOHYHOGDWDEDVHVVWRUHLQIRUPDWLRQDERXWGLVWLQFWREMHFWVRUHQWLWLHVDQGWKH
DVVRFLDWLRQVRUUHODWLRQVKLSVEHWZHHQWKHVHHQWLWLHV)RUH[DPSOHDXQLYHUVLW\GDWDEDVH
PLJKW VWRUH LQIRUPDWLRQ DERXW VWXGHQWV FRXUVHV DQG HQUROOPHQW $ VWXGHQW DQG D
FRXUVHDUHHQWLWLHVZKLOHDQHQUROOPHQWLVDUHODWLRQVKLSEHWZHHQDVWXGHQWDQGDFRXUVH
6LPLODUO\ DQ LQYHQWRU\ DQG VDOHV GDWDEDVH PLJKW VWRUH LQIRUPDWLRQ DERXW SURGXFWV
FXVWRPHUVDQGVDOHV$SURGXFWDQGDFXVWRPHUDUHHQWLWLHVZKLOHDVDOHLVDUHODWLRQVKLS
EHWZHHQDFXVWRPHUDQGDSURGXFW
$ SRSXODU DSSURDFK WR FRQFHSWXDO GHVLJQ XVHV WKH (QWLW\ 5HODWLRQVKLS (5  PRGHO
ZKLFKKHOSVWUDQVIRUPWKHUHTXLUHPHQWVLQWRDIRUPDOGHVFULSWLRQRIWKHHQWLWLHVDQG
UHODWLRQVKLSV WKDW DSSHDU LQ WKH GDWDEDVH :HOO VWDUW E\ ORRNLQJ DW KRZ WKH (QWLW\
5HODWLRQVKLSPRGHOLQJSURFHVVLWVHOIZRUNVWKHQDSSO\LWLQ(QWLW\5HODWLRQVKLS0RG
HOLQJ([DPSOHVIRUWKUHHVDPSOHGDWDEDVHV

Representing Entities
7R KHOS YLVXDOL]H WKH GHVLJQ WKH (QWLW\ 5HODWLRQVKLS 0RGHOLQJ DSSURDFK LQYROYHV
GUDZLQJDQ(QWLW\5HODWLRQVKLS (5 GLDJUDP,QWKH(5GLDJUDPDQHQWLW\VHWLVUHS
UHVHQWHGE\DUHFWDQJOHFRQWDLQLQJWKHHQWLW\QDPH)RURXUVDOHVGDWDEDVHH[DPSOHWKH
SURGXFWDQGFXVWRPHUHQWLW\VHWVZRXOGEHVKRZQDVLQ)LJXUH
:HW\SLFDOO\XVHWKHGDWDEDVHWRVWRUHFHUWDLQFKDUDFWHULVWLFVRUDWWULEXWHVRIWKHHQWL
WLHV,QDVDOHVGDWDEDVHZHFRXOGVWRUHWKHQDPHHPDLODGGUHVVSRVWDODGGUHVVDQG
WHOHSKRQHQXPEHUIRUHDFKFXVWRPHU,QDPRUHHODERUDWHFXVWRPHUUHODWLRQVKLSPDQ
DJPHQW &50 DSSOLFDWLRQZHFRXOGDOVRVWRUHWKHQDPHVRIWKHFXVWRPHUVVSRXVH
DQGFKLOGUHQWKHODQJXDJHVWKHFXVWRPHUVSHDNVWKHFXVWRPHUVKLVWRU\RILQWHUDFWLRQ
ZLWKRXUFRPSDQ\DQGVRRQ$WWULEXWHVGHVFULEHWKHHQWLW\WKH\EHORQJWR

112 | Chapter 4:Modeling and Designing Databases

$QDWWULEXWHPD\EHIRUPHGIURPVPDOOHUSDUWVIRUH[DPSOHDSRVWDODGGUHVVLVFRP
SRVHGRIDVWUHHWQXPEHUFLW\=,3FRGHDQGFRXQWU\:HFODVVLI\DWWULEXWHVDVFRP
SRVLWHLIWKH\UHFRPSRVHGRIVPDOOHUSDUWVLQWKLVZD\DQGDVVLPSOHRWKHUZLVH
6RPHDWWULEXWHVFDQKDYHPXOWLSOHYDOXHVIRUDJLYHQHQWLW\)RUH[DPSOHDFXVWRPHU
FRXOG SURYLGH VHYHUDO WHOHSKRQH QXPEHUV VR WKH WHOHSKRQH QXPEHU DWWULEXWH LV
PXOWLYDOXHG
$WWULEXWHVKHOSGLVWLQJXLVKRQHHQWLW\IURPRWKHUHQWLWLHVRIWKHVDPHW\SH:HFRXOG
XVHWKHQDPHDWWULEXWHWRGLVWLQJXLVKEHWZHHQFXVWRPHUVEXWWKLVFRXOGEHDQLQDGH
TXDWHVROXWLRQEHFDXVHVHYHUDOFXVWRPHUVFRXOGKDYHLGHQWLFDOQDPHV7REHDEOHWRWHOO
WKHPDSDUWZHQHHGDQDWWULEXWH RUDPLQLPDOFRPELQDWLRQRIDWWULEXWHV JXDUDQWHHG
WREHXQLTXHWRHDFKLQGLYLGXDOFXVWRPHU7KHLGHQWLI\LQJDWWULEXWHRUDWWULEXWHVIRUP
DNH\
,QRXUH[DPSOHZHFDQDVVXPHWKDWQRWZRFXVWRPHUVKDYHWKHVDPHHPDLODGGUHVV
VRWKHHPDLODGGUHVVFDQEHWKHNH\+RZHYHUZHQHHGWRWKLQNFDUHIXOO\DERXWWKH
LPSOLFDWLRQVRIRXUFKRLFHV)RUH[DPSOHLIZHGHFLGHWRLGHQWLI\FXVWRPHUVE\WKHLU
HPDLODGGUHVVLWZRXOGEHKDUGWRDOORZDFXVWRPHUWRKDYHPXOWLSOHHPDLODGGUHVVHV
$Q\ DSSOLFDWLRQV ZH EXLOG WR XVH WKLV GDWDEDVH PLJKW WUHDW HDFK HPDLO DGGUHVV DV D
VHSDUDWH SHUVRQ DQG LW PLJKW EH KDUG WR DGDSW HYHU\WKLQJ WR DOORZ SHRSOH WR KDYH
PXOWLSOH HPDLO DGGUHVVHV 8VLQJ WKH HPDLO DGGUHVV DV WKH NH\ DOVR PHDQV WKDW HYHU\
FXVWRPHUPXVWKDYHDQHPDLODGGUHVVRWKHUZLVHZHZRXOGQWEHDEOHWRGLVWLQJXLVK
EHWZHHQFXVWRPHUVZKRGRQWKDYHRQH
/RRNLQJDWWKHRWKHUDWWULEXWHVIRURQHWKDWFDQVHUYHDVDQDOWHUQDWLYHNH\ZHVHHWKDW
ZKLOHLWVSRVVLEOHWKDWWZRFXVWRPHUVZRXOGKDYHWKHVDPHWHOHSKRQHQXPEHU DQGVR
ZHFDQQRWXVHWKHWHOHSKRQHQXPEHUDVDNH\ LWVOLNHO\WKDWSHRSOHZKRKDYHWKHVDPH
WHOHSKRQHQXPEHUQHYHUKDYHWKHVDPHQDPHVRZHFDQXVHWKHFRPELQDWLRQRIWKH
WHOHSKRQHQXPEHUDQGWKHQDPHDVDFRPSRVLWHNH\
&OHDUO\WKHUHPD\EHVHYHUDOSRVVLEOHNH\VWKDWFRXOGEHXVHGWRLGHQWLI\DQHQWLW\ZH
FKRRVHRQHRIWKHDOWHUQDWLYHRUFDQGLGDWHNH\VWREHRXUPDLQRUSULPDU\NH\<RX
XVXDOO\PDNHWKLVFKRLFHEDVHGRQKRZFRQILGHQW\RXDUHWKDWWKHDWWULEXWHZLOOEHQRQ
HPSW\DQGXQLTXHIRUHDFKLQGLYLGXDOHQWLW\DQGRQKRZVPDOOWKHNH\LV VKRUWHUNH\V
DUHIDVWHUWRPDLQWDLQDQGXVH 
,QWKH(5GLDJUDPDWWULEXWHVDUHUHSUHVHQWHGDVODEHOHGRYDOVDQGDUHFRQQHFWHGWRWKHLU
RZQLQJHQWLW\DVVKRZQLQ)LJXUH$WWULEXWHVFRPSULVLQJWKHSULPDU\NH\DUHVKRZQ
XQGHUOLQHG7KHSDUWVRIDQ\FRPSRVLWHDWWULEXWHVDUHGUDZQFRQQHFWHGWRWKHRYDORI
WKHFRPSRVLWHDWWULEXWHDQGPXOWLYDOXHGDWWULEXWHVDUHVKRZQDVGRXEOHOLQHGRYDOV
$WWULEXWHYDOXHVDUHFKRVHQIURPDGRPDLQRIOHJDOYDOXHVIRUH[DPSOHZHFRXOGVSHFLI\
WKDWDFXVWRPHUVJLYHQQDPHVDQGVXUQDPHDWWULEXWHVFDQHDFKEHDVWULQJRIXSWR
FKDUDFWHUVZKLOHDWHOHSKRQHQXPEHUFDQEHDVWULQJRIXSWRFKDUDFWHUV6LPLODUO\
DSURGXFWSULFHFRXOGEHDSRVLWLYHUDWLRQDOQXPEHU

The Entity Relationship Model | 113

Given names
Surname
Customer

Email address
Telephone number
Postal address
Street address
City
ZIP code
Country

)LJXUH7KH(5GLDJUDPUHSUHVHQWDWLRQRIWKHFXVWRPHUHQWLW\

$WWULEXWHVFDQEHHPSW\IRUH[DPSOHVRPHFXVWRPHUVPD\QRWSURYLGHWKHLUWHOHSKRQH
QXPEHUV7KHSULPDU\NH\RIDQHQWLW\ LQFOXGLQJWKHFRPSRQHQWVRIDPXOWLDWWULEXWH
SULPDU\NH\ PXVWQHYHUEHXQNQRZQ WHFKQLFDOO\LWPXVWEHNOT NULL IRUH[DPSOH
LILWVSRVVLEOHIRUDFXVWRPHUWRQRWSURYLGHDQHPDLODGGUHVVZHFDQQRWXVHWKHHPDLO
DGGUHVVDVWKHNH\
<RX VKRXOG WKLQN FDUHIXOO\ ZKHQ FODVVLI\LQJ DQ DWWULEXWH DV PXOWLYDOXHG DUH DOO WKH
YDOXHV HTXLYDOHQW RU GR WKH\ LQ IDFW UHSUHVHQW GLIIHUHQW WKLQJV" )RU H[DPSOH ZKHQ
OLVWLQJPXOWLSOHWHOHSKRQHQXPEHUVIRUDFXVWRPHUZRXOGWKH\EHPRUHXVHIXOO\ODEHOHG
VHSDUDWHO\DVWKHFXVWRPHUVEXVLQHVVSKRQHQXPEHUKRPHSKRQHQXPEHUFHOOSKRQH
QXPEHUDQGVRRQ"
/HWV ORRN DW DQRWKHU H[DPSOH 7KH VDOHV GDWDEDVH UHTXLUHPHQWV PD\ VSHFLI\ WKDW D
SURGXFWKDVDQDPHDQGDSULFH:HFDQVHHWKDWWKHSURGXFWLVDQHQWLW\EHFDXVHLWVD
GLVWLQFWREMHFW+RZHYHUWKHSURGXFWVQDPHDQGSULFHDUHQWGLVWLQFWREMHFWVWKH\UH
DWWULEXWHVWKDWGHVFULEHWKHSURGXFWHQWLW\1RWHWKDWLIZHZDQWWRKDYHGLIIHUHQWSULFHV
IRUGLIIHUHQWPDUNHWVWKHQWKHSULFHLVQRORQJHUMXVWUHODWHGWRWKHSURGXFWHQWLW\DQG
ZHGQHHGWRPRGHOLWGLIIHUHQWO\
)RUVRPHDSSOLFDWLRQVQRFRPELQDWLRQRIDWWULEXWHVFDQXQLTXHO\LGHQWLI\DQHQWLW\ RU
LWZRXOGEHWRRXQZLHOG\WRXVHDODUJHFRPSRVLWHNH\ VRZHFUHDWHDQDUWLILFLDODWWULEXWH
WKDWVGHILQHGWREHXQLTXHDQGFDQWKHUHIRUHEHXVHGDVDNH\VWXGHQWQXPEHUV6RFLDO
6HFXULW\QXPEHUVGULYHUVOLFHQVHQXPEHUVDQGOLEUDU\FDUGQXPEHUVDUHH[DPSOHVRI
XQLTXHDWWULEXWHVFUHDWHGIRUYDULRXVDSSOLFDWLRQV,QRXULQYHQWRU\DQGVDOHVDSSOLFD

114 | Chapter 4:Modeling and Designing Databases

Name
Price

Product

Product ID

)LJXUH7KH(5GLDJUDPUHSUHVHQWDWLRQRIWKHSURGXFWHQWLW\

WLRQLWVSRVVLEOHWKDWZHFRXOGVWRFNGLIIHUHQWSURGXFWVZLWKWKHVDPHQDPHDQGSULFH
)RUH[DPSOHZHFRXOGVHOOWZRPRGHOVRI)RXUSRUW86%+XEERWKDW
HDFK7RGLVWLQJXLVKEHWZHHQSURGXFWVZHFDQDVVLJQDXQLTXHSURGXFW,'QXPEHUWR
HDFK LWHP ZH VWRFN WKLV ZRXOG EH WKH SULPDU\ NH\ (DFK SURGXFW HQWLW\ ZRXOG
KDYH QDPH SULFH DQG SURGXFW ,' DWWULEXWHV 7KLV LV VKRZQ LQ WKH (5 GLDJUDP LQ
)LJXUH

Representing Relationships
(QWLWLHVFDQSDUWLFLSDWHLQUHODWLRQVKLSVZLWKRWKHUHQWLWLHV)RUH[DPSOHDFXVWRPHU
FDQEX\DSURGXFWDVWXGHQWFDQWDNHDFRXUVHDQDUWLVWFDQUHFRUGDQDOEXPDQGVRRQ
/LNHHQWLWLHVUHODWLRQVKLSVFDQKDYHDWWULEXWHVZHFDQGHILQHDVDOHWREHDUHODWLRQVKLS
EHWZHHQDFXVWRPHUHQWLW\ LGHQWLILHGE\WKHXQLTXHHPDLODGGUHVV DQGDJLYHQQXPEHU
RIWKHSURGXFWHQWLW\ LGHQWLILHGE\WKHXQLTXHSURGXFW,' WKDWH[LVWVDWDSDUWLFXODU
GDWHDQGWLPH WKHWLPHVWDPS 
2XUGDWDEDVHFRXOGWKHQUHFRUGHDFKVDOHDQGWHOOXVIRUH[DPSOHWKDWDWSPRQ
:HGQHVGD\0DUFK$OL7KRPVRQERXJKWRQH)RXUSRUW86%+XERQH
*%0%&DFKHUSP6$7$6HULDO$7$+''+DUG'LVNDQGWZRVHWVRI
:DWW&KDQQHO6XE:RRIHU6SHDNHUV
'LIIHUHQWQXPEHUVRIHQWLWLHVFDQDSSHDURQHDFKVLGHRIDUHODWLRQVKLS)RUH[DPSOH
HDFKFXVWRPHUFDQEX\DQ\QXPEHURISURGXFWVDQGHDFKSURGXFWFDQEHERXJKWE\
DQ\QXPEHURIFXVWRPHUV7KLVLVNQRZQDVDPDQ\WRPDQ\UHODWLRQVKLS:HFDQDOVR
KDYHRQHWRPDQ\UHODWLRQVKLSV)RUH[DPSOHRQHSHUVRQFDQKDYHVHYHUDOFUHGLWFDUGV
EXWHDFKFUHGLWFDUGEHORQJVWRMXVWRQHSHUVRQ/RRNLQJDWLWWKHRWKHUZD\DRQHWR
PDQ\UHODWLRQVKLSEHFRPHVDPDQ\WRRQHUHODWLRQVKLSIRUH[DPSOHPDQ\FUHGLWFDUGV
EHORQJWRDVLQJOHSHUVRQ)LQDOO\WKHVHULDOQXPEHURQDFDUHQJLQHLVDQH[DPSOHRID
RQHWRRQHUHODWLRQVKLSHDFKHQJLQHKDVMXVWRQHVHULDOQXPEHUDQGHDFKVHULDOQXPEHU
EHORQJVWRMXVWRQHHQJLQH:HRIWHQXVHWKHVKRUWKDQGWHUPV1DQG01IRU
RQHWRRQHRQHWRPDQ\DQGPDQ\WRPDQ\UHODWLRQVKLSVUHVSHFWLYHO\
7KHQXPEHURIHQWLWLHVRQHLWKHUVLGHRIDUHODWLRQVKLS WKHFDUGLQDOLW\RIWKHUHODWLRQ
VKLS GHILQHWKHNH\FRQVWUDLQWVRIWKHUHODWLRQVKLS,WVLPSRUWDQWWRWKLQNDERXWWKH
FDUGLQDOLW\RIUHODWLRQVKLSVFDUHIXOO\7KHUHDUHPDQ\UHODWLRQVKLSVWKDWPD\DWILUVW
VHHPWREHRQHWRRQHEXWWXUQRXWWREHPRUHFRPSOH[)RUH[DPSOHSHRSOHVRPH
The Entity Relationship Model | 115

Given names
Surname
M
Customer

Email address

N
Telephone number

Name

Postal address

Price
Street address

Number

Buys
Timestamp

Product

Product ID

City
ZIP code
Country

)LJXUH  7KH (5 GLDJUDP UHSUHVHQWDWLRQ RI WKH FXVWRPHU DQG SURGXFW HQWLWLHV DQG WKH VDOH
UHODWLRQVKLSEHWZHHQWKHP

WLPHVFKDQJHWKHLUQDPHVLQVRPHDSSOLFDWLRQVVXFKDVSROLFHGDWDEDVHVWKLVLVRI
SDUWLFXODULQWHUHVWDQGVRLWPD\EHQHFHVVDU\WRPRGHODPDQ\WRPDQ\UHODWLRQVKLS
EHWZHHQ D SHUVRQ HQWLW\ DQG D QDPH HQWLW\ 5HGHVLJQLQJ D GDWDEDVH FDQ EH
WLPHFRQVXPLQJLI\RXDVVXPHDUHODWLRQVKLSLVVLPSOHUWKDQLWUHDOO\LV
,QDQ(5GLDJUDPZHUHSUHVHQWDUHODWLRQVKLSVHWZLWKDQDPHGGLDPRQG7KHFDUGLQ
DOLW\RIWKHUHODWLRQVKLSLVRIWHQLQGLFDWHGDORQJVLGHWKHUHODWLRQVKLSGLDPRQGWKLVLV
WKHVW\OHZHXVHLQWKLVERRN $QRWKHUFRPPRQVW\OHLVWRKDYHDQDUURZKHDGRQWKH
OLQHFRQQHFWLQJWKHHQWLW\RQWKHVLGHWRWKHUHODWLRQVKLSGLDPRQG )LJXUHVKRZV
WKHUHODWLRQVKLSEHWZHHQWKHFXVWRPHUDQGSURGXFWHQWLWLHVDORQJZLWKWKHQXPEHU
DQGWLPHVWDPSDWWULEXWHVRIWKHVDOHUHODWLRQVKLS

Partial and Total Participation


5HODWLRQVKLSV EHWZHHQ HQWLWLHV FDQ EH RSWLRQDO RU FRPSXOVRU\ ,Q RXU H[DPSOH ZH
FRXOGGHFLGHWKDWDSHUVRQLVFRQVLGHUHGWREHDFXVWRPHURQO\LIWKH\KDYHERXJKWD
SURGXFW2QWKHRWKHUKDQGZHFRXOGVD\WKDWDFXVWRPHULVDSHUVRQZKRPZHNQRZ
DERXWDQGZKRPZHKRSHPLJKWEX\VRPHWKLQJWKDWLVZHFDQKDYHSHRSOHOLVWHGDV
FXVWRPHUVLQRXUGDWDEDVHZKRQHYHUEX\DSURGXFW,QWKHILUVWFDVHWKHcustomerHQWLW\
KDVWRWDOSDUWLFLSDWLRQLQWKHERXJKWUHODWLRQVKLS DOOcustomerVKDYHERXJKWDSURGXFW
DQGZHFDQWKDYHDcustomerZKRKDVQWERXJKWDSURGXFW ZKLOHLQWKHVHFRQGFDVH
LWKDVSDUWLDOSDUWLFLSDWLRQ DcustomerFDQEX\DSURGXFW 7KHVHDUHUHIHUUHGWRDVWKH

116 | Chapter 4:Modeling and Designing Databases

SDUWLFLSDWLRQFRQVWUDLQWVRIWKHUHODWLRQVKLS,QDQ(5GLDJUDPZHLQGLFDWHWRWDOSDU
WLFLSDWLRQZLWKDGRXEOHOLQHEHWZHHQWKHHQWLW\ER[DQGWKHUHODWLRQVKLSGLDPRQG

Entity or Attribute?
)URPWLPHWRWLPHZHHQFRXQWHUFDVHVZKHUHZHZRQGHUZKHWKHUDQLWHPVKRXOGEH
DQDWWULEXWHRUDQHQWLW\RQLWVRZQ)RUH[DPSOHDQHPDLODGGUHVVFRXOGEHPRGHOHG
DVDQHQWLW\LQLWVRZQULJKW:KHQLQGRXEWFRQVLGHUWKHVHUXOHVRIWKXPE
,VWKHLWHPRIGLUHFWLQWHUHVWWRWKHGDWDEDVH"
2EMHFWVRIGLUHFWLQWHUHVWVKRXOGEHHQWLWLHVDQGLQIRUPDWLRQWKDWGHVFULEHVWKHP
VKRXOGEHVWRUHGLQDWWULEXWHV2XULQYHQWRU\DQGVDOHVGDWDEDVHLVUHDOO\LQWHUHVWHG
LQFXVWRPHUVDQGQRWWKHLUHPDLODGGUHVVHVVRWKHHPDLODGGUHVVZRXOGEHEHVW
PRGHOHGDVDQDWWULEXWHRIWKHcustomerHQWLW\
'RHVWKHLWHPKDYHFRPSRQHQWVRILWVRZQ"
,IVRZHPXVWILQGDZD\RIUHSUHVHQWLQJWKHVHFRPSRQHQWVDVHSDUDWHHQWLW\PLJKW
EHWKHEHVWVROXWLRQ,QWKHVWXGHQWJUDGHVH[DPSOHDWWKHVWDUWRIWKHFKDSWHUZH
VWRUHGWKHFRXUVHQDPH\HDUDQGVHPHVWHUIRUHDFKFRXUVHWKDWDVWXGHQWWDNHV,W
ZRXOGEHPRUHFRPSDFWWRWUHDWWKHFRXUVHDVDVHSDUDWHHQWLW\DQGWRFUHDWHDFODVV
,'QXPEHUWRLGHQWLI\HDFKWLPHDFRXUVHLVRIIHUHGWRVWXGHQWV WKHRIIHULQJ 
&DQWKHREMHFWKDYHPXOWLSOHLQVWDQFHV"
,IVRZHPXVWILQGDZD\WRVWRUHGDWDRQHDFKLQVWDQFH7KHFOHDQHVWZD\WRGR
WKLVLVWRUHSUHVHQWWKHREMHFWDVDVHSDUDWHHQWLW\,QRXUVDOHVH[DPSOHZHPXVW
DVNZKHWKHUFXVWRPHUVDUHDOORZHGWRKDYHPRUHWKDQRQHHPDLODGGUHVVLIWKH\
DUHZHVKRXOGPRGHOWKHHPDLODGGUHVVDVDVHSDUDWHHQWLW\
,VWKHREMHFWRIWHQQRQH[LVWHQWRUXQNQRZQ"
,IVRLWLVHIIHFWLYHO\DQDWWULEXWHRIRQO\VRPHRIWKHHQWLWLHVDQGLWZRXOGEHEHWWHU
WR PRGHO LW DV D VHSDUDWH HQWLW\ UDWKHU WKDQ DV DQ DWWULEXWH WKDW LV RIWHQ HPSW\
&RQVLGHUDVLPSOHH[DPSOHWRVWRUHVWXGHQWJUDGHVIRUGLIIHUHQWFRXUVHVZHFRXOG
KDYHDQDWWULEXWHIRUWKHVWXGHQWVJUDGHLQHYHU\SRVVLEOHFRXUVHWKLVLVVKRZQLQ
)LJXUH%HFDXVHPRVWVWXGHQWVZLOOKDYHJUDGHVIRURQO\DIHZRIWKHVHFRXUVHV
LWVEHWWHUWRUHSUHVHQWWKHJUDGHVDVDVHSDUDWHHQWLW\VHWDVLQ)LJXUH

Entity or Relationship?
$QHDV\ZD\WRGHFLGHZKHWKHUDQREMHFWVKRXOGEHDQHQWLW\RUDUHODWLRQVKLSLVWRPDS
QRXQVLQWKHUHTXLUHPHQWVWRHQWLWLHVDQGWRPDSWKHYHUEVWRUHODWLRQV)RUH[DPSOH
LQWKHVWDWHPHQW$GHJUHHSURJUDPLVPDGHXSRIRQHRUPRUHFRXUVHVZHFDQLGHQWLI\
WKHHQWLWLHVSURJUDPDQGFRXUVHDQGWKHUHODWLRQVKLSLVPDGHXSRI6LPLODUO\
LQ WKH VWDWHPHQW $ VWXGHQW HQUROOV LQ RQH SURJUDP ZH FDQ LGHQWLI\ WKH HQWLWLHV
VWXGHQWDQGSURJUDPDQGWKHUHODWLRQVKLSHQUROOVLQ2IFRXUVHZHFDQFKRRVH
GLIIHUHQWWHUPVIRUHQWLWLHVDQGUHODWLRQVKLSVWKDQWKRVHWKDWDSSHDULQWKHUHODWLRQVKLSV
EXWLWVDJRRGLGHDQRWWRGHYLDWHWRRIDUIURPWKHQDPLQJFRQYHQWLRQVXVHGLQWKH
The Entity Relationship Model | 117

Given names
Surname
Student ID
Date of birth
Student

Year enrolled
Grade: Computing Mathematics
Grade: Programming
Grade: Web Database Appplications
...Attributes for other courses...
Grade: Computer Forensics

)LJXUH7KH(5GLDJUDPUHSUHVHQWDWLRQRIVWXGHQWJUDGHVDVDWWULEXWHVRIWKHVWXGHQWHQWLW\

Given names

Student

Surname

Year
M

Student ID
Date of birth
Year enrolled

Takes

Semester

N
Mark
Course

Course name

)LJXUH7KH(5GLDJUDPUHSUHVHQWDWLRQRIVWXGHQWJUDGHVDVDVHSDUDWHHQWLW\

UHTXLUHPHQWVVRWKDWWKHGHVLJQFDQEHFKHFNHGDJDLQVWWKHUHTXLUHPHQWV$OOHOVHEHLQJ
HTXDOWU\WRNHHSWKHGHVLJQVLPSOHDQGDYRLGLQWURGXFLQJWULYLDOHQWLWLHVZKHUHSRV
VLEOHLHWKHUHVQRQHHGWRKDYHDVHSDUDWHHQWLW\IRUWKHVWXGHQWVHQUROOPHQWZKHQ
ZHFDQPRGHOLWDVDUHODWLRQVKLSEHWZHHQWKHH[LVWLQJVWXGHQWDQGSURJUDPHQWLWLHV

118 | Chapter 4:Modeling and Designing Databases

Passenger

Flight

Books

)LJXUH$SDVVHQJHUSDUWLFLSDWHVLQDQ01UHODWLRQVKLSZLWKIOLJKW

Intermediate Entities
,WLVRIWHQSRVVLEOHWRFRQFHSWXDOO\VLPSOLI\PDQ\WRPDQ\UHODWLRQVKLSVE\UHSODFLQJ
WKHPDQ\WRPDQ\UHODWLRQVKLSZLWKDQHZLQWHUPHGLDWHHQWLW\ VRPHWLPHVFDOOHGDQ
DVVRFLDWHHQWLW\ DQGFRQQHFWLQJWKHRULJLQDOHQWLWLHVWKURXJKDPDQ\WRRQHDQGDRQH
WRPDQ\UHODWLRQVKLS
&RQVLGHUWKHVWDWHPHQW$SDVVHQJHUFDQERRNDVHDWRQDIOLJKW7KLVLVDPDQ\WR
PDQ\UHODWLRQVKLSEHWZHHQWKHHQWLWLHVSDVVHQJHUDQGIOLJKW7KHUHODWHG(5GLD
JUDPIUDJPHQWLVVKRZQLQ)LJXUH
+RZHYHUOHWVORRNDWWKLVIURPERWKVLGHVRIWKHUHODWLRQVKLS
$Q\JLYHQIOLJKWFDQKDYHPDQ\SDVVHQJHUVZLWKDERRNLQJ
$Q\JLYHQSDVVHQJHUFDQKDYHERRNLQJVRQPDQ\IOLJKWV
+HQFHZHFDQFRQVLGHUWKHPDQ\WRPDQ\UHODWLRQVKLSWREHLQIDFWWZRRQHWRPDQ\
UHODWLRQVKLSVRQHHDFKZD\7KLVSRLQWVXVWRWKHH[LVWHQFHRIDKLGGHQLQWHUPHGLDWH
HQWLW\ WKH ERRNLQJ EHWZHHQWKHIOLJKW DQGWKHSDVVHQJHUHQWLWLHV7KH UHTXLUHPHQW
FRXOGEHEHWWHUZRUGHGDV$SDVVHQJHUFDQPDNHDERRNLQJIRUDVHDWRQDIOLJKW
7KHUHODWHG(5GLDJUDPIUDJPHQWLVVKRZQLQ)LJXUH
(DFKSDVVHQJHUFDQEHLQYROYHGLQPXOWLSOHERRNLQJVEXWHDFKERRNLQJEHORQJVWRD
VLQJOHSDVVHQJHUVRWKHFDUGLQDOLW\RIWKLVUHODWLRQVKLSLV16LPLODUO\WKHUHFDQEH
PDQ\ERRNLQJVIRUDJLYHQIOLJKWEXWHDFKERRNLQJLVIRUDVLQJOHIOLJKWVRWKLVUHOD
WLRQVKLSDOVRKDVFDUGLQDOLW\16LQFHHDFKERRNLQJPXVWEHDVVRFLDWHGZLWKDSDU
WLFXODUSDVVHQJHUDQGIOLJKWWKHERRNLQJHQWLW\SDUWLFLSDWHVWRWDOO\LQWKHUHODWLRQVKLSV
ZLWK WKHVH HQWLWLHV 7KLV WRWDO SDUWLFLSDWLRQ FRXOG QRW EH FDSWXUHG HIIHFWLYHO\ LQ WKH
UHSUHVHQWDWLRQLQ)LJXUH :HGHVFULEHGSDUWLDODQGWRWDOSDUWLFLSDWLRQHDUOLHULQ
3DUWLDODQG7RWDO3DUWLFLSDWLRQ

Weak and Strong Entities


&RQWH[WLVYHU\LPSRUWDQWLQRXUGDLO\LQWHUDFWLRQVLIZHNQRZWKHFRQWH[WZHFDQ
ZRUNZLWKDPXFKVPDOOHUDPRXQWRILQIRUPDWLRQ)RUH[DPSOHZHJHQHUDOO\FDOOIDPLO\
PHPEHUVE\RQO\WKHLUILUVWQDPHRUQLFNQDPH:KHUHDPELJXLW\H[LVWVZHDGGIXUWKHU
LQIRUPDWLRQVXFKDVWKHVXUQDPHWRFODULI\RXULQWHQW,QGDWDEDVHGHVLJQZHFDQRPLW

The Entity Relationship Model | 119

Passenger
1
Makes
N
Booking

Flight

N
Is for

)LJXUH7KHLQWHUPHGLDWHERRNLQJHQWLW\EHWZHHQWKHSDVVHQJHUDQGIOLJKWHQWLWLHV

VRPHNH\LQIRUPDWLRQIRUHQWLWLHVWKDWDUHGHSHQGHQWRQRWKHUHQWLWLHV)RUH[DPSOHLI
ZHZDQWHGWRVWRUHWKHQDPHVRIRXUFXVWRPHUVFKLOGUHQZHFRXOGFUHDWHDFKLOGHQWLW\
DQGVWRUHRQO\HQRXJKNH\LQIRUPDWLRQWRLGHQWLI\LWLQWKHFRQWH[WRILWVSDUHQW:H
FRXOGVLPSO\OLVWDFKLOGVILUVWQDPHRQWKHDVVXPSWLRQWKDWDFXVWRPHUZLOOQHYHUKDYH
VHYHUDOFKLOGUHQZLWKWKHVDPHILUVWQDPH+HUHWKHFKLOGHQWLW\LVDZHDNHQWLW\DQG
LWVUHODWLRQVKLSZLWKWKHFXVWRPHUHQWLW\LVFDOOHGDQLGHQWLI\LQJUHODWLRQVKLS:HDNHQ
WLWLHVSDUWLFLSDWHWRWDOO\LQWKHLGHQWLI\LQJUHODWLRQVKLSVLQFHWKH\FDQWH[LVWLQWKHGD
WDEDVHLQGHSHQGHQWO\RIWKHLURZQLQJHQWLW\
,QWKH(5GLDJUDPZHVKRZZHDNHQWLWLHVDQGLGHQWLI\LQJUHODWLRQVKLSVZLWKGRXEOH
OLQHVDQGWKHSDUWLDONH\RIDZHDNHQWLW\ZLWKDGDVKHGXQGHUOLQHDVLQ)LJXUH$
ZHDNHQWLW\LVXQLTXHO\LGHQWLILHGLQWKHFRQWH[WRILWVUHJXODU RUVWURQJ HQWLW\DQGVR
WKHIXOONH\IRUDZHDNHQWLW\LVWKHFRPELQDWLRQRILWVRZQ SDUWLDO NH\ZLWKWKHNH\RI
LWVRZQLQJHQWLW\7RXQLTXHO\LGHQWLI\DFKLOGLQRXUH[DPSOHZHQHHGWKHILUVWQDPH
RIWKHFKLOGDQGWKHHPDLODGGUHVVRIWKHFKLOGVSDUHQW
)LJXUHVKRZVDVXPPDU\RIWKHV\PEROVZHYHH[SODLQHGIRU(5GLDJUDPV

Entity Relationship Modeling Examples


(DUOLHULQWKLVFKDSWHUZHVKRZHG\RXKRZWRGHVLJQDGDWDEDVHDQGXQGHUVWDQGDQ
(QWLW\5HODWLRQVKLS (5 GLDJUDP7KLVVHFWLRQH[SODLQVWKHUHTXLUHPHQWVIRURXUWKUHH
H[DPSOHGDWDEDVHVmusic universityDQG flightDQGVKRZV\RXWKHLU(QWLW\5H
ODWLRQVKLSGLDJUDPV
7KHmusicGDWDEDVHLVGHVLJQHGWRVWRUHGHWDLOVRIDPXVLFFROOHFWLRQLQFOXGLQJWKH
DOEXPVLQWKHFROOHFWLRQWKHDUWLVWVZKRPDGHWKHPWKHWUDFNVRQWKHDOEXPVDQG
ZKHQHDFKWUDFNZDVODVWSOD\HG

120 | Chapter 4:Modeling and Designing Databases

Given names
Surname
Customer

Email address

Telephone number

Is a child of

Postal address
First name

Street address
Gender

Child

City
Date of birth
ZIP code
Country

)LJXUH7KH(5GLDJUDPUHSUHVHQWDWLRQRIDZHDNHQWLW\

7KHuniversityGDWDEDVHFDSWXUHVWKHGHWDLOVRIVWXGHQWVFRXUVHVDQGJUDGHVIRU
DXQLYHUVLW\
7KHflightGDWDEDVHVWRUHVDQDLUOLQHWLPHWDEOHRIIOLJKWURXWHVWLPHVDQGWKHSODQH
W\SHV
7KHQH[WVHFWLRQH[SODLQVWKHVHGDWDEDVHVHDFKZLWKLWV(5GLDJUDPDQGDQH[SODQDWLRQ
RIWKHPRWLYDWLRQIRULWVGHVLJQ<RXOOILQGWKDWXQGHUVWDQGLQJWKH(5GLDJUDPVDQG
WKHH[SODQDWLRQVRIWKHGDWDEDVHGHVLJQVLVVXIILFLHQWWRZRUNZLWKWKHPDWHULDOLQWKLV
FKDSWHU:HOOVKRZ\RXKRZWRFUHDWHWKH musicGDWDEDVHRQ\RXU0\64/VHUYHULQ
&KDSWHU

The Music Database


7KH musicGDWDEDVHVWRUHVGHWDLOVRIDSHUVRQDOPXVLFOLEUDU\DQGFRXOGEHXVHGWR
PDQDJH \RXU 03 &' RU YLQ\O FROOHFWLRQ %HFDXVH WKLV GDWDEDVH LV IRU D SHUVRQDO
FROOHFWLRQLWVUHODWLYHO\VLPSOHDQGVWRUHVRQO\WKHUHODWLRQVKLSVEHWZHHQDUWLVWVDO
EXPVDQGWUDFNV,WLJQRUHVWKHUHTXLUHPHQWVRIPDQ\PXVLFJHQUHVPDNLQJLWPRVW
XVHIXOIRUVWRULQJSRSXODUPXVLFDQGOHVVXVHIXOIRUVWRULQJMD]]RUFODVVLFDOPXVLF :H
GLVFXVVVRPHVKRUWFRPLQJVRIWKHVHUHTXLUHPHQWVDWWKHHQGRIWKHVHFWLRQLQ:KDWLW
GRHVQWGR
:HILUVWGUDZXSDFOHDUOLVWRIUHTXLUHPHQWVIRURXUGDWDEDVH

Entity Relationship Modeling Examples | 121

Attribute
Entity

Relationship

Entity

Component of key

Attribute

Multivalued attribute
1

Cardinality: 1

Identifying Relationship

Cardinality: N
Total participation

Weak entity

Attribute

Component of weak key

)LJXUH4XLFNVXPPDU\RIWKH(5GLDJUDPV\PEROV

7KHFROOHFWLRQFRQVLVWVRIDOEXPV
$QDOEXPLVPDGHE\H[DFWO\RQHDUWLVW
$QDUWLVWPDNHVRQHRUPRUHDOEXPV
$QDOEXPFRQWDLQVRQHRUPRUHWUDFNV
$UWLVWVDOEXPVDQGWUDFNVHDFKKDYHDQDPH
(DFKWUDFNLVRQH[DFWO\RQHDOEXP
(DFKWUDFNKDVDWLPHOHQJWKPHDVXUHGLQVHFRQGV
:KHQDWUDFNLVSOD\HGWKHGDWHDQGWLPHWKHSOD\EDFNEHJDQ WRWKHQHDUHVWVHF
RQG VKRXOGEHUHFRUGHGWKLVLVXVHGIRUUHSRUWLQJZKHQDWUDFNZDVODVWSOD\HG
DVZHOODVWKHQXPEHURIWLPHVPXVLFE\DQDUWLVWIURPDQDOEXPRUDWUDFNKDV
EHHQSOD\HG

7KHUHVQRUHTXLUHPHQWWRFDSWXUHFRPSRVHUVJURXSPHPEHUVRUVLGHPHQUHFRUGLQJ
GDWHRUORFDWLRQWKHVRXUFHPHGLDRUDQ\RWKHUGHWDLOVRIDUWLVWVDOEXPVRUWUDFNV
7KH(5GLDJUDPGHULYHGIURPRXUUHTXLUHPHQWVLVVKRZQLQ)LJXUH<RXOOQRWLFH
WKDWLWFRQVLVWVRIRQO\RQHWRPDQ\UHODWLRQVKLSVRQHDUWLVWFDQPDNHPDQ\DOEXPV
RQHDOEXPFDQFRQWDLQPDQ\WUDFNVDQGRQHWUDFNFDQEHSOD\HGPDQ\WLPHV&RQ
YHUVHO\HDFKSOD\LVDVVRFLDWHGZLWKRQHWUDFNDWUDFNLVRQRQHDOEXPDQGDQDOEXP
LVE\RQHDUWLVW7KHDWWULEXWHVDUHVWUDLJKWIRUZDUGDUWLVWVDOEXPVDQGWUDFNVKDYH
QDPHVDVZHOODVLGHQWLILHUVWRXQLTXHO\LGHQWLI\HDFKHQWLW\7KHWUDFNHQWLW\KDVDWLPH
DWWULEXWHWRVWRUHWKHGXUDWLRQDQGWKHSOD\HGHQWLW\KDVDWLPHVWDPSWRVWRUHZKHQWKH
WUDFNZDVSOD\HG

122 | Chapter 4:Modeling and Designing Databases

artist_id
Artist
artist_name
1
Compiles
N
album_id

1
Contains
track_id
track_name
time

Album
album_name

Track
1
WasPlayedAt
N

played

Played

)LJXUH7KH(5GLDJUDPRIWKHPXVLFGDWDEDVH

7KHRQO\VWURQJHQWLW\LQWKHGDWDEDVHLVArtistZKLFKKDVDQartist_idDWWULEXWHWKDW
XQLTXHO\LGHQWLILHVLW(DFKAlbumHQWLW\LVXQLTXHO\LGHQWLILHGE\LWValbum_idFRPELQHG
ZLWK WKH artist_id RI WKH FRUUHVSRQGLQJ Artist HQWLW\ $ Track HQWLW\ LV VLPLODUO\
XQLTXHO\LGHQWLILHGE\LWVtrack_idFRPELQHGZLWKWKHUHODWHGalbum_idDQGartist_id
DWWULEXWHV7KHPlayedHQWLW\LVXQLTXHO\LGHQWLILHGE\DFRPELQDWLRQRILWVplayedWLPH
DQGWKHUHODWHGtrack_idalbum_idDQGartist_idDWWULEXWHV

What it doesnt do
:HYHNHSWWKHmusicGDWDEDVHVLPSOHEHFDXVHDGGLQJH[WUDIHDWXUHVGRHVQWKHOS\RX
OHDUQDQ\WKLQJQHZLWMXVWPDNHVWKHH[SODQDWLRQVORQJHU,I\RXZDQWHGWRXVHWKH
musicGDWDEDVHLQSUDFWLFHWKHQ\RXPLJKWFRQVLGHUDGGLQJWKHIROORZLQJIHDWXUHV
6XSSRUWIRUFRPSLODWLRQVRUYDULRXVDUWLVWVDOEXPVZKHUHHDFKWUDFNPD\EHE\D
GLIIHUHQWDUWLVWDQGPD\WKHQKDYHLWVRZQDVVRFLDWHGDOEXPOLNHGHWDLOVVXFKDVD
UHFRUGLQJGDWHDQGWLPH8QGHUWKLVPRGHOWKHDOEXPZRXOGEHDVWURQJHQWLW\
ZLWKPDQ\WRPDQ\UHODWLRQVKLSVEHWZHHQDUWLVWVDQGDOEXPV
3OD\OLVWVDXVHUFRQWUROOHGFROOHFWLRQRIWUDFNV)RUH[DPSOH\RXPLJKWFUHDWHD
SOD\OLVWRI\RXUIDYRULWHWUDFNVIURPDQDUWLVW
7UDFNUDWLQJVWRUHFRUG\RXURSLQLRQRQKRZJRRGDWUDFNLV

Entity Relationship Modeling Examples | 123

6RXUFHGHWDLOVVXFKDVZKHQ\RXERXJKWDQDOEXPZKDWPHGLDLWFDPHRQKRZ
PXFK\RXSDLGDQGVRRQ
$OEXPGHWDLOVVXFKDVZKHQDQGZKHUHLWZDVUHFRUGHGWKHSURGXFHUDQGODEHO
WKHEDQGPHPEHUVRUVLGHPHQZKRSOD\HGRQWKHDOEXPDQGHYHQLWVDUWZRUN
6PDUWHUWUDFNPDQDJHPHQWVXFKDVPRGHOLQJWKDWDOORZVWKHVDPHWUDFNWRDSSHDU
RQPDQ\DOEXPV

The University Database


7KHuniversityGDWDEDVHVWRUHVGHWDLOVDERXWXQLYHUVLW\VWXGHQWVFRXUVHVWKHVHPHVWHU
DVWXGHQWWRRNDSDUWLFXODUFRXUVH DQGKLVPDUNDQGJUDGHLIKHFRPSOHWHGLW DQGZKDW
GHJUHHSURJUDPHDFKVWXGHQWLVHQUROOHGLQ7KHGDWDEDVHLVDORQJZD\IURPRQHWKDWG
EHVXLWDEOHIRUDODUJHWHUWLDU\LQVWLWXWLRQEXWLWGRHVLOOXVWUDWHUHODWLRQVKLSVWKDWDUH
LQWHUHVWLQJWRTXHU\DQGLWVHDV\WRUHODWHWRZKHQ\RXUHOHDUQLQJ64/:HH[SODLQ
WKHUHTXLUHPHQWVQH[WDQGGLVFXVVWKHLUVKRUWFRPLQJVDWWKHHQGRIWKLVVHFWLRQ
&RQVLGHUWKHIROORZLQJUHTXLUHPHQWVOLVW

7KHXQLYHUVLW\RIIHUVRQHRUPRUHSURJUDPV
$SURJUDPLVPDGHXSRIRQHRUPRUHFRXUVHV
$VWXGHQWPXVWHQUROOLQDSURJUDP
$VWXGHQWWDNHVWKHFRXUVHVWKDWDUHSDUWRIKHUSURJUDP
$SURJUDPKDVDQDPHDSURJUDPLGHQWLILHUWKHWRWDOFUHGLWSRLQWVUHTXLUHGWR
JUDGXDWHDQGWKH\HDULWFRPPHQFHG
$ FRXUVH KDV D QDPH D FRXUVH LGHQWLILHU D FUHGLW SRLQW YDOXH DQG WKH \HDU LW
FRPPHQFHG
6WXGHQWVKDYHRQHRUPRUHJLYHQQDPHVDVXUQDPHDVWXGHQWLGHQWLILHUDGDWHRI
ELUWKDQGWKH\HDUWKH\ILUVWHQUROOHG:HFDQWUHDWDOOJLYHQQDPHVDVDVLQJOHREMHFW
IRUH[DPSOH-RKQ3DXO
:KHQDVWXGHQWWDNHVDFRXUVHWKH\HDUDQGVHPHVWHUKHDWWHPSWHGLWDUHUHFRUGHG
:KHQ KH ILQLVKHV WKH FRXUVH D JUDGH VXFK DV $ RU %  DQG D PDUN VXFK DV 
SHUFHQW DUHUHFRUGHG
(DFK FRXUVH LQ D SURJUDP LV VHTXHQFHG LQWR D \HDU IRU H[DPSOH \HDU   DQG D
VHPHVWHU IRUH[DPSOHVHPHVWHU 

7KH(5GLDJUDPGHULYHGIURPRXUUHTXLUHPHQWVLVVKRZQLQ)LJXUH$OWKRXJKLW
LVFRPSDFWWKHGLDJUDPXVHVVRPHDGYDQFHGIHDWXUHVLQFOXGLQJUHODWLRQVKLSVWKDWKDYH
DWWULEXWHVDQGWZRPDQ\WRPDQ\UHODWLRQVKLSV
,QRXUGHVLJQ
StudentLVDVWURQJHQWLW\ZLWKDQLGHQWLILHUstudent_idFUHDWHGWREHWKHSULPDU\
NH\XVHGWRGLVWLQJXLVKEHWZHHQVWXGHQWV UHPHPEHUZHFRXOGKDYHVHYHUDOVWX
GHQWVZLWKWKHVDPHQDPH 
124 | Chapter 4:Modeling and Designing Databases

GivenNames

Name

Surname

program_id
N

Student_ID

Student

EnrollsIn

Program

YearCommenced

Date_of_Birth
Year

YearEnrolled
N
Year

CreditPoints

Attempts

1
Contains

Semester

Name

M
Semester

course_id
Course

Mark

CreditPoints

Grade

YearCommenced

)LJXUH7KH(5GLDJUDPRIWKHXQLYHUVLW\GDWDEDVH

ProgramLVDVWURQJHQWLW\ZLWKWKHLGHQWLILHUprogram_idDVWKHSULPDU\NH\XVHGWR
GLVWLQJXLVKEHWZHHQSURJUDPV
(DFK VWXGHQW PXVW EH HQUROOHG LQ D SURJUDP VR WKH Student HQWLW\ SDUWLFLSDWHV
WRWDOO\ LQ WKH PDQ\WRRQH EnrollsIn UHODWLRQVKLS ZLWK Program $ SURJUDP FDQ
H[LVW ZLWKRXW KDYLQJ DQ\ HQUROOHG VWXGHQWV VR LW SDUWLFLSDWHV SDUWLDOO\ LQ WKLV
UHODWLRQVKLS
$CourseKDVPHDQLQJRQO\LQWKHFRQWH[WRIDProgramVRLWVDZHDNHQWLW\ZLWK
course_idDVDZHDNNH\7KLVPHDQVWKDWDCourseLVXQLTXHO\LGHQWLILHGXVLQJLWV
course_idDQGWKHprogram_idRILWVRZQLQJSURJUDP
$VDZHDNHQWLW\ CourseSDUWLFLSDWHVWRWDOO\LQWKHPDQ\WRRQHLGHQWLI\LQJUHOD
WLRQVKLSZLWKLWVRZQLQJProgram7KLVUHODWLRQVKLSKDVYearDQGSemesterDWWULEXWHV
WKDWLGHQWLI\LWVVHTXHQFHSRVLWLRQ
StudentDQGCourseDUHUHODWHGWKURXJKWKHPDQ\WRPDQ\AttemptsUHODWLRQVKLSV
DFRXUVHFDQH[LVWZLWKRXWDVWXGHQWDQGDVWXGHQWFDQEHHQUROOHGZLWKRXWDW
WHPSWLQJDQ\FRXUVHVVRWKHSDUWLFLSDWLRQLVQRWWRWDO
:KHQDVWXGHQWDWWHPSWVDFRXUVHWKHUHDUHDWWULEXWHVWRFDSWXUHWKH YearDQG
SemesterDQGWKHMarkDQGGrade

Entity Relationship Modeling Examples | 125

What it doesnt do
2XUGDWDEDVHGHVLJQLVUDWKHUVLPSOHEXWWKLVLVEHFDXVHWKHUHTXLUHPHQWVDUHVLPSOH
)RUDUHDOXQLYHUVLW\PDQ\PRUHDVSHFWVZRXOGQHHGWREHFDSWXUHGE\WKHGDWDEDVH
)RUH[DPSOHWKHUHTXLUHPHQWVGRQWPHQWLRQDQ\WKLQJDERXWFDPSXVVWXG\PRGH
FRXUVHSUHUHTXLVLWHVOHFWXUHUVWLPHWDEOLQJGHWDLOVDGGUHVVKLVWRU\ILQDQFLDOVRUDV
VHVVPHQWGHWDLOV7KHGDWDEDVHDOVRGRHVQWDOORZDVWXGHQWWREHLQPRUHWKDQRQH
GHJUHHSURJUDPQRUGRHVLWDOORZDFRXUVHWRDSSHDUDVSDUWRIGLIIHUHQWSURJUDPV

The Flight Database


7KH flightGDWDEDVHVWRUHVGHWDLOVDERXWDQDLUOLQHVIOHHWIOLJKWVDQGVHDWERRNLQJV
$JDLQLWVDKXJHO\VLPSOLILHGYHUVLRQRIZKDWDUHDODLUOLQHZRXOGXVHEXWWKHSULQFLSOHV
DUHWKHVDPH
&RQVLGHUWKHIROORZLQJUHTXLUHPHQWVOLVW
7KHDLUOLQHKDVRQHRUPRUHDLUSODQHV
$QDLUSODQHKDVDPRGHOQXPEHUDXQLTXHUHJLVWUDWLRQQXPEHUDQGWKHFDSDFLW\
WRWDNHRQHRUPRUHSDVVHQJHUV
$QDLUSODQHIOLJKWKDVDXQLTXHIOLJKWQXPEHUDGHSDUWXUHDLUSRUWDGHVWLQDWLRQ
DLUSRUWDGHSDUWXUHGDWHDQGWLPHDQGDQDUULYDOGDWHDQGWLPH
(DFKIOLJKWLVFDUULHGRXWE\DVLQJOHDLUSODQH
$SDVVHQJHUKDVJLYHQQDPHVDVXUQDPHDQGDXQLTXHHPDLODGGUHVV
$SDVVHQJHUFDQERRNDVHDWRQDIOLJKW
7KH(5GLDJUDPGHULYHGIURPRXUUHTXLUHPHQWVLVVKRZQLQ)LJXUH
$QAirplaneLVXQLTXHO\LGHQWLILHGE\LWVRegistrationNumberVRZHXVHWKLVDVWKH
SULPDU\NH\
$FlightLVXQLTXHO\LGHQWLILHGE\LWVFlightNumberVRZHXVHWKHIOLJKWQXPEHUDV
WKHSULPDU\NH\7KHGHSDUWXUHDQGGHVWLQDWLRQDLUSRUWVDUHFDSWXUHGLQWKH From
DQGToDWWULEXWHVDQGZHKDYHVHSDUDWHDWWULEXWHVIRUWKHGHSDUWXUHDQGDUULYDOGDWH
DQGWLPH
%HFDXVHQRWZRSDVVHQJHUVZLOOVKDUHDQHPDLODGGUHVVZHFDQXVHWKH EmailAd
dressDVWKHSULPDU\NH\IRUWKHPassengerHQWLW\
$QDLUSODQHFDQEHLQYROYHGLQDQ\QXPEHURIIOLJKWVZKLOHHDFKIOLJKWXVHVH[DFWO\
RQHDLUSODQHVRWKHFliesUHODWLRQVKLSEHWZHHQWKHAirplaneDQGFlightUHODWLRQ
VKLSVKDVFDUGLQDOLW\1EHFDXVHDIOLJKWFDQQRWH[LVWZLWKRXWDQDLUSODQHWKH
FlightHQWLW\SDUWLFLSDWHVWRWDOO\LQWKLVUHODWLRQVKLS
$SDVVHQJHUFDQERRNDQ\QXPEHURIIOLJKWVZKLOHDIOLJKWFDQEHERRNHGE\DQ\
QXPEHURISDVVHQJHUV$VGLVFXVVHGHDUOLHULQ,QWHUPHGLDWH(QWLWLHVZHFRXOG
VSHFLI\DQ01BooksUHODWLRQVKLSEHWZHHQWKHPassengerDQGFlightUHODWLRQVKLS

126 | Chapter 4:Modeling and Designing Databases

GivenNames

ModelNumber
RegistrationNumber

Passenger

Airplane

Capacity
FlightNumber

Books

Flies

Flight

EmailAddress

Booking

From
To

Surname

N
HasBooking

DepartureDate
DepartureTime
ArrivalDate
ArrivalTime

)LJXUH7KH(5GLDJUDPRIWKHIOLJKWGDWDEDVH

EXWFRQVLGHULQJWKHLVVXHPRUHFDUHIXOO\VKRZVWKDWWKHUHLVDKLGGHQHQWLW\KHUH
WKHERRNLQJLWVHOI:HFDSWXUHWKLVE\FUHDWLQJWKHLQWHUPHGLDWHHQWLW\BookingDQG
1UHODWLRQVKLSVEHWZHHQLWDQGWKHPassengerDQGFlightHQWLWLHV,GHQWLI\LQJVXFK
HQWLWLHVDOORZVXVWRJHWDEHWWHUSLFWXUHRIWKHUHTXLUHPHQWV1RWHWKDWHYHQLIZH
GLGQW QRWLFH WKLV KLGGHQ HQWLW\ LW ZRXOG FRPH RXW DV SDUW RI WKH (5WRWDEOHV
PDSSLQJSURFHVVZHOOGHVFULEHQH[WLQ8VLQJWKH(QWLW\5HODWLRQVKLS0RGHO

What it doesnt do
$JDLQWKLVLVDYHU\VLPSOHIOLJKWGDWDEDVH7KHUHDUHQRUHTXLUHPHQWVWRFDSWXUHSDV
VHQJHUGHWDLOVVXFKDVDJHJHQGHURUIUHTXHQWIOLHUQXPEHU
:HYHWUHDWHGWKHFDSDFLW\RIWKHDLUSODQHDVDQDWWULEXWHRIDQLQGLYLGXDODLUSODQH,I
LQVWHDGZHDVVXPHGWKDWWKHFDSDFLW\LVGHWHUPLQHGE\WKHPRGHOQXPEHUZHZRXOG
KDYH FUHDWHG D QHZ AirplaneModel HQWLW\ ZLWK WKH DWWULEXWHV ModelNumber DQG
Capacity7KHAirplaneHQWLW\ZRXOGWKHQQRWKDYHDCapacityDWWULEXWH
:HYHPDSSHGDGLIIHUHQWIOLJKWQXPEHUWRHDFKIOLJKWEHWZHHQWZRGHVWLQDWLRQV$LU
OLQHVW\SLFDOO\XVHDIOLJKWQXPEHUWRLGHQWLI\DJLYHQIOLJKWSDWKDQGVFKHGXOHDQGWKH\
VSHFLI\WKHGDWHRIWKHIOLJKWLQGHSHQGHQWO\RIWKHIOLJKWQXPEHU)RUH[DPSOHWKHUHLV
RQH ,5 IOLJKW RQ $SULO  DQRWKHU RQ $SULO  DQG VR RQ 'LIIHUHQW DLUSODQHV FDQ

Entity Relationship Modeling Examples | 127

RSHUDWHRQWKHVDPHIOLJKWQXPEHURYHUWLPHRXUPRGHOZRXOGQHHGWREHH[WHQGHGWR
VXSSRUWWKLV
7KH V\VWHP DOVR DVVXPHV WKDW HDFK OHJ RI D PXOWLKRS IOLJKW KDV D GLIIHUHQW
FlightNumber7KLVPHDQVWKDWDIOLJKWIURP'XEDLWR&KULVWFKXUFKYLD6LQJDSRUHDQG
0HOERXUQHZRXOGQHHGDGLIIHUHQW FlightNumberIRUWKH'XEDL6LQJDSRUH6LQJDSRUH
0HOERXUQHDQG0HOERXUQH&KULVWFKXUFKOHJV
2XUGDWDEDVHDOVRKDVOLPLWHGDELOLW\WRGHVFULEHDLUSRUWV,QSUDFWLFHHDFKDLUSRUWKDV
DQDPHVXFKDV0HOERXUQH5HJLRQDO$LUSRUW0HKUDEDGRU7XOODPDULQH7KH
QDPHFDQEHXVHGWRGLIIHUHQWLDWHEHWZHHQDLUSRUWVEXWPRVWSDVVHQJHUVZLOOMXVWXVH
WKHQDPHRIWKHWRZQRUFLW\7KLVFDQOHDGWRFRQIXVLRQZKHQIRUH[DPSOHDSDVVHQJHU
FRXOGERRNDIOLJKWWR0HOERXUQH)ORULGD86$LQVWHDGRI0HOERXUQH9LFWRULD$XV
WUDOLD7RDYRLGVXFKSUREOHPVWKH,QWHUQDWLRQDO$LU7UDQVSRUW$VVRFLDWLRQ ,$7$
DVVLJQVDXQLTXHDLUSRUWFRGHWRHDFKDLUSRUWWKHDLUSRUWFRGHIRU0HOERXUQH)ORULGD
86$LV0/%ZKLOHWKHFRGHIRU0HOERXUQH9LFWRULD$XVWUDOLDLV0(/,IZHZHUHWR
PRGHOWKHDLUSRUWDVDVHSDUDWHHQWLW\ZHFRXOGXVHWKH,$7$DVVLJQHGDLUSRUWFRGHDV
WKHSULPDU\NH\,QFLGHQWDOO\WKHUHVDQDOWHUQDWLYHVHWRIDLUSRUWFRGHVDVVLJQHGE\WKH
,QWHUQDWLRQDO&LYLO$YLDWLRQ2UJDQL]DWLRQ ,&$2 XQGHUWKLVFRGH0HOERXUQH)ORULGD
LV.0/%DQG0HOERXUQH$XVWUDOLDLV<00/

Using the Entity Relationship Model


,QWKLVVHFWLRQZHOOORRNDWWKHVWHSVUHTXLUHGWRPDQXDOO\WUDQVODWHDQ(5PRGHOLQWR
GDWDEDVHWDEOHV:HOOWKHQSHUIRUPWKHVHVWHSVXVLQJWKHmusicGDWDEDVHDVDQH[DPSOH
,Q8VLQJ7RROVIRU'DWDEDVH'HVLJQZHOOVHHKRZZHFDQDXWRPDWHWKLVSURFHVVZLWK
WKH0\64/:RUNEHQFKWRRO

Mapping Entities and Relationships to Database Tables


:KHQFRQYHUWLQJDQ(5PRGHOWRDGDWDEDVHVFKHPDZHZRUNWKURXJKHDFKHQWLW\DQG
WKHQWKURXJKHDFKUHODWLRQVKLSDFFRUGLQJWRWKHIROORZLQJUXOHVWRHQGXSZLWKDVHWRI
GDWDEDVHWDEOHV

Map the entities to database tables


)RUHDFKVWURQJHQWLW\FUHDWHDWDEOHFRPSULVLQJLWVDWWULEXWHVDQGGHVLJQDWHWKHSULPDU\
NH\7KHSDUWVRIDQ\FRPSRVLWHDWWULEXWHVDUHDOVRLQFOXGHGKHUH
)RUHDFKZHDNHQWLW\FUHDWHDWDEOHFRPSULVLQJLWVDWWULEXWHVDQGLQFOXGLQJWKHSULPDU\
NH\RILWVRZQLQJHQWLW\7KHSULPDU\NH\RIWKHRZQLQJHQWLW\LVNQRZQDVDIRUHLJQ
NH\KHUHEHFDXVHLWVDNH\QRWRIWKLVWDEOHEXWRIDQRWKHUWDEOH7KHSULPDU\NH\RI
WKHWDEOHIRUWKHZHDNHQWLW\LVWKHFRPELQDWLRQRIWKHIRUHLJQNH\DQGWKHSDUWLDONH\
RIWKHZHDNHQWLW\,IWKHUHODWLRQVKLSZLWKWKHRZQLQJHQWLW\KDVDQ\DWWULEXWHVDGG
WKHPWRWKLVWDEOH

128 | Chapter 4:Modeling and Designing Databases

)RUHDFKPXOWLYDOXHGDWWULEXWHRIDQHQWLW\FUHDWHDWDEOHFRPSULVLQJWKHHQWLW\VSUL
PDU\NH\DQGWKHDWWULEXWH

Map the relationships to database tables


)RUHDFKRQHWRRQHUHODWLRQVKLSEHWZHHQWZRHQWLWLHVLQFOXGHWKHSULPDU\NH\RIRQH
HQWLW\DVDIRUHLJQNH\LQWKHWDEOHEHORQJLQJWRWKHRWKHU,IRQHHQWLW\SDUWLFLSDWHV
WRWDOO\LQWKHUHODWLRQVKLSSODFHWKHIRUHLJQNH\LQLWVWDEOH,IERWKSDUWLFLSDWHWRWDOO\
LQWKHUHODWLRQVKLSFRQVLGHUPHUJLQJWKHPLQWRDVLQJOHWDEOH
)RUHDFKQRQLGHQWLI\LQJRQHWRPDQ\UHODWLRQVKLSEHWZHHQWZRHQWLWLHVLQFOXGHWKH
SULPDU\NH\RIWKHHQWLW\RQWKHVLGHDVDIRUHLJQNH\LQWKHWDEOHIRUWKHHQWLW\RQ
WKH1VLGH$GGDQ\DWWULEXWHVRIWKHUHODWLRQVKLSLQWKHWDEOHDORQJVLGHWKHIRUHLJQ
NH\1RWHWKDWLGHQWLI\LQJRQHWRPDQ\UHODWLRQVKLSV EHWZHHQDZHDNHQWLW\DQGLWV
RZQLQJHQWLW\ DUHFDSWXUHGDVSDUWRIWKHHQWLW\PDSSLQJVWDJH
)RUHDFKPDQ\WRPDQ\UHODWLRQVKLSEHWZHHQWZRHQWLWLHVFUHDWHDQHZWDEOHFRQWDLQ
LQJWKHSULPDU\NH\RIHDFKHQWLW\DVWKHSULPDU\NH\DQGDGGDQ\DWWULEXWHVRIWKH
UHODWLRQVKLS7KLVVWHSKHOSVWRLGHQWLI\LQWHUPHGLDWHHQWLWLHV
)RUHDFKUHODWLRQVKLSLQYROYLQJPRUHWKDQWZRHQWLWLHVFUHDWHDWDEOHZLWKWKHSULPDU\
NH\VRIDOOWKHSDUWLFLSDWLQJHQWLWLHVDQGDGGDQ\DWWULEXWHVRIWKHUHODWLRQVKLS

Converting the Music Database ER Model to a Database Schema


)ROORZLQJWKHPDSSLQJUXOHVDVMXVWGHVFULEHGZHILUVWPDSHQWLWLHVWRGDWDEDVHWDEOHV
)RUWKHVWURQJHQWLW\ArtistZHFUHDWHWKHWDEOHartistFRPSULVLQJWKHDWWULEXWHV
artist_idDQGartist_nameDQGGHVLJQDWHartist_idDVWKHSULPDU\NH\
)RU WKH ZHDN HQWLW\ Album ZH FUHDWH WKH WDEOH album FRPSULVLQJ WKH DWWULEXWHV
album_idDQG album_nameDQGLQFOXGHWKHSULPDU\NH\ artist_idRIWKHRZQLQJ
ArtistHQWLW\DVDIRUHLJQNH\7KHSULPDU\NH\RIWKHalbumWDEOHLVWKHFRPELQDWLRQ
^artist_idalbum_id`
)RU WKH ZHDN HQWLW\ Track ZH FUHDWH WKH WDEOH track FRPSULVLQJ WKH DWWULEXWHV
track_id track_name DQG time DQG LQFOXGH WKH SULPDU\ NH\ ^artist_id
album_id` RI WKH RZQLQJ Album HQWLW\ DV D IRUHLJQ NH\ 7KH SULPDU\ NH\ RI WKH
trackWDEOHLVWKHFRPELQDWLRQ^artist_idalbum_idtrack_id`
)RUWKHZHDNHQWLW\ PlayedZHFUHDWHWKHWDEOH playedFRPSULVLQJWKHDWWULEXWH
playedDQGLQFOXGHWKHSULPDU\NH\^artist_idalbum_idtrack_id}RIWKHRZQLQJ
TrackHQWLW\DVDIRUHLJQNH\7KHSULPDU\NH\RIWKHplayedWDEOHLVWKHFRPELQDWLRQ
^artist_idalbum_idtrack_idplayed`
7KHUHDUHQRPXOWLYDOXHGDWWULEXWHVLQRXUGHVLJQQRUDUHWKHUHDQ\QRQZHDNUH
ODWLRQVKLSVEHWZHHQRXUHQWLWLHVVRRXUPDSSLQJLVFRPSOHWHKHUH
<RXGRQWKDYHWRXVHFRQVLVWHQWQDPHVDFURVVDOOWDEOHVIRUH[DPSOH\RXFRXOGKDYH
D FROXPQ musician LQ WKH album WDEOH WKDW FRQWDLQV WKH DUWLVW ,' WKDW \RX FDOO
Using the Entity Relationship Model | 129

)LJXUH8VLQJWKH'LDSURJUDPWRGUDZDQ(5GLDJUDP

artist_idLQWKH artistWDEOH2EYLRXVO\LWVPXFKEHWWHUWRXVHDFRQVLVWHQWQDPLQJ
FRQYHQWLRQWRDYRLGFRQIXVLRQ6RPHGHVLJQHUVSXWfk_LQIURQWRIFROXPQVWKDWFRQWDLQ
IRUHLJQ NH\V IRU H[DPSOH LQ WKH album WDEOH ZH FRXOG VWRUH WKH DUWLVW ,' LQ WKH
fk_artist_idFROXPQ:HGRQWXVHWKLVFRQYHQWLRQLQWKLVERRN

Using Tools for Database Design


,WVDJRRGLGHDWRXVHDWRROWRGUDZ\RXU(5GLDJUDPVWKLVZD\\RXFDQHDVLO\HGLW
GLDJUDPVDV\RXUHILQH\RXUGHVLJQVDQGWKHILQDOGLDJUDPLVFOHDUDQGXQDPELJXRXV
7KHUHDUHDODUJHQXPEHURISURJUDPVWKDWFDQEHXVHGIRUWKLVSXUSRVH$JRRGIUHH
WRROWKDWLVDYDLODEOHIRUERWK/LQX[DQG:LQGRZVLV'LD\RXFDQGRZQORDGWKHODWHVW
YHUVLRQIURPKWWSZZZJQRPHRUJSURMHFWVGLD0DF26;XVHUVFDQXVHWKH2PQL
*UDIIOHSURJUDPWKDWFRPHVEXQGOHGZLWKWKHRSHUDWLQJV\VWHP:LQGRZVXVHUVFDQ
DOVRXVH0LFURVRIW9LVLR
$VFUHHQVKRWRI'LDLVVKRZQLQ)LJXUH:KHQ\RXRSHQWKHSURJUDP\RXVKRXOG
ILUVWVHOHFWWKH(5VKHHWRIVKDSHVIURPWKHGURSGRZQOLVWLQWKHPLGGOHRIWKHFRQWURO
ZLQGRZ ZKHUHWKH(5ODEHODSSHDUVDWWKHULJKWRIWKHILJXUH DQGWKHQVHOHFWIURPWKH
HQWLW\DQGUHODWLRQVKDSHV
<RXFDQDVVLJQSURSHUWLHVWRVKDSHVE\GRXEOHFOLFNLQJRQWKHP)RUH[DPSOH\RXFDQ
PDUNDQDWWULEXWHDVEHLQJDNH\RUDZHDNNH\DQG\RXFDQPDUNDQHQWLW\VSDUWLFL
SDWLRQLQDUHODWLRQDVEHLQJWRWDORUSDUWLDO

130 | Chapter 4:Modeling and Designing Databases

)LJXUH$VFUHHQVKRWRIWKH0\64/:RUNEHQFKSURJUDPWRGHVLJQWKH)OLJKWGDWDEDVH

7KHRSHQVRXUFH0\64/:RUNEHQFKSURJUDPLVDYHU\SRZHUIXOYLVXDOGDWDEDVHGHVLJQ
WRRODYDLODEOHDVSDUWRIWKH0\64/*8,7RROV%XQGOHIURPWKH0\64/$%GRZQORDGV
SDJHDWKWWSGHYP\VTOFRPGRZQORDGV
)LJXUHVKRZVDVFUHHQVKRWRIXVLQJ0\64/:RUNEHQFKWRGHVLJQWKHflightGD
WDEDVH<RXFDQVHOHFWWDEOHVDQGUHODWLRQVIURPWKHWRROEDULFRQVRQWKHOHIWRIWKH
VFUHHQDQGGRXEOHFOLFNRQHDFKREMHFWWRVHWSURSHUWLHVVXFKDVDWWULEXWHVDQGUHOD
WLRQVKLSFDUGLQDOLW\
$YHU\XVHIXOIHDWXUHRI0\64/:RUNEHQFKLVWKDWLWFDQH[SRUW\RXUGHVLJQDV64/
VWDWHPHQWVUHDG\WRXVHRQD0\64/GDWDEDVH(YHQEHWWHULWFDQFRQQHFWWRD0\64/
GDWDEDVHWRH[SRUWDGHVLJQGLUHFWO\<RXFDQDOVRUHYHUVHHQJLQHHUDQ(5PRGHOIURP
DQH[LVWLQJGDWDEDVHHGLWWKHPRGHODQGWKHQH[SRUWWKHPRGLILHGGHVLJQEDFNWRWKH
0\64/GDWDEDVH1RWHWKDWWKLVSURJUDPLVFXUUHQWO\LQWKHEHWDWHVWLQJSKDVHVR\RX
VKRXOGXVHLWZLWKFDUH

Using Tools for Database Design | 131

Resources
7ROHDUQPRUHDERXWGDWDEDVHIXQGDPHQWDOVLQFOXGLQJ(5PRGHOLQJZHUHFRPPHQG
WKHIROORZLQJERRNV
'DWDEDVH 0DQDJHPHQW 6\VWHPV E\ 5DJKX 5DPDNULVKQDQ DQG -RKDQQHV *HKUNH
0F*UDZ+LOO 
)XQGDPHQWDOVRI'DWDEDVH6\VWHPVE\5DPH](OPDVULDQG6KDPNDQW%1DYDWKH
$GGLVRQ:HVOH\ 
'DWDEDVH6\VWHPV$3UDFWLFDO$SSURDFKWR'HVLJQ,PSOHPHQWDWLRQDQG0DQDJH
PHQWE\7KRPDV0&RQQROO\DQG&DURO\Q(%HJJ $GGLVRQ:HVOH\ 

Exercises
 :KHQZRXOG\RXXVHDZHDNHQWLW\"
 ,VLWEHWWHUWRXVHHQWLWLHVLQVWHDGRIDWWULEXWHV"
 $OWHUDQGH[WHQGWKH musicGDWDEDVH(5PRGHOVRWKDWLWFDQVWRUHFRPSLODWLRQV
ZKHUH D FRPSLODWLRQ LV DQ DOEXP WKDW FRQWDLQV WUDFNV E\ WZR RU PRUH GLIIHUHQW
DUWLVWV
 &UHDWHDQ(5GLDJUDPIRUDQRQOLQHPHGLDVWRUHXVLQJWKHIROORZLQJUHTXLUHPHQWV
7KHUHDUHWZRW\SHVRISURGXFWPXVLF&'VDQGYLGHR'9'V
&XVWRPHUVFDQEX\DQ\QXPEHURIHDFKSURGXFW
)RUHDFK&'VWRUHWKHWLWOHWKHDUWLVWVQDPHWKHODEHO SXEOLVKHU DQGWKH
SULFH$OVRVWRUHWKHQXPEHUWLWOHDQGOHQJWK LQVHFRQGV RIHDFKWUDFNRQWKH
&'
)RUHDFKYLGHR'9'VWRUHWKHWLWOHWKHVWXGLRQDPHDQGWKHSULFH
7DEOHVDQGFRQWDLQVRPHVDPSOHGDWDWRKHOS\RXEHWWHUXQGHUVWDQGWKH
UHTXLUHPHQWV
7DEOH9LGHR'9'V
Title

Studio

Price

LeonThe Professional

Sony Pictures

$21.99

Chicken Run

Dreamworks Video

$19.99

132 | Chapter 4:Modeling and Designing Databases

7DEOH0XVLF&'V
Title

Artist

Label

Price

Come Away With Me

Norah Jones

Blue Note Records

$11.99

Feels Like Home

Norah Jones

Blue Note Records

$11.99

The Joshua Tree

U2

Island

$10.99

Brothers in Arms

Dire Straits

Vertigo

$9.99

7DEOHFRQWDLQVDVDPSOHOLVWRIPXVLF&'WUDFNWLWOHVDQGOHQJWKLQVHFRQGVIRU
WKH&'ZLWKWKHWLWOH&RPH$ZD\:LWK0HE\WKHDUWLVW1RUDK-RQHV
7DEOH7UDFNV
Number

Name

Length

Dont Know Why

186

Seven Years

145

Cold, Cold Heart

218

Feelin the Same Way

177

Come Away with Me

198

Shoot the Moon

236

Turn Me On

154

Lonestar

186

Ive Got to See You Again

253

10

Painter Song

162

11

One Flight Down

185

12

Nightingale

252

13

The Long Day Is Over

164

14

The Nearness of You

187

Exercises | 133

CHAPTER 5

Basic SQL

64/LVWKHRQO\GDWDEDVHODQJXDJHLQZLGHVSUHDGXVH6LQFHLWZDVILUVWSURSRVHGLQWKH
HDUO\VLWKDVEHHQFULWLFL]HGFKDQJHGH[WHQGHGDQGILQDOO\DGRSWHGE\DOOWKH
SOD\HUVLQWKHGDWDEDVHPDUNHW7KHODWHVWVWDQGDUGLV64/WKHGHQRWHVLWV
UHOHDVH\HDUEXWWKHYHUVLRQVXSSRUWHGE\PRVWGDWDEDVHVHUYHUVLVPRUHFORVHO\UHODWHG
WRLWVSUHGHFHVVRUV64/DQG64/0\64/VXSSRUWVPRVWRIWKHIHDWXUHVRI
64/DQGPDQ\IURPWKHQHZHU64/VWDQGDUGVEXWLWDOVRLQFOXGHVPDQ\QRQ
VWDQGDUGIHDWXUHVWKDWJLYHPRUHFRQWURORYHUWKHGDWDEDVHVHUYHUDQGKRZLWHYDOXDWHV
TXHULHVDQGUHWXUQVUHVXOWV
7KLVFKDSWHULQWURGXFHVWKHEDVLFVRI0\64/VLPSOHPHQWDWLRQRI64/:HVKRZ\RX
KRZWRUHDGGDWDIURPDGDWDEDVHZLWKWKHSELECTVWDWHPHQWDQGKRZWRFKRRVHZKDW
GDWDLVUHWXUQHGDQGWKHRUGHULWLVGLVSOD\HGLQ:HDOVRVKRZ\RXWKHEDVLFVRIPRG
LI\LQJ\RXUGDWDEDVHVZLWKWKH INSERTVWDWHPHQWWRDGGGDWD UPDATEWRFKDQJHDQG
DELETEWRUHPRYHLW:HDOVRH[SODLQKRZWRXVHWKHQRQVWDQGDUGSHOW TABLESDQGSHOW
COLUMNSVWDWHPHQWVWRH[SORUH\RXUGDWDEDVH
)ROORZLQJRXUH[DPSOHEDVHGDSSURDFKZHXVHWKHmusicGDWDEDVHGHVLJQHGLQ&KDS
WHUWRVKRZ\RXKRZWRZRUNZLWKDQH[LVWLQJGDWDEDVHDQGXVHEDVLF64/WRUHDG
DQGZULWHGDWD,Q&KDSWHUZHOOH[SODLQKRZWRFUHDWHWKH musicGDWDEDVHRQ\RXU
0\64/VHUYHU:HOODOVRVKRZKRZ\RXFDQFUHDWH\RXURZQGDWDEDVHDQGWDEOHVDQG
PRGLI\WKHVWUXFWXUHRIH[LVWLQJRQHV,Q&KDSWHUVDQG\RXOOOHDUQDERXWVRPH
DGYDQFHGIHDWXUHVRIWKH64/YDULDQWXVHGE\0\64/

Using the Music Database


,Q&KDSWHUZHVKRZHG\RXKRZZHXQGHUVWRRGWKHUHTXLUHPHQWVIRUVWRULQJDPXVLF
FROOHFWLRQDQGKRZZHGHVLJQHGWKHmusic(5PRGHO:HDOVRLQWURGXFHGWKHVWHSV\RX
WDNHWRFRQYHUWDQ(5PRGHOWRDIRUPDWWKDWPDNHVVHQVHIRUFRQVWUXFWLQJDUHODWLRQDO
GDWDEDVH)RUFRQYHQLHQFHZHYHUHSURGXFHGWKH musicGDWDEDVH(5GLDJUDPLQ)LJ
XUH,QWKLVVHFWLRQZHVKRZ\RXWKHVWUXFWXUHRIWKH0\64/GDWDEDVHWKDWZH
FUHDWHGDIWHUFRQYHUWLQJWKH(5PRGHOLQWR64/VWDWHPHQWV:HGRQWH[SODLQWKH64/
VWDWHPHQWVZHXVHGWRFUHDWHWKHGDWDEDVHWKDWVWKHVXEMHFWRI&KDSWHU
135

artist_id
Artist
artist_name
1
Compiles
N
album_id

1
Contains
track_id
track_name
time

Album

album_name

Track
1
WasPlayedAt
N

played

Played

)LJXUH7KH(5GLDJUDPRIWKHPXVLFGDWDEDVH

7R EHJLQ H[SORULQJ WKH music GDWDEDVH FRQQHFW WR WKH 0\64/ PRQLWRU XVLQJ WKH
root0\64/DFFRXQW)RU0DF26;RU/LQX[UXQDWHUPLQDOSURJUDPDQGLQWKH
WHUPLQDOZLQGRZW\SH
$ mysql --user=root --password=the_mysql_root_password
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 5.0.22
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

)RU:LQGRZVFOLFNRQWKH6WDUWPHQXWKHQRQWKH5XQRSWLRQDQGWKHQW\SHcmdDQG
SUHVV(QWHU,QWKH'26RUFRPPDQGZLQGRZW\SH
C:\> mysql --user=root --password=the_mysql_root_password
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 5.0.22
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

,I\RXILQGWKDWWKHPRQLWRUGRHVQWVWDUWFKHFNWKHLQVWUXFWLRQVLQ(UURU0HVVDJH
$ERXW0\64/([HFXWDEOH3URJUDPV1RW%HLQJ)RXQGRU5HFRJQL]HGLQ&KDSWHUWR
VHHKRZWRUXQLW

136 | Chapter 5:Basic SQL

7KHVWUXFWXUHRIWKH musicGDWDEDVHLVVWUDLJKWIRUZDUGLWVWKHVLPSOHVWRIRXUWKUHH
VDPSOHGDWDEDVHV/HWVXVHWKH0\64/PRQLWRUWRH[SORUHLW,I\RXKDYHQWDOUHDG\
VWDUWWKHPRQLWRUXVLQJWKHLQVWUXFWLRQVLQ/RDGLQJWKH6DPSOH'DWDEDVHVLQ&KDS
WHU7RFKRRVHWKHmusicGDWDEDVHDV\RXUFXUUHQWGDWDEDVHW\SHWKHIROORZLQJ
mysql> USE music;
Database changed
mysql>

<RXFDQFKHFNWKDWWKLVLVWKHDFWLYHGDWDEDVHE\W\SLQJLQWKH SELECT DATABASE( );


FRPPDQG
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| music
|
+------------+
1 row in set (0.00 sec)
mysql>

1RZ OHWV H[SORUH ZKDW WDEOHV PDNH XS WKH music GDWDEDVH XVLQJ WKH SHOW TABLES
VWDWHPHQW
mysql> SHOW TABLES;
+-----------------+
| Tables_in_music |
+-----------------+
| album
|
| artist
|
| played
|
| track
|
+-----------------+
4 rows in set (0.01 sec)

0\64/UHSRUWVWKDWWKHUHDUHIRXUWDEOHVZKLFKPDSH[DFWO\WRWKHIRXUHQWLWLHVLQ
)LJXUH7KHSHOWVWDWHPHQWLVGLVFXVVHGLQPRUHGHWDLOODWHULQ([SORULQJ'DWDEDVHV
DQG7DEOHVZLWK6+2:DQGP\VTOVKRZ
6RIDUWKHUHKDYHEHHQQRVXUSULVHV/HWVILQGRXWPRUHDERXWHDFKRIWKHWDEOHVWKDW
PDNHXSWKHmusicGDWDEDVH)LUVWOHWVXVHWKHSHOW COLUMNSVWDWHPHQWWRH[SORUHWKH
artistWDEOH
mysql> SHOW COLUMNS FROM artist;
+-------------+-------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| artist_id
| smallint(5) | NO | PRI | 0
|
|
| artist_name | char(128)
| NO |
|
|
|
+-------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

7KHDESCRIBENH\ZRUGLVLGHQWLFDOWRSHOW COLUMNS FROMDQGFDQEHDEEUHYLDWHGWRMXVW


DESCVRZHFDQZULWHWKHSUHYLRXVTXHU\DVIROORZV

Using the Music Database | 137

mysql> DESC artist;


+-------------+-------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| artist_id
| smallint(5) | NO | PRI | 0
|
|
| artist_name | char(128)
| NO |
|
|
|
+-------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

/HWVH[DPLQHWKHWDEOHVWUXFWXUHPRUHFORVHO\$V\RXGH[SHFWIURPWKH(5PRGHOLQ
)LJXUHWKH artistWDEOHFRQWDLQVWZRFROXPQV artist_idDQG artist_name7KH
RWKHULQIRUPDWLRQLQWKHRXWSXWVKRZVWKHW\SHVRIWKHFROXPQVDQLQWHJHURIOHQJWK
IRUartist_idDQGDFKDUDFWHUVWULQJRIOHQJWKIRUartist_nameDQGZKHWKHUWKH
FROXPQLVDOORZHGWREHNULL HPSW\ ZKHWKHULWVSDUWRIDNH\DQGWKHGHIDXOWYDOXH
IRULW<RXOOQRWLFHWKDWWKHartist_idKDVPRILQWKHKeyFROXPQPHDQLQJLWVSDUWRI
WKHSULPDU\NH\IRUWKHWDEOH'RQWZRUU\DERXWWKHGHWDLOVDOOWKDWVLPSRUWDQWULJKW
QRZLVWKHFROXPQQDPHVartist_idDQGartist_name
:HOOQRZH[SORUHWKHRWKHUWKUHHWDEOHV+HUHDUHWKH SHOW COLUMNSVWDWHPHQWV\RX
QHHGWRW\SH
mysql> SHOW COLUMNS FROM album;
+------------+-----------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+------------+-----------+------+-----+---------+-------+
| artist_id | int(5)
|
| PRI | 0
|
|
| album_id
| int(4)
|
| PRI | 0
|
|
| album_name | char(128) | YES |
| NULL
|
|
+------------+-----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> SHOW COLUMNS FROM track;
+------------+--------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| track_id
| int(3)
|
| PRI | 0
|
|
| track_name | char(128)
| YES |
| NULL
|
|
| artist_id | int(5)
|
| PRI | 0
|
|
| album_id
| int(4)
|
| PRI | 0
|
|
| time
| decimal(5,2) | YES |
| NULL
|
|
+------------+--------------+------+-----+---------+-------+
5 rows in set (0.02 sec)
mysql> SHOW COLUMNS FROM played;
+-----------+-----------+------+-----+-------------------+-------+
| Field
| Type
| Null | Key | Default
| Extra |
+-----------+-----------+------+-----+-------------------+-------+
| artist_id | int(5)
|
| PRI | 0
|
|
| album_id | int(4)
|
| PRI | 0
|
|
| track_id | int(3)
|
| PRI | 0
|
|
| played
| timestamp | YES | PRI | CURRENT_TIMESTAMP |
|
+-----------+-----------+------+-----+-------------------+-------+
4 rows in set (0.00 sec)

138 | Chapter 5:Basic SQL

$JDLQZKDWVLPSRUWDQWLVJHWWLQJIDPLOLDUZLWKWKHFROXPQVLQHDFKWDEOHDVZHOOPDNH
XVHRIWKHVHIUHTXHQWO\ODWHUZKHQZHUHOHDUQLQJDERXWTXHU\LQJ1RWLFHDOVRWKDWEH
FDXVHDOORIWKHVHWKUHHHQWLWLHVDUHZHDNHDFKWDEOHFRQWDLQVWKHSULPDU\NH\FROXPQV
IURP WKH WDEOH LWV UHODWHG WR )RU H[DPSOH WKH track WDEOH FRQWDLQV artist_id
album_idDQG track_idEHFDXVHWKHFRPELQDWLRQRIDOOWKUHHLVUHTXLUHGWRXQLTXHO\
LGHQWLI\DWUDFN
,QWKHQH[WVHFWLRQZHVKRZ\RXKRZWRH[SORUHWKHGDWDWKDWVVWRUHGLQWKH music
GDWDEDVHDQGLWVWDEOHV

The SELECT Statement and Basic Querying Techniques


8SWRWKLVSRLQW\RXYHOHDUQHGKRZWRLQVWDOODQGFRQILJXUH0\64/DQGKRZWRXVH
WKH0\64/PRQLWRU1RZWKDW\RXXQGHUVWDQGWKH musicGDWDEDVH\RXUHUHDG\WR
VWDUWH[SORULQJLWVGDWDDQGWROHDUQWKH64/ODQJXDJHWKDWVXVHGE\DOO0\64/FOLHQWV
,QWKLVVHFWLRQZHLQWURGXFHWKHPRVWFRPPRQO\XVHG64/NH\ZRUGDQGWKHRQO\RQH
WKDWUHDGVGDWDIURPDGDWDEDVHWKHSELECTNH\ZRUG:HDOVRH[SODLQVRPHEDVLFHOH
PHQWVRIVW\OHDQGV\QWD[DQGWKHIHDWXUHVRIWKHWHEREFODXVH%RROHDQRSHUDWRUVDQG
VRUWLQJ PXFK RI WKLV DOVR DSSOLHV WR RXU ODWHU GLVFXVVLRQV RI INSERT UPDATE DQG
DELETE)7KLVLVQWWKHHQGRIRXUGLVFXVVLRQRISELECT\RXOOILQGPRUHLQ&KDSWHU
ZKHUHZHVKRZ\RXKRZWRXVHLWVDGYDQFHGIHDWXUHV

Single Table SELECTs


7KHPRVWEDVLFIRUPRI SELECTUHDGVWKHGDWDLQDOOURZVDQGFROXPQVIURPDWDEOH
6WDUWWKHPRQLWRUDQGFKRRVHWKHmusicGDWDEDVH
mysql> use music;
Database changed

/HWVUHWULHYHDOORIWKHGDWDLQWKHartistWDEOH
mysql> SELECT * FROM artist;
+-----------+---------------------------+
| artist_id | artist_name
|
+-----------+---------------------------+
|
1 | New Order
|
|
2 | Nick Cave & The Bad Seeds |
|
3 | Miles Davis
|
|
4 | The Rolling Stones
|
|
5 | The Stone Roses
|
|
6 | Kylie Minogue
|
+-----------+---------------------------+
6 rows in set (0.08 sec)

7KH RXWSXW KDV VL[ URZV DQG HDFK URZ FRQWDLQV WKH YDOXHV IRU WKH artist_id DQG
artist_nameFROXPQV:HQRZNQRZWKDWWKHUHDUHVL[DUWLVWVLQRXUGDWDEDVHDQGFDQ
VHHWKHQDPHVDQGLGHQWLILHUVIRUWKHVHDUWLVWV

The SELECT Statement and Basic Querying Techniques | 139

$VLPSOHSELECTVWDWHPHQWKDVIRXUFRPSRQHQWV
 7KHNH\ZRUGSELECT
 7KHFROXPQVWREHGLVSOD\HG,QRXUILUVWH[DPSOHZHDVNHGIRUDOOFROXPQVE\
XVLQJWKHDVWHULVN * V\PERODVDZLOGFDUGFKDUDFWHU
 7KHNH\ZRUGFROM
 7KHWDEOHQDPHLQWKLVH[DPSOHWKHWDEOHQDPHLVartist
3XWWLQJDOOWKLVWRJHWKHUZHYHDVNHGIRUDOOFROXPQVIURPWKHartistWDEOHDQGWKDWV
ZKDW0\64/KDVUHWXUQHGWRXV
/HWVWU\DQRWKHUVLPSOH SELECT7KLVWLPHZHOOUHWULHYHDOOFROXPQVIURPWKH album
WDEOH
mysql> SELECT * FROM album;
+-----------+----------+------------------------------------------+
| artist_id | album_id | album_name
|
+-----------+----------+------------------------------------------+
|
2 |
1 | Let Love In
|
|
1 |
1 | Retro - John McCready FAN
|
|
1 |
2 | Substance (Disc 2)
|
|
1 |
3 | Retro - Miranda Sawyer POP
|
|
1 |
4 | Retro - New Order / Bobby Gillespie LIVE |
|
3 |
1 | Live Around The World
|
|
3 |
2 | In A Silent Way
|
|
1 |
5 | Power, Corruption & Lies
|
|
4 |
1 | Exile On Main Street
|
|
1 |
6 | Substance 1987 (Disc 1)
|
|
5 |
1 | Second Coming
|
|
6 |
1 | Light Years
|
|
1 |
7 | Brotherhood
|
+-----------+----------+------------------------------------------+
13 rows in set (0.03 sec)

:HKDYHDOEXPVLQRXUGDWDEDVHDQGWKHRXWSXWKDVWKHVDPHEDVLFVWUXFWXUHDVRXU
ILUVWH[DPSOH
7KHVHFRQGH[DPSOHJLYHV\RXDQLQVLJKWLQWRKRZWKHUHODWLRQVKLSVEHWZHHQWKHWDEOHV
ZRUN&RQVLGHUWKHILUVWURZRIWKHUHVXOWVIRUWKHDOEXP/HW/RYH,QZKLFKLVE\
WKHDUWLVWZLWKWKHartist_idYDOXHRI,I\RXLQVSHFWWKHRXWSXWRIRXUILUVWH[DPSOH
WKDWUHWULHYHGGDWDIURPWKHartistWDEOH\RXOOQRWHWKDWWKHPDWFKLQJDUWLVWLV1LFN
&DYH 7KH%DG6HHGV6R1LFN&DYHUHFRUGHG/HW/RYH,Q<RXOODOVRQRWLFHWKDW
WKHDOEXPVZHRZQIRUDJLYHQDUWLVWHDFKKDYHDQXPEHULQWKHalbum_idFROXPQ<RX
FDQVHHIRUH[DPSOHWKDWZHRZQVHYHQDOEXPVE\WKHDUWLVWZLWKDQ artist_idRI
:HOOGLVFXVVKRZWRZULWHTXHULHVRQUHODWLRQVKLSVEHWZHHQWDEOHVODWHULQWKLVFKDSWHU
LQ-RLQLQJ7ZR7DEOHV
1RWLFHDOVRWKDWZHKDYHVHYHUDOGLIIHUHQWDOEXPVZLWKWKHVDPHalbum_id7KLVLVQWD
SUREOHP VLQFH album_id LV RQO\DZHDNNH\DQDOEXPLVXQLTXHO\LGHQWLILHGE\WKH

140 | Chapter 5:Basic SQL

FRPELQDWLRQ RI LWV album_id DQG WKH SULPDU\ NH\ RI LWV RZQLQJ HQWLW\ ZKLFK LV
artist_id
<RX VKRXOG QRZ IHHO FRPIRUWDEOH DERXW FKRRVLQJ D GDWDEDVH OLVWLQJ LWV WDEOHV DQG
UHWULHYLQJDOORIWKHGDWDIURPDWDEOHXVLQJWKHSELECTVWDWHPHQW7RSUDFWLFH\RXPLJKW
ZDQWWRH[SHULPHQWZLWKWKHuniversityRUflightGDWDEDVHV\RXORDGHGLQ&KDSWHU
LQ/RDGLQJWKH6DPSOH'DWDEDVHV5HPHPEHUWKDW\RXFDQXVHWKHSHOW TABLESVWDWH
PHQWWRILQGRXWWKHWDEOHQDPHVLQWKHVHGDWDEDVHV

Choosing Columns
<RXYHVRIDUXVHGWKH *ZLOGFDUGFKDUDFWHUWRUHWULHYHDOOFROXPQVLQDWDEOH,I\RX
GRQWZDQWWRGLVSOD\DOOWKHFROXPQVLWVHDV\WREHPRUHVSHFLILFE\OLVWLQJWKHFROXPQV
\RXZDQWLQWKHRUGHU\RXZDQWWKHPVHSDUDWHGE\FRPPDV)RUH[DPSOHLI\RXZDQW
RQO\WKHartist_nameFROXPQIURPWKHartistWDEOH\RXGW\SH
mysql> SELECT artist_name FROM artist;
+---------------------------+
| artist_name
|
+---------------------------+
| New Order
|
| Nick Cave & The Bad Seeds |
| Miles Davis
|
| The Rolling Stones
|
| The Stone Roses
|
| Kylie Minogue
|
+---------------------------+
6 rows in set (0.01 sec)

,I\RXZDQWERWKWKHartist_nameDQGWKHartist_idLQWKDWRUGHU\RXGXVH
mysql> SELECT artist_name,artist_id FROM artist;
+---------------------------+-----------+
| artist_name
| artist_id |
+---------------------------+-----------+
| New Order
|
1 |
| Nick Cave & The Bad Seeds |
2 |
| Miles Davis
|
3 |
| The Rolling Stones
|
4 |
| The Stone Roses
|
5 |
| Kylie Minogue
|
6 |
+---------------------------+-----------+
6 rows in set (0.00 sec)

<RXFDQHYHQOLVWFROXPQVPRUHWKDQRQFH
mysql> SELECT artist_id, artist_id FROM artist;
+-----------+-----------+
| artist_id | artist_id |
+-----------+-----------+
|
1 |
1 |
|
2 |
2 |
|
3 |
3 |

The SELECT Statement and Basic Querying Techniques | 141

|
4 |
4 |
|
5 |
5 |
|
6 |
6 |
+-----------+-----------+
6 rows in set (0.06 sec)

(YHQWKRXJKWKLVDSSHDUVSRLQWOHVVLWFDQEHXVHIXOZKHQFRPELQHGZLWKDOLDVHVLQ
PRUHDGYDQFHGTXHULHVDVZHVKRZLQ&KDSWHU
<RXFDQVSHFLI\GDWDEDVHVWDEOHVDQGFROXPQQDPHVLQDSELECTVWDWHPHQW7KLVDOORZV
\RXWRDYRLGWKH USEFRPPDQGDQGZRUNZLWKDQ\GDWDEDVHDQGWDEOHGLUHFWO\ZLWK
SELECTLWDOVRKHOSVUHVROYHDPELJXLWLHVDVZHVKRZODWHULQ-RLQLQJ7ZR7DEOHV
&RQVLGHUDQH[DPSOHVXSSRVH\RXZDQWWRUHWULHYHWKH album_nameFROXPQIURPWKH
albumWDEOHLQWKHmusicGDWDEDVH<RXFDQGRWKLVZLWKWKHIROORZLQJFRPPDQG
mysql> SELECT album_name FROM music.album;
+------------------------------------------+
| album_name
|
+------------------------------------------+
| Let Love In
|
| Retro - John McCready FAN
|
| Substance (Disc 2)
|
| Retro - Miranda Sawyer POP
|
| Retro - New Order / Bobby Gillespie LIVE |
| Live Around The World
|
| In A Silent Way
|
| Power, Corruption & Lies
|
| Exile On Main Street
|
| Substance 1987 (Disc 1)
|
| Second Coming
|
| Light Years
|
| Brotherhood
|
+------------------------------------------+
13 rows in set (0.01 sec)

7KH music.albumFRPSRQHQWDIWHUWKH FROMNH\ZRUGVSHFLILHVWKH musicGDWDEDVHDQG


LWValbumWDEOH7KHUHVQRQHHGWRHQWHUUSE musicEHIRUHUXQQLQJWKLVTXHU\7KLVV\QWD[
FDQDOVREHXVHGZLWKRWKHU64/VWDWHPHQWVLQFOXGLQJWKHUPDATEDELETEINSERTDQG
SHOWVWDWHPHQWVZHGLVFXVVODWHULQWKLVFKDSWHU

Choosing Rows with the WHERE Clause


7KLVVHFWLRQLQWURGXFHVWKHWHEREFODXVHDQGH[SODLQVKRZWRXVHWKH%RROHDQRSHUDWRUV
WRZULWHH[SUHVVLRQV<RXOOVHHWKHVHLQPRVW SELECTVWDWHPHQWVDQGRIWHQLQRWKHU
VWDWHPHQWVVXFKDVUPDATEDQGDELETEZHOOVKRZ\RXH[DPSOHVODWHULQWKLVFKDSWHU

WHERE basics
7KHWHEREFODXVHLVDSRZHUIXOWRROWKDWDOORZV\RXWRFKRRVHZKLFKURZVDUHUHWXUQHG
IURPD SELECTVWDWHPHQW<RXXVHLWWRUHWXUQURZVWKDWPDWFKDFRQGLWLRQVXFKDV
KDYLQJDFROXPQYDOXHWKDWH[DFWO\PDWFKHVDVWULQJDQXPEHUJUHDWHURUOHVVWKDQD

142 | Chapter 5:Basic SQL

YDOXHRUDVWULQJWKDWLVDSUHIL[RIDQRWKHU$OPRVWDOORXUH[DPSOHVLQWKLVDQGODWHU
FKDSWHUVFRQWDLQWHEREFODXVHVDQG\RXOOEHFRPHYHU\IDPLOLDUZLWKWKHP
7KHVLPSOHVW WHEREFODXVHLVRQHWKDWH[DFWO\PDWFKHVDYDOXH&RQVLGHUDQH[DPSOH
ZKHUHZHZDQWWRILQGRXWWKHGHWDLOVRIWKHDUWLVWZLWKWKHQDPH1HZ2UGHU+HUHV
ZKDW\RXW\SH
mysql> SELECT * FROM artist WHERE artist_name = "New Order";
+-----------+-------------+
| artist_id | artist_name |
+-----------+-------------+
|
1 | New Order
|
+-----------+-------------+
1 row in set (0.00 sec)

0\64/UHWXUQVDOOURZVWKDWPDWFKRXUVHDUFKFULWHULDLQWKLVFDVHMXVWWKHRQHURZ
DQG DOO LWV FROXPQV )URP WKLV \RX FDQ VHH WKDW WKH DUWLVW 1HZ 2UGHU KDV DQ
artist_idRI
/HWVWU\DQRWKHUH[DFWPDWFKH[DPSOH6XSSRVH\RXZDQWWRILQGRXWWKHQDPHRIWKH
DUWLVWZLWKDQartist_idYDOXHRI<RXW\SH
mysql> SELECT artist_name FROM artist WHERE artist_id = 4;
+--------------------+
| artist_name
|
+--------------------+
| The Rolling Stones |
+--------------------+
1 row in set (0.00 sec)

,QWKLVH[DPSOHZHYHFKRVHQERWKDFROXPQDQGDURZZHYHLQFOXGHGWKHFROXPQ
QDPHartist_nameDIWHUWKHSELECTNH\ZRUGDVZHOODVWHERE artist_id = 4
,IDYDOXHPDWFKHVPRUHWKDQRQHURZWKHUHVXOWVZLOOFRQWDLQDOOPDWFKHV6XSSRVHZH
DVNIRUWKHQDPHVRIDOOWUDFNVZLWKDtrack_idRIWKLVUHWULHYHVWKHWKLUWHHQWKVRQJ
RQHYHU\DOEXPWKDWKDVDWOHDVWWKDWPDQ\VRQJV<RXW\SHLQ
mysql> SELECT track_name FROM track WHERE track_id = 13;
+------------------------------------------+
| track_name
|
+------------------------------------------+
| Every Little Counts
|
| Everyone Everywhere
|
| Turn My Way [Olympia, Liverpool 18/7/01] |
| Let It Loose
|
+------------------------------------------+
4 rows in set (0.02 sec)

7KHUHVXOWVVKRZWKHQDPHVRIWKHWKLUWHHQWKWUDFNRIGLIIHUHQWDOEXPVVRWKHUHPXVW
EHDOEXPVWKDWFRQWDLQDWOHDVWWUDFNV,IZHFRXOGMRLQWKHLQIRUPDWLRQZHJHWIURP
WKH track WDEOH ZLWK LQIRUPDWLRQZHJHWIURPWKH albumWDEOHZHFRXOGGLVSOD\WKH
QDPHVRIWKHVHDOEXPV:HOOVHHKRZWRSHUIRUPWKLVW\SHRITXHU\ODWHULQ-RLQLQJ
7ZR7DEOHV

The SELECT Statement and Basic Querying Techniques | 143

1RZOHWVWU\UHWULHYLQJYDOXHVLQDUDQJH7KLVLVVLPSOHVWIRUQXPHULFUDQJHVVROHWV
VWDUWE\ILQGLQJWKHQDPHVRIDOODUWLVWVZLWKDQartist_idOHVVWKDQ7RGRWKLVW\SH
mysql> SELECT artist_name FROM artist WHERE artist_id < 5;
+---------------------------+
| artist_name
|
+---------------------------+
| New Order
|
| Nick Cave & The Bad Seeds |
| Miles Davis
|
| The Rolling Stones
|
+---------------------------+
4 rows in set (0.06 sec)

)RUQXPEHUVWKHIUHTXHQWO\XVHGRSHUDWRUVDUHHTXDOV = JUHDWHUWKDQ > OHVVWKDQ


< OHVVWKDQRUHTXDO <= JUHDWHUWKDQRUHTXDO >= DQGQRWHTXDO <>RU!= 
&RQVLGHU RQH PRUH H[DPSOH ,I \RX ZDQW WR ILQG DOO DOEXPV WKDW GRQW KDYH DQ
album_idRI\RXGW\SH
mysql> SELECT album_name FROM album WHERE album_id <> 2;
+------------------------------------------+
| album_name
|
+------------------------------------------+
| Let Love In
|
| Retro - John McCready FAN
|
| Retro - Miranda Sawyer POP
|
| Retro - New Order / Bobby Gillespie LIVE |
| Live Around The World
|
| Power, Corruption & Lies
|
| Exile On Main Street
|
| Substance 1987 (Disc 1)
|
| Second Coming
|
| Light Years
|
| Brotherhood
|
+------------------------------------------+
11 rows in set (0.01 sec)

7KLVVKRZVXVWKHILUVWWKLUGDQGDOOVXEVHTXHQWDOEXPVIRUDOODUWLVWV1RWHWKDW\RX
FDQXVHHLWKHU<>RU!=IRUQRWHTXDO
<RXFDQXVHWKHVDPHRSHUDWRUVIRUVWULQJV)RUH[DPSOHLI\RXZDQWWROLVWDOODUWLVWV
ZKRVHQDPHDSSHDUVHDUOLHUDOSKDEHWLFDOO\WKDQ LVOHVVWKDQ 'M'XVH
mysql> SELECT artist_name FROM artist WHERE artist_name < 'M';
+---------------+
| artist_name
|
+---------------+
| Kylie Minogue |
+---------------+
1 row in set (0.00 sec)

6LQFHKylie MinogueEHJLQVZLWKDOHWWHUDOSKDEHWLFDOO\OHVVWKDQ'M'VKHVUHSRUWHGDV
DQDQVZHUWKHQDPHVRIRXUVL[RWKHUDUWLVWVDOOFRPHODWHULQWKHDOSKDEHW1RWHWKDW
E\GHIDXOW0\64/GRHVQWFDUHDERXWFDVHZHOOGLVFXVVWKLVLQPRUHGHWDLOODWHULQ

144 | Chapter 5:Basic SQL

25'(5%<&ODXVHV2IFRXUVHZHKDYHQWVWRUHGWKHVXUQDPHDQGWKHJLYHQQDPHV
VHSDUDWHO\DQG0\64/LVQWVPDUWHQRXJKWRNQRZWKDW Kylie MinogueLVDSHUVRQV
QDPHWKDWVKRXOGRUGLQDULO\EHVRUWHGE\VXUQDPH LQSKRQHERRNRUGHU 
$QRWKHUYHU\FRPPRQWDVN\RXOOZDQWWRSHUIRUPZLWKVWULQJVLVWRILQGPDWFKHVWKDW
EHJLQZLWKDSUHIL[FRQWDLQDVWULQJRUHQGLQDVXIIL[)RUH[DPSOH\RXPLJKWZDQW
WRILQGDOODOEXPQDPHVEHJLQQLQJZLWKWKHZRUG5HWUR<RXFDQGRWKLVZLWKWKH
LIKERSHUDWRULQDWHEREFODXVH
mysql> SELECT album_name FROM album WHERE album_name LIKE "Retro%";
+------------------------------------------+
| album_name
|
+------------------------------------------+
| Retro - John McCready FAN
|
| Retro - Miranda Sawyer POP
|
| Retro - New Order / Bobby Gillespie LIVE |
+------------------------------------------+
3 rows in set (0.00 sec)

/HWVGLVFXVVLQGHWDLOKRZWKLVZRUNV
7KHLIKEFODXVHLVXVHGRQO\ZLWKVWULQJVDQGPHDQVWKDWDPDWFKPXVWPHHWWKHSDWWHUQ
LQWKHVWULQJWKDWIROORZV,QRXUH[DPSOHZHYHXVHGLIKE "Retro%"ZKLFKPHDQVWKH
VWULQJRetroIROORZHGE\]HURRUPRUHFKDUDFWHUV0RVWVWULQJVXVHGZLWKLIKEFRQWDLQ
WKHSHUFHQWDJHFKDUDFWHU % DVDZLOGFDUGFKDUDFWHUWKDWPDWFKHVDOOSRVVLEOHVWULQJV
<RXFDQDOVRXVHLWWRGHILQHDVWULQJWKDWHQGVLQDVXIIL[VXFKDV"%ing"RUDVWULQJ
WKDWFRQWDLQVDSDUWLFXODUVXEVWULQJVXFKDV%Corruption%
)RU H[DPSOH "John%" ZRXOG PDWFK DOO VWULQJV VWDUWLQJ ZLWK "John" VXFK DV John
SmithDQGJohn Paul Getty7KHSDWWHUQ"%Paul"PDWFKHVDOOVWULQJVWKDWKDYH"Paul"DW
WKH HQG )LQDOO\ WKH SDWWHUQ "%Paul%" PDWFKHV DOO VWULQJV WKDW KDYH "Paul" LQ WKHP
LQFOXGLQJDWWKHVWDUWRUDWWKHHQG
,I \RX ZDQW WR PDWFK H[DFWO\ RQH ZLOGFDUG FKDUDFWHU LQ D LIKE FODXVH \RX XVH WKH
XQGHUVFRUHFKDUDFWHU _ )RUH[DPSOHLI\RXZDQWDOOWUDFNVWKDWEHJLQZLWKDWKUHH
OHWWHUZRUGWKDWVWDUWVZLWK'R'\RXXVH
mysql> SELECT * FROM track WHERE track_name LIKE "R__ %";
+----------+----------------+-----------+----------+----------+
| track_id | track_name
| artist_id | album_id | time
|
+----------+----------------+-----------+----------+----------+
|
4 | Red Right Hand |
2 |
1 | 00:06:11 |
|
14 | Run Wild
|
1 |
1 | 00:03:57 |
|
1 | Rip This Joint |
4 |
1 | 00:02:23 |
+----------+----------------+-----------+----------+----------+
3 rows in set (0.00 sec)

7KHVSHFLILFDWLRQ"R__ %"PHDQVDWKUHHOHWWHUZRUGEHJLQQLQJZLWK'R'IRUH[DPSOH
"Red""Run"DQG"Rip"IROORZHGE\DVSDFHFKDUDFWHUDQGWKHQDQ\VWULQJ

The SELECT Statement and Basic Querying Techniques | 145

Combining conditions with AND, OR, NOT, and XOR


6RIDUZHYHXVHGWKHWHEREFODXVHWRWHVWRQHFRQGLWLRQUHWXUQLQJDOOURZVWKDWPHHW
LW<RXFDQFRPELQHWZRRUPRUHFRQGLWLRQVXVLQJWKH%RROHDQRSHUDWRUVANDORNOT
DQGXOR
/HWVVWDUWZLWKDQH[DPSOH6XSSRVH\RXZDQWWRILQGDOODOEXPVZLWKDWLWOHWKDWEHJLQV
ZLWKDFKDUDFWHUJUHDWHUWKDQ CEXWOHVVWKDQ M7KLVLVVWUDLJKWIRUZDUGZLWKWKH AND
RSHUDWRU
mysql> SELECT album_name FROM album WHERE
-> album_name > "C" AND album_name < "M";
+-----------------------+
| album_name
|
+-----------------------+
| Let Love In
|
| Live Around The World |
| In A Silent Way
|
| Exile On Main Street |
| Light Years
|
+-----------------------+
5 rows in set (0.06 sec)

7KHANDRSHUDWLRQLQWKHWHEREFODXVHUHVWULFWVWKHUHVXOWVWRWKRVHURZVWKDWPHHWERWK
FRQGLWLRQV
7KH ORRSHUDWRULVXVHGWRILQGURZVWKDWPHHWDWOHDVWRQHRIVHYHUDOFRQGLWLRQV7R
LOOXVWUDWHLPDJLQH\RXZDQWDOLVWRIDOODOEXPVWKDWKDYHDWLWOHEHJLQQLQJZLWKLSRU
P<RXFDQGRWKLVZLWKWZRORDQGWKUHHLIKEFODXVHV
mysql> SELECT album_name FROM album WHERE
-> album_name LIKE "L%" OR
-> album_name LIKE "S%" OR
-> album_name LIKE "P%";
+--------------------------+
| album_name
|
+--------------------------+
| Let Love In
|
| Substance (Disc 2)
|
| Live Around The World
|
| Power, Corruption & Lies |
| Substance 1987 (Disc 1) |
| Second Coming
|
| Light Years
|
+--------------------------+
7 rows in set (0.00 sec)

7KHORRSHUDWLRQVLQWKHWHEREFODXVHUHVWULFWWKHDQVZHUVWRWKRVHWKDWPHHWDQ\RIWKH
WKUHHFRQGLWLRQV$VDQDVLGHLWVSDUWLFXODUO\REYLRXVLQWKLVH[DPSOHWKDWWKHUHVXOWV
DUHUHSRUWHGZLWKRXWVRUWLQJLQWKLVFDVHWKH\UHUHSRUWHGLQWKHRUGHUWKH\ZHUHDGGHG
WRWKHGDWDEDVH:HOOUHWXUQWRVRUWLQJRXWSXWODWHULQ25'(5%<&ODXVHV

146 | Chapter 5:Basic SQL

<RXFDQFRPELQHANDDQGOREXW\RXQHHGWRPDNHLWFOHDUZKHWKHU\RXZDQWWRILUVW
ANDWKHFRQGLWLRQVRUORWKHP&RQVLGHUDQH[DPSOHZKHUHWKHIXQFWLRQLVQWREYLRXV
IURPWKHTXHU\
mysql> SELECT album_name FROM album WHERE
-> album_name LIKE "L%" OR
-> album_name LIKE "S%" AND
-> album_name LIKE "%g";
+-----------------------+
| album_name
|
+-----------------------+
| Let Love In
|
| Live Around The World |
| Second Coming
|
| Light Years
|
+-----------------------+
4 rows in set (0.00 sec)

:KHQ\RXLQVSHFWWKHUHVXOWVLWEHFRPHVFOHDUZKDWVKDSSHQHGWKHDQVZHUVHLWKHU
EHJLQZLWKLRUWKH\KDYHSDWWKHEHJLQQLQJDQGgDWWKHHQG$QDOWHUQDWLYHLQWHUSUH
WDWLRQRIWKHTXHU\ZRXOGEHWKDWWKHDQVZHUVPXVWEHJLQZLWKLRUSDQGDOOHQGZLWK
gWKLVLVFOHDUO\QRWKRZWKH0\64/VHUYHUKDVKDQGOHGWKHTXHU\VLQFHRQHRIWKH
GLVSOD\HGDQVZHUV/HW/RYH,QGRHVQWHQGLQDg7RPDNHTXHULHVFRQWDLQLQJVHYHUDO
%RROHDQFRQGLWLRQVHDVLHUWRUHDGJURXSFRQGLWLRQVZLWKLQSDUHQWKHVHV
3DUHQWKHVHVFOXVWHUSDUWVRIDVWDWHPHQWWRJHWKHUDQGKHOSPDNHH[SUHVVLRQVUHDGDEOH
\RXFDQXVHWKHPMXVWDV\RXZRXOGLQEDVLFPDWK2XUSUHYLRXVH[DPSOHFDQEHUH
ZULWWHQDVIROORZV
mysql> SELECT album_name FROM album WHERE
-> album_name LIKE "L%" OR
-> (album_name LIKE "S%" AND album_name LIKE "%g");
+-----------------------+
| album_name
|
+-----------------------+
| Let Love In
|
| Live Around The World |
| Second Coming
|
| Light Years
|
+-----------------------+
4 rows in set (0.00 sec)

7KH SDUHQWKHVHV PDNH WKH HYDOXDWLRQ RUGHU FOHDU ZH ZDQW DOEXPV EHJLQQLQJ ZLWK
'L'RUWKRVHEHJLQQLQJZLWK'S'DQGHQGLQJZLWK'g':HYHDOVRW\SHGWKHTXHU\RYHU
WKUHHOLQHVLQVWHDGRIIRXUPDNLQJWKHLQWHQWLRQHYHQFOHDUHUWKURXJKFDUHIXOOD\RXW
MXVWDVZKHQZULWLQJSURJUDPFRGHVSDFLQJLQGHQWDWLRQDQGFDUHIXOOD\RXWKHOSPDNH
UHDGDEOHTXHULHV
<RX FDQ DOVR XVH SDUHQWKHVHV WR IRUFH D GLIIHUHQW HYDOXDWLRQ RUGHU ,I \RX GLG ZDQW
DOEXPVKDYLQJQDPHVZLWK'L'RU'S'DWWKHEHJLQQLQJDQG'g'DWWKHHQG\RXGW\SH
mysql> SELECT album_name FROM album WHERE
-> (album_name LIKE "L%" OR album_name LIKE "S%") AND

The SELECT Statement and Basic Querying Techniques | 147

-> album_name LIKE "%g";


+---------------+
| album_name
|
+---------------+
| Second Coming |
+---------------+
1 row in set (0.00 sec)

%RWKH[DPSOHVZLWKSDUHQWKHVHVDUHPXFKHDVLHUWRXQGHUVWDQG:HUHFRPPHQGWKDW
\RXXVHSDUHQWKHVHVZKHQHYHUWKHUHVDFKDQFHWKHLQWHQWLRQFRXOGEHPLVLQWHUSUHWHG
WKHUHVQRJRRGUHDVRQWRUHO\RQ0\64/VLPSOLFLWHYDOXDWLRQRUGHU
7KHXQDU\ NOTRSHUDWRUQHJDWHVD%RROHDQVWDWHPHQW6XSSRVH\RXZDQWDOLVWRIDOO
DOEXPVH[FHSWWKHRQHVKDYLQJDQalbum_idRIRU<RXGZULWHWKHTXHU\
mysql> SELECT * FROM album WHERE NOT (album_id = 1 OR album_id = 3);
+-----------+----------+------------------------------------------+
| artist_id | album_id | album_name
|
+-----------+----------+------------------------------------------+
|
1 |
2 | Substance (Disc 2)
|
|
1 |
4 | Retro - New Order / Bobby Gillespie LIVE |
|
3 |
2 | In A Silent Way
|
|
1 |
5 | Power, Corruption & Lies
|
|
1 |
6 | Substance 1987 (Disc 1)
|
|
1 |
7 | Brotherhood
|
+-----------+----------+------------------------------------------+
6 rows in set (0.00 sec)

7KHH[SUHVVLRQLQWKHSDUHQWKHVHVVD\VZHZDQW
(album_id = 1 OR album_id = 3)

DQGWKHNOTRSHUDWLRQQHJDWHVLWVRZHJHWHYHU\WKLQJEXWWKRVHWKDWPHHWWKHFRQGLWLRQ
LQWKHSDUHQWKHVHV7KHUHDUHVHYHUDORWKHUZD\V\RXFDQZULWHDWHEREFODXVHZLWKWKH
VDPHIXQFWLRQDQGLWUHDOO\GRHVQWPDWWHUZKLFK\RXFKRRVH)RUH[DPSOHWKHIROORZ
LQJWKUHHH[SUHVVLRQVKDYHWKHVDPHHIIHFW
WHERE NOT (album_id = 1) AND NOT (album_id = 3)
WHERE album_id != 1 AND album_id != 3
WHERE album_id != 1 AND NOT (album_id = 3)

&RQVLGHUDQRWKHUH[DPSOHXVLQJ NOTDQGSDUHQWKHVHV6XSSRVH\RXZDQWWRJHWDOLVW
RIDOODOEXPVZLWKDQalbum_idJUHDWHUWKDQEXWQRWWKRVHQXPEHUHGRU
mysql> SELECT * FROM album WHERE album_id > 2
-> AND NOT (album_id = 4 OR album_id = 6);
+-----------+----------+----------------------------+
| artist_id | album_id | album_name
|
+-----------+----------+----------------------------+
|
1 |
3 | Retro - Miranda Sawyer POP |
|
1 |
5 | Power, Corruption & Lies |
|
1 |
7 | Brotherhood
|
+-----------+----------+----------------------------+
3 rows in set (0.01 sec)

148 | Chapter 5:Basic SQL

$JDLQWKHH[SUHVVLRQLQSDUHQWKHVHVOLVWVDOEXPVWKDWPHHWDFRQGLWLRQWKRVHWKDWDUH
QXPEHUHGRUDQGWKHNOTRSHUDWRUQHJDWHVLWVRWKDWZHJHWHYHU\WKLQJHOVH
7KH NOTRSHUDWRUVSUHFHGHQFHFDQEHDOLWWOHWULFN\)RUPDOO\LI\RXDSSO\LWWRDQ\
VWDWHPHQWWKDWHYDOXDWHVWRD%RROHDQ FALSERUDULWKPHWLF]HUR\RXOOJHW TRUE DQG
TRUELVGHILQHGDV ,I\RXDSSO\LWWRDVWDWHPHQWWKDWLVQRQ]HUR\RXOOJHWFALSE DQG
FALSELVGHILQHGDV :HYHVRIDUFRQVLGHUHGH[DPSOHVZLWKFODXVHVZKHUHWKHNOTLV
IROORZHGE\DH[SUHVVLRQLQSDUHQWKHVHVVXFKDV NOT (album_id = 4 OR album_id = 6)
<RXVKRXOGZULWH\RXUNOTH[SUHVVLRQVLQWKLVZD\RU\RXOOJHWXQH[SHFWHGUHVXOWV)RU
H[DPSOHWKHSUHYLRXVH[SUHVVLRQLVQWWKHVDPHDVWKLVRQH
mysql> SELECT * FROM album WHERE album_id > 2
-> AND (NOT album_id) = 4 OR album_id = 6;
+-----------+----------+-------------------------+
| artist_id | album_id | album_name
|
+-----------+----------+-------------------------+
|
1 |
6 | Substance 1987 (Disc 1) |
+-----------+----------+-------------------------+
1 row in set (0.00 sec)

7KLVUHWXUQVXQH[SHFWHGUHVXOWVMXVWWKRVHDOEXPVZLWKDQalbum_idRI7RXQGHUVWDQG
ZKDWKDSSHQHGWU\MXVWWKHSDUWRIWKHVWDWHPHQWZLWKWKHNOTRSHUDWRU
mysql> SELECT * FROM album WHERE (NOT album_id) = 4;
Empty set (0.00 sec)

:KDWKDVKDSSHQHGLVWKDW0\64/KDVHYDOXDWHGWKHH[SUHVVLRQ NOT album_idDQG


WKHQFKHFNHGLILWVHTXDOWR6LQFHWKH album_idLVDOZD\VQRQ]HUR NOT album_idLV
DOZD\V]HURDQGWKHUHIRUHQHYHUHTXDOWRDQG\RXJHWQRUHVXOWV1RZWU\WKLV
mysql> SELECT * FROM album WHERE (NOT album_id) != 4;
+-----------+----------+------------------------------------------+
| artist_id | album_id | album_name
|
+-----------+----------+------------------------------------------+
|
2 |
1 | Let Love In
|
|
1 |
1 | Retro - John McCready FAN
|
|
1 |
2 | Substance (Disc 2)
|
|
1 |
3 | Retro - Miranda Sawyer POP
|
|
1 |
4 | Retro - New Order / Bobby Gillespie LIVE |
|
3 |
1 | Live Around The World
|
|
3 |
2 | In A Silent Way
|
|
1 |
5 | Power, Corruption & Lies
|
|
4 |
1 | Exile On Main Street
|
|
1 |
6 | Substance 1987 (Disc 1)
|
|
5 |
1 | Second Coming
|
|
6 |
1 | Light Years
|
|
1 |
7 | Brotherhood
|
+-----------+----------+------------------------------------------+
13 rows in set (0.00 sec)

$JDLQalbum_idLVDOZD\VQRQ]HURDQGVRNOT album_idLV6LQFHLVQWHTXDOWRZH
VHHDOODOEXPVDVDQVZHUV6REHFDUHIXOWRXVHWKRVHSDUHQWKHVHVLI\RXGRQW NOTV

The SELECT Statement and Basic Querying Techniques | 149

KLJKSULRULW\ RUSUHFHGHQFH PHDQVLWLVDSSOLHGWRZKDWHYHULPPHGLDWHO\IROORZVLW


DQGQRWWRWKHZKROHH[SUHVVLRQ
<RXFDQFRPELQHWKHNOTRSHUDWRUZLWKLIKE6XSSRVH\RXZDQWDOODOEXPVWKDWGRQW
EHJLQZLWKDQL7RGRWKLVW\SH
mysql> SELECT album_name FROM album WHERE album_name NOT LIKE "L%";
+------------------------------------------+
| album_name
|
+------------------------------------------+
| Retro - John McCready FAN
|
| Substance (Disc 2)
|
| Retro - Miranda Sawyer POP
|
| Retro - New Order / Bobby Gillespie LIVE |
| In A Silent Way
|
| Power, Corruption & Lies
|
| Exile On Main Street
|
| Substance 1987 (Disc 1)
|
| Second Coming
|
| Brotherhood
|
+------------------------------------------+
10 rows in set (0.01 sec)

7KHUHVXOWLVDOODOEXPVH[FHSWWKRVHEHJLQQLQJZLWKL
<RXFDQFRPELQHNOT LIKEZLWKANDDQGOR6XSSRVH\RXZDQWDOEXPVEHJLQQLQJZLWK
SEXWQRWWKRVHHQGLQJZLWKDFORVLQJSDUHQWKHVLV')'<RXFDQGRWKLVZLWK
mysql> SELECT album_name FROM album WHERE
-> album_name LIKE "S%" AND album_name NOT LIKE "%)";
+---------------+
| album_name
|
+---------------+
| Second Coming |
+---------------+
1 row in set (0.00 sec)

0\64/DOVRVXSSRUWVWKHH[FOXVLYH25RSHUDWLRQWKURXJKWKHXORRSHUDWRU$QH[FOX
VLYH25HYDOXDWHVDVWUXHLIRQO\RQHEXWQRWERWKRIWKHH[SUHVVLRQVLVWUXH7REH
SUHFLVH a XOR bLVHTXLYDOHQWWR (a AND (NOT b)) OR ((NOT a) AND b))RUH[DPSOH
VXSSRVH\RXZDQWWRILQGDUWLVWVZKRVHQDPHVHQGLQHVRUVWDUWZLWK7KHEXWQRW
ERWK<RXGQHHGWRW\SH
mysql> SELECT artist_name FROM artist WHERE
-> artist_name LIKE "The%" XOR
-> artist_name LIKE "%es";
Empty set (0.00 sec)

7KHUHDUHQRPDWFKLQJHQWULHVLQWKHGDWDEDVHVLQFHERWK7KH6WRQH5RVHVDQG7KH
5ROOLQJ6WRQHVPHHWERWKFULWHULD
%HIRUHZHPRYHRQWRVRUWLQJZHOOGLVFXVVV\QWD[DOWHUQDWLYHV,I\RXUHIDPLOLDUZLWK
DSURJUDPPLQJODQJXDJHVXFKDV3+3&3HUORU-DYD\RXOOEHXVHGWRXVLQJ !IRU
NOT||IRUORDQG&&IRUAND0\64/DOVRVXSSRUWVWKHVHDQG\RXFDQXVHWKHPLQWHU

150 | Chapter 5:Basic SQL

FKDQJHDEO\ZLWKWKHZRUGEDVHGDOWHUQDWLYHVLI\RXZDQWWR+RZHYHUZHDOZD\VXVH
WKHZRUGEDVHGYHUVLRQVDVWKDWVZKDW\RXOOVHHXVHGLQPRVW64/VWDWHPHQWV

ORDER BY Clauses
:HYHVRIDUGLVFXVVHGKRZWRFKRRVHWKHFROXPQVDQGURZVWKDWDUHUHWXUQHGDVSDUW
RIWKHTXHU\UHVXOWEXWQRWKRZWRFRQWUROKRZWKHUHVXOWLVGLVSOD\HG,QDUHODWLRQDO
GDWDEDVHWKHURZVLQDWDEOHIRUPDVHWWKHUHLVQRLQWULQVLFRUGHUEHWZHHQWKHURZV
DQGVRZHKDYHWRDVN0\64/WRVRUWWKHUHVXOWVLIZHZDQWWKHPLQDSDUWLFXODURUGHU
,QWKLVVHFWLRQZHH[SODLQKRZWRXVHWKH ORDER BYFODXVHWRGRWKLV6RUWLQJKDVQR
HIIHFWRQZKDWLVUHWXUQHGDQGRQO\DIIHFWVZKDWRUGHUWKHUHVXOWVDUHUHWXUQHG
6XSSRVH\RXZDQWWRUHWXUQDOLVWRIWKHDUWLVWVLQWKHmusicGDWDEDVHVRUWHGLQDOSKD
EHWLFDORUGHUE\WKHartist_name+HUHVZKDW\RXGW\SH
mysql> SELECT * FROM artist ORDER BY artist_name;
+-----------+---------------------------+
| artist_id | artist_name
|
+-----------+---------------------------+
|
6 | Kylie Minogue
|
|
3 | Miles Davis
|
|
1 | New Order
|
|
2 | Nick Cave & The Bad Seeds |
|
4 | The Rolling Stones
|
|
5 | The Stone Roses
|
+-----------+---------------------------+
6 rows in set (0.03 sec)

7KH ORDER BY FODXVH LQGLFDWHV WKDW VRUWLQJ LV UHTXLUHG IROORZHG E\ WKH FROXPQ WKDW
VKRXOG EH XVHG DV WKH VRUW NH\ ,Q WKLV H[DPSOH ZHUH VRUWLQJ E\ DOSKDEHWLFDOO\DV
FHQGLQJ artist_name7KHGHIDXOWVRUWLVFDVHLQVHQVLWLYHDQGLQDVFHQGLQJRUGHUDQG
0\64/DXWRPDWLFDOO\VRUWVDOSKDEHWLFDOO\EHFDXVHWKHFROXPQVDUHFKDUDFWHUVWULQJV
7KHZD\VWULQJVDUHVRUWHGLVGHWHUPLQHGE\WKHFKDUDFWHUVHWDQGFROODWLRQRUGHUWKDW
DUHEHLQJXVHG:HGLVFXVVWKHVHLQ&ROODWLRQDQG&KDUDFWHU6HWV)RUPRVWRIWKLV
ERRNZHDVVXPHWKDW\RXUHXVLQJWKHGHIDXOWVHWWLQJV
&RQVLGHUDVHFRQGH[DPSOH7KLVWLPHOHWVVRUWWKHRXWSXWIURPWKH trackWDEOHE\
DVFHQGLQJWUDFNOHQJWKWKDWLVE\WKHtimeFROXPQ6LQFHLWVOLNHO\WKDWWZRRUPRUH
WUDFNVKDYHWKHVDPHOHQJWKZHOODGGDVHFRQGVRUWNH\WRUHVROYHFROOLVLRQVDQGGH
WHUPLQHKRZVXFKWLHVVKRXOGEHEURNHQ,QWKLVFDVHZKHQWKHWUDFNWLPHVDUHWKHVDPH
ZHOOVRUWWKHDQVZHUVDOSKDEHWLFDOO\E\track_name+HUHVZKDW\RXW\SH
mysql> SELECT time, track_name FROM track ORDER BY time, track_name;
+------+------------------------------------------------------------+
| time | track_name
|
+------+------------------------------------------------------------+
| 1.34 | Intermission By Alan Wise [Olympia, Paris 12/11/01]
|
| 1.81 | In A Silent Way
|
| 2.38 | Rip This Joint
|
| 2.78 | Jangling Jack
|
| 2.81 | Full Nelson
|

The SELECT Statement and Basic Querying Techniques | 151

| 2.90
| 2.97
| 2.99
| 3.00
| 3.08
| 3.20
| 3.26
| 3.40
| 3.40
| 3.42
| 3.44
...

|
|
|
|
|
|
|
|
|
|
|

I Just Want To See His Face


Sweet Black Angel
Your Star Will Shine
Shake Your Hips
Happy
Dreams Never End
Straight To The Man
Under The Influence Of Love
Ventilator Blues
Cries And Whispers
Mesh

|
|
|
|
|
|
|
|
|
|

:HYHVKRZQRQO\SDUWRIWKHURZRXWSXW1RWLFHWKDWWKHUHVDFROOLVLRQRIWUDFN
WLPHVZKHUHWKHOHQJWKLV,QWKLVFDVHWKHVHFRQGVRUWNH\track_nameLVXVHGWR
UHVROYHWKHFROOLVLRQVRWKDW8QGHUWKH,QIOXHQFHRI/RYHDSSHDUVEHIRUH9HQWLODWRU
%OXHV<RXOOILQG\RXRIWHQXVHPXOWLSOHFROXPQVLQDQORDER BYFODXVHZKHQ\RXUH
VRUWLQJSHRSOHVQDPHVZKHUHW\SLFDOO\\RXOOXVHVRPHWKLQJOLNH ORDER BY surname,
firstname, secondname
<RXFDQDOVRVRUWLQGHVFHQGLQJRUGHUDQG\RXFDQFRQWUROWKLVEHKDYLRUIRUHDFKVRUW
NH\6XSSRVH\RXZDQWWRVRUWWKHDUWLVWVE\GHVFHQGLQJDOSKDEHWLFDORUGHU<RXW\SH
WKLV
mysql> SELECT artist_name FROM artist ORDER BY artist_name DESC;
+---------------------------+
| artist_name
|
+---------------------------+
| The Stone Roses
|
| The Rolling Stones
|
| Nick Cave & The Bad Seeds |
| New Order
|
| Miles Davis
|
| Kylie Minogue
|
+---------------------------+
6 rows in set (0.00 sec)

7KHDESCNH\ZRUGVSHFLILHVWKDWWKHSUHFHGLQJVRUWNH\ LQWKLVFDVHartist_name VKRXOG


EHVRUWHGLQGHVFHQGLQJRUGHU<RXFDQXVHDPL[WXUHRIDVFHQGLQJDQGGHVFHQGLQJ
RUGHUV ZKHQ PXOWLSOH VRUW NH\V DUH XVHG )RU H[DPSOH \RX FDQ VRUW E\ GHVFHQGLQJ
timeDQGDOSKDEHWLFDOO\LQFUHDVLQJtrack_name
mysql> SELECT time, track_name FROM track
-> WHERE time < 3.6
-> ORDER BY time DESC, track_name ASC;
+------+------------------------------------------------------------+
| time | track_name
|
+------+------------------------------------------------------------+
| 3.57 | Casino Boogie
|
| 3.57 | Procession [Polytechnic of Central London, London 6/12/85] |
| 3.56 | Your Disco Needs You
|
| 3.55 | I'm So High
|
| 3.55 | On A Night Like This
|
| 3.54 | Mr. Pastorius
|

152 | Chapter 5:Basic SQL

| 3.46 | Spinning Around


|
| 3.44 | Mesh
|
| 3.42 | Cries And Whispers
|
| 3.40 | Under The Influence Of Love
|
| 3.40 | Ventilator Blues
|
| 3.26 | Straight To The Man
|
| 3.20 | Dreams Never End
|
| 3.08 | Happy
|
| 3.00 | Shake Your Hips
|
| 2.99 | Your Star Will Shine
|
| 2.97 | Sweet Black Angel
|
| 2.90 | I Just Want To See His Face
|
| 2.81 | Full Nelson
|
| 2.78 | Jangling Jack
|
| 2.38 | Rip This Joint
|
| 1.81 | In A Silent Way
|
| 1.34 | Intermission By Alan Wise [Olympia, Paris 12/11/01]
|
+------+------------------------------------------------------------+
24 rows in set (0.06 sec)

,QWKLVH[DPSOHWKHURZVDUHVRUWHGE\GHVFHQGLQJtimeDQGZKHQWKHUHVDFROOLVLRQ
E\DVFHQGLQJtrack_name:HYHXVHGWKHRSWLRQDONH\ZRUGASCWRLQGLFDWHDQDVFHQGLQJ
VRUWNH\:KHQHYHUZHVRUWDVFHQGLQJRUGHULVDVVXPHGLIWKHDESCNH\ZRUGLVQWXVHG
<RXGRQWQHHGWRH[SOLFLWO\LQFOXGHWKHASCNH\ZRUGEXWLQFOXGLQJLWGRHVKHOSWRPDNH
WKHVWDWHPHQWVEHKDYLRUPRUHREYLRXV1RWLFHDOVRWKDWZHYHLQFOXGHGDWHEREFODXVH
XVLQJ WHEREDQG ORDER BYWRJHWKHULVYHU\FRPPRQDQG WHEREDOZD\VDSSHDUVEHIRUH
ORDER BYLQWKHSELECTVWDWHPHQW
,IDFROOLVLRQRIYDOXHVRFFXUVDQG\RXGRQWVSHFLI\DQRWKHUVRUWNH\WKHVRUWRUGHULV
XQGHILQHG7KLVPD\QRWEHLPSRUWDQWIRU\RX\RXPD\QRWFDUHDERXWWKHRUGHULQ
ZKLFK WZR FXVWRPHUV ZLWK WKH LGHQWLFDO QDPH -RKQ $ 6PLWK DSSHDU $ FRPPRQ
VRXUFHRIFROOLVLRQVLVVWULQJVRUWLQJZKHUH0\64/LJQRUHVWKHFDVHRIFKDUDFWHUV)RU
H[DPSOHWKHVWULQJVjohnJohnDQGJOHNDUHWUHDWHGDVLGHQWLFDOLQWKHORDER BYSURFHVV
,I\RXGRZDQWVRUWLQJWREHKDYHOLNH$6&,,GRHV ZKHUHXSSHUFDVHFRPHVEHIRUHORZ
HUFDVH WKHQ\RXFDQDGGDBINARYNH\ZRUGWR\RXUVRUWDVIROORZV
mysql> SELECT * FROM artist ORDER BY BINARY artist_name;
+-----------+---------------------------+
| artist_id | artist_name
|
+-----------+---------------------------+
|
6 | Kylie Minogue
|
|
3 | Miles Davis
|
|
1 | New Order
|
|
2 | Nick Cave & The Bad Seeds |
|
4 | The Rolling Stones
|
|
5 | The Stone Roses
|
+-----------+---------------------------+
6 rows in set (0.01 sec)

%HFDXVH WKHUH DUH QR FDVH FROOLVLRQV LQ WKH music GDWDEDVH WKLV H[DPSOH GRHVQW GR
DQ\WKLQJGLIIHUHQWIURPWKHH[DPSOHZLWKRXWWKHBINARYNH\ZRUG

The SELECT Statement and Basic Querying Techniques | 153

1RWH\RXFDQXVHWKH BINARYNH\ZRUGLQPDQ\SODFHVIRUH[DPSOH\RXFDQXVHLWLQ
VWULQJFRPSDULVRQV)RUH[DPSOHVHDUFKLQJIRUWUDFNVZLWKQDPHVDOSKDEHWLFDOO\HDUOLHU
WKDQWKHOHWWHUbUHWXUQVWUDFNV
mysql> SELECT track_name FROM track WHERE track_name < 'b';
+----------------------------------------------------+
| track_name
|
+----------------------------------------------------+
| Ain't Gonna Rain Anymore
|
| All Day Long
|
| 1963
|
| Age Of Consent [Spectrum Arena, Warrington 1/3/86] |
| As It Is When It Was [Reading Festival 29/8/93]
|
| Amandla
|
| Age Of Consent
|
| 5 8 6
|
| All Down The Line
|
| Angel Dust
|
| All Day Long
|
| As It Is When It Was
|
+----------------------------------------------------+
12 rows in set (0.00 sec)

+RZHYHULIZHVSHFLI\WKDWZHZDQWWRSHUIRUPWKHVHDUFKLQ$6&,,RUGHUZHJHWDOO
WUDFNVVLQFHWKH\DOOVWDUWZLWKDQXSSHUFDVHOHWWHUDQGXSSHUFDVHOHWWHUVDSSHDU
EHIRUHORZHUFDVHOHWWHUVLQWKH$6&,,WDEOH
mysql> SELECT track_name FROM track WHERE track_name < BINARY 'b';
+----------------------------------------------------------------------+
| track_name
|
+----------------------------------------------------------------------+
| Do You Love Me?
|
| Nobody's Baby Now
|
| Loverman
|
| Jangling Jack
|
| Red Right Hand
|
| I Let Love In
|
...
| Broken Promise
|
| As It Is When It Was
|
| Weirdo
|
| Paradise
|
+----------------------------------------------------------------------+
153 rows in set (0.00 sec)

6RUWLQJLVSHUIRUPHGDVDSSURSULDWHWRWKHFROXPQW\SH)RUH[DPSOHLI\RXUHVRUWLQJ
GDWHVLWRUJDQL]HVWKHURZVLQDVFHQGLQJGDWHRUGHU<RXFDQIRUFHWKHVRUWWREHKDYH
GLIIHUHQWO\XVLQJWKHCAST( )IXQFWLRQDQGWKHASNH\ZRUG6XSSRVHIRUH[DPSOH\RX
ZDQWWRVRUWWKHtrackWDEOHE\DVFHQGLQJtimeEXW\RXZDQWWKHWLPHVWREHWUHDWHGDV
VWULQJV+HUHVKRZ\RXGRLW
mysql> SELECT time, track_name FROM track ORDER BY CAST(time AS CHAR);
+-------+-----------------------------------------------------+
| time | track_name
|

154 | Chapter 5:Basic SQL

+-------+-----------------------------------------------------+
| 1.34 | Intermission By Alan Wise [Olympia, Paris 12/11/01] |
| 1.81 | In A Silent Way
|
| 11.37 | Breaking Into Heaven
|
| 12.80 | Human Nature
|
| 16.67 | Shhh/Peaceful
|
| 16.67 | In A Silent Way/It's About That Time
|
| 2.38 | Rip This Joint
|
| 2.78 | Jangling Jack
|
| 2.81 | Full Nelson
|
...

7KHUHVXOWVDUHRUGHUHGDOSKDEHWLFDOO\VRWKDWIRUH[DPSOHQXPEHUVEHJLQQLQJZLWK
DSSHDUEHIRUHQXPEHUVEHJLQQLQJZLWK7KHCAST( )IXQFWLRQIRUFHVDFROXPQWREH
WUHDWHGDVDGLIIHUHQWW\SHLQWKLVH[DPSOHDVDFKDUDFWHUVWULQJXVLQJWKHAS CHARFODXVH
<RXFDQVSHFLI\

AS BINARYWRVRUWDVELQDU\ZKLFKKDVWKHVDPHHIIHFWDVORDER BY BINARY
AS SIGNEDWRVRUWDVDVLJQHGLQWHJHU
AS UNSIGNEDWRVRUWDVDQXQVLJQHGLQWHJHU
AS CHARWRVRUWDVDFKDUDFWHUVWULQJ
AS DATEWRVRUWDVDGDWH
AS DATETIMEWRVRUWDVDGDWHDQGWLPH
AS TIMEWRVRUWDVDWLPH

7KHW\SHVRIFROXPQVDUHGLVFXVVHGLQGHWDLOLQ&ROXPQ7\SHVLQ&KDSWHU

The LIMIT Clause


7KH LIMITFODXVHLVDXVHIXOQRQVWDQGDUG64/WRROWKDWDOORZV\RXWRFRQWUROZKLFK
URZVDUHRXWSXW,WVEDVLFIRUPDOORZV\RXWROLPLWWKHQXPEHURIURZVUHWXUQHGIURP
D SELECTVWDWHPHQWZKLFKLVXVHIXOZKHQ\RXZDQWWROLPLWWKHDPRXQWRIGDWDFRP
PXQLFDWHGRYHUDQHWZRUNRURXWSXWWRWKHVFUHHQ<RXPLJKWXVHLWIRUH[DPSOHLQD
ZHEGDWDEDVHDSSOLFDWLRQZKHUH\RXZDQWWRILQGWKHURZVWKDWPDWFKDFRQGLWLRQEXW
RQO\ZDQWWRVKRZWKHXVHUWKHILUVWURZVLQDZHESDJH+HUHVDQH[DPSOH
mysql> SELECT track_name FROM track LIMIT 10;
+----------------------------+
| track_name
|
+----------------------------+
| Do You Love Me?
|
| Nobody's Baby Now
|
| Loverman
|
| Jangling Jack
|
| Red Right Hand
|
| I Let Love In
|
| Thirsty Dog
|
| Ain't Gonna Rain Anymore
|
| Lay Me Low
|

The SELECT Statement and Basic Querying Techniques | 155

| Do You Love Me? (Part Two) |


+----------------------------+
10 rows in set (0.00 sec)

7KH LIMITFODXVHLQWKLVH[DPSOHUHVWULFWVWKHRXWSXWWRWKHILUVWURZVVDYLQJWKH
FRVWRIEXIIHULQJFRPPXQLFDWLQJDQGGLVSOD\LQJWKHUHPDLQLQJWUDFNV
7KHLIMITFODXVHFDQEHXVHGWRUHWXUQDIL[HGQXPEHURIURZVEHJLQQLQJDQ\ZKHUHLQ
WKHUHVXOWVHW6XSSRVH\RXZDQWILYHURZVEXW\RXZDQWWKHILUVWRQHGLVSOD\HGWREH
WKHVL[WKURZRIWKHDQVZHUVHW<RXGRWKLVE\VWDUWLQJIURPDIWHUWKHILIWKDQVZHU
mysql> SELECT track_name FROM track LIMIT 5,5;
+----------------------------+
| track_name
|
+----------------------------+
| I Let Love In
|
| Thirsty Dog
|
| Ain't Gonna Rain Anymore
|
| Lay Me Low
|
| Do You Love Me? (Part Two) |
+----------------------------+
5 rows in set (0.00 sec)

7KHRXWSXWLVURZVWRIURPWKHSELECTTXHU\
,I\RXZDQWDOOURZVDIWHUDVWDUWSRLQWDQG\RXGRQWNQRZKRZPDQ\URZVDUHLQWKH
WDEOHWKHQ\RXQHHGWRFKRRVHDODUJHLQWHJHUDVWKHVHFRQGSDUDPHWHU6XSSRVH\RX
ZDQWDOOURZVDIWHUURZLQWKHtrackWDEOH8VHWKHIROORZLQJFRPPDQG
mysql> SELECT track_name FROM track LIMIT 150,999999999;
+----------------------+
| track_name
|
+----------------------+
| As It Is When It Was |
| Weirdo
|
| Paradise
|
+----------------------+
3 rows in set (0.01 sec)

6LQFHWKHUHDUHOLNHO\WREHDWPRVWWHQVRIWKRXVDQGVRIURZVLQWKHtrackWDEOHSURYLGLQJ
DVWKHVHFRQGSDUDPHWHUJXDUDQWHHVDOOURZVDUHUHWXUQHG7HFKQLFDOO\WKH
ODUJHVWQXPEHU\RXFDQXVHLVWKLVLVWKHPD[LPXPYDOXHWKDW
FDQEHVWRUHGLQ0\64/VXQVLJQHGBIGINTYDULDEOHW\SH0\64/ZLOOFRPSODLQLI\RX
WU\WRXVHDODUJHUYDOXH:HGLVFXVVYDULDEOHW\SHVLQ2WKHULQWHJHUW\SHVLQ&KDSWHU
7KHUHV DQ DOWHUQDWLYH V\QWD[ WKDW \RX PLJKW VHH IRU WKH LIMIT NH\ZRUG LQVWHDG RI
ZULWLQJLIMIT 10,5\RXFDQZULWHLIMIT 10 OFFSET 5

Joining Two Tables


:HYHVRIDUZRUNHGZLWKMXVWRQHWDEOHLQRXUSELECTTXHULHV+RZHYHU\RXNQRZWKDW
DUHODWLRQDOGDWDEDVHLVDOODERXWZRUNLQJZLWKWKHUHODWLRQVKLSVEHWZHHQWDEOHVWRDQ
VZHULQIRUPDWLRQQHHGV,QGHHGDVZHYHH[SORUHGWKHWDEOHVLQWKHmusicGDWDEDVHLWV
156 | Chapter 5:Basic SQL

EHFRPH REYLRXV WKDW E\ XVLQJ WKHVH UHODWLRQVKLSV ZH FDQ DQVZHU PRUH LQWHUHVWLQJ
TXHULHV )RU H[DPSOH LWG EH XVHIXO WR NQRZ ZKDW WUDFNV PDNH XS DQ DOEXP ZKDW
DOEXPVZHRZQE\HDFKDUWLVWRUKRZORQJDQDOEXPSOD\VIRU7KLVVHFWLRQVKRZV\RX
KRZWRDQVZHUWKHVHTXHULHVE\MRLQLQJWZRWDEOHV:HOOUHWXUQWRWKLVLVVXHDVSDUWRI
DORQJHUPRUHDGYDQFHGGLVFXVVLRQRIMRLQVLQ&KDSWHU
:HXVHRQO\RQHMRLQV\QWD[LQWKLVFKDSWHU7KHUHDUHVHYHUDOPRUHDQGHDFKJLYHV\RX
DGLIIHUHQWZD\WREULQJWRJHWKHUGDWDIURPWZRRUPRUHWDEOHV7KHV\QWD[ZHXVHKHUH
LVWKHINNER JOINZKLFKKLGHVVRPHRIWKHGHWDLODQGLVWKHHDVLHVWWROHDUQ&RQVLGHU
DQH[DPSOHDQGWKHQZHOOH[SODLQPRUHDERXWKRZLWZRUNV
mysql> SELECT artist_name, album_name FROM artist INNER JOIN album
-> USING (artist_id);
+---------------------------+------------------------------------------+
| artist_name
| album_name
|
+---------------------------+------------------------------------------+
| New Order
| Retro - John McCready FAN
|
| New Order
| Substance (Disc 2)
|
| New Order
| Retro - Miranda Sawyer POP
|
| New Order
| Retro - New Order / Bobby Gillespie LIVE |
| New Order
| Power, Corruption & Lies
|
| New Order
| Substance 1987 (Disc 1)
|
| New Order
| Brotherhood
|
| Nick Cave & The Bad Seeds | Let Love In
|
| Miles Davis
| Live Around The World
|
| Miles Davis
| In A Silent Way
|
| The Rolling Stones
| Exile On Main Street
|
| The Stone Roses
| Second Coming
|
| Kylie Minogue
| Light Years
|
+---------------------------+------------------------------------------+
13 rows in set (0.00 sec)

7KHRXWSXWVKRZVWKHDUWLVWVDQGWKHLUDOEXPV<RXFDQVHHIRUWKHILUVWWLPHKRZPDQ\
DOEXPVZHRZQE\HDFKDUWLVWDQGZKRPDGHHDFKRQH
+RZGRHVWKH INNER JOINZRUN"7KHVWDWHPHQWKDVWZRSDUWVILUVWWZRWDEOHQDPHV
VHSDUDWHGE\WKHINNER JOINNH\ZRUGVVHFRQGWKHUSINGNH\ZRUGWKDWLQGLFDWHVZKLFK
FROXPQ RUFROXPQV KROGVWKHUHODWLRQVKLSEHWZHHQWKHWZRWDEOHV,QRXUILUVWH[DP
SOHWKHWZRWDEOHVWREHMRLQHGDUHartistDQGalbumH[SUHVVHGDVartist INNER JOIN
album IRUWKHEDVLFINNER JOINLWGRHVQWPDWWHUZKDWRUGHU\RXOLVWWKHWDEOHVLQDQG
VRXVLQJalbum INNER JOIN artistZRXOGKDYHWKHVDPHHIIHFW 7KHUSINGFODXVHLQWKH
H[DPSOHLVUSING (artist_id)ZKLFKWHOOV0\64/WKDWWKHFROXPQWKDWKROGVWKHUH
ODWLRQVKLSEHWZHHQWKHWDEOHVLVartist_id\RXVKRXOGUHFDOOWKLVIURPRXUGHVLJQDQG
RXUSUHYLRXVGLVFXVVLRQLQ7KH0XVLF'DWDEDVHLQ&KDSWHU
7KHGDWDFRPHVIURPWKHartistWDEOH
mysql> SELECT * FROM artist;
+-----------+---------------------------+
| artist_id | artist_name
|
+-----------+---------------------------+
| 1
| New Order
|

The SELECT Statement and Basic Querying Techniques | 157

| 2
| Nick Cave & The Bad Seeds |
| 3
| Miles Davis
|
| 4
| The Rolling Stones
|
| 5
| The Stone Roses
|
| 6
| Kylie Minogue
|
+-----------+---------------------------+
6 rows in set (0.01 sec)

DQGWKHalbumWDEOH
mysql> SELECT * FROM album;
+-----------+----------+------------------------------------------+
| artist_id | album_id | album_name
|
+-----------+----------+------------------------------------------+
| 2
| 1
| Let Love In
|
| 1
| 1
| Retro - John McCready FAN
|
| 1
| 2
| Substance (Disc 2)
|
| 1
| 3
| Retro - Miranda Sawyer POP
|
| 1
| 4
| Retro - New Order / Bobby Gillespie LIVE |
| 3
| 1
| Live Around The World
|
| 3
| 2
| In A Silent Way
|
| 1
| 5
| Power, Corruption & Lies
|
| 4
| 1
| Exile On Main Street
|
| 1
| 6
| Substance 1987 (Disc 1)
|
| 5
| 1
| Second Coming
|
| 6
| 1
| Light Years
|
| 1
| 7
| Brotherhood
|
+-----------+----------+------------------------------------------+
13 rows in set (0.00 sec)

,QUHVSRQVHWRRXUTXHU\0\64/ILQGVWKHartist_nameDQGalbum_nameYDOXHSDLUVWKDW
KDYHWKHVDPHartist_idYDOXHV)RUHDFKartist_idLQWKHartistWDEOH OHWVXVHDV
DQH[DPSOH 
+-----------+---------------------------+
| artist_id | artist_name
|
+-----------+---------------------------+
| 1
| New Order
|
+-----------+---------------------------+

WKHVHUYHUILQGVDOOWKHHQWULHVLQWKHalbumWDEOHWKDWKDYHWKLVYDOXHRIartist_id
+-----------+----------+------------------------------------------+
| artist_id | album_id | album_name
|
+-----------+----------+------------------------------------------+
| 1
| 1
| Retro - John McCready FAN
|
| 1
| 2
| Substance (Disc 2)
|
| 1
| 3
| Retro - Miranda Sawyer POP
|
| 1
| 4
| Retro - New Order / Bobby Gillespie LIVE |
| 1
| 5
| Power, Corruption & Lies
|
| 1
| 6
| Substance 1987 (Disc 1)
|
| 1
| 7
| Brotherhood
|
+-----------+----------+------------------------------------------+

,WFDQWKHQIRUPDQHZWHPSRUDU\WDEOHIURPWKHVHWZRVHWV

158 | Chapter 5:Basic SQL

+-----------+-------------+----------+------------------------------------------+
| artist_id | artist_name | album_id | album_name
|
+-----------+-------------+----------+------------------------------------------+
| 1
| New Order
| 1
| Retro - John McCready FAN
|
| 1
| New Order
| 2
| Substance (Disc 2)
|
| 1
| New Order
| 3
| Retro - Miranda Sawyer POP
|
| 1
| New Order
| 4
| Retro - New Order / Bobby Gillespie LIVE |
| 1
| New Order
| 5
| Power, Corruption & Lies
|
| 1
| New Order
| 6
| Substance 1987 (Disc 1)
|
| 1
| New Order
| 7
| Brotherhood
|
+-----------+-------------+----------+------------------------------------------+

2QFHLWKDVSURFHVVHGDOOWKHGLIIHUHQWartist_idYDOXHVLWVHOHFWVWKHFROXPV\RXDVNHG
IRUartist_nameDQGalbum_nameWRGLVSOD\
+---------------------------+------------------------------------------+
| artist_name
| album_name
|
+---------------------------+------------------------------------------+
| New Order
| Retro - John McCready FAN
|
| New Order
| Substance (Disc 2)
|
| New Order
| Retro - Miranda Sawyer POP
|
| New Order
| Retro - New Order / Bobby Gillespie LIVE |
| New Order
| Power, Corruption & Lies
|
| New Order
| Substance 1987 (Disc 1)
|
| New Order
| Brotherhood
|
...
+---------------------------+------------------------------------------+

7KHUHDUHDIHZLPSRUWDQWLVVXHV\RXQHHGWRNQRZDERXWZKHQXVLQJWKHEDVLFINNER
JOINV\QWD[
,WZRUNVRQO\ZKHQWZRWDEOHVVKDUHDFROXPQZLWKWKHVDPHQDPHWKDW\RXFDQ
XVHDVWKHMRLQFRQGLWLRQRWKHUZLVH\RXPXVWXVHDQDOWHUQDWLYHV\QWD[GHVFULEHG
LQ&KDSWHU1RWHWKDW0\64/FDQWDXWRPDWLFDOO\GHWHUPLQHWKHFROXPQ\RX
ZDQWWRXVHIRUWKHMRLQ HYHQLIWKHUHDUHFROXPQVZLWKWKHVDPHQDPHLQWKHWZR
WDEOHV VR\RXKDYHWRVSHFLI\LWH[SOLFLWO\
7KHUHVXOWURZVVKRZQDUHWKRVHZKHUHWKHMRLQFROXPQ RUFROXPQV PDWFKEH
WZHHQWKHWDEOHVURZVIURPRQHWDEOHWKDWGRQWKDYHDPDWFKLQWKHRWKHUWDEOH
DUH LJQRUHG ,Q WKH SUHYLRXV H[DPSOH DQ\ DUWLVW ZKR KDG QR DOEXPV ZRXOG EH
LJQRUHG
:LWKWKHH[FHSWLRQRIWKHMRLQFROXPQRUFROXPQVDIWHUWKH USINGNH\ZRUGDQ\
FROXPQV\RXVSHFLI\PXVWEHXQDPELJXRXV)RUH[DPSOHLI\RXZDQWWR SELECT
WKHartist_name\RXFDQXVHMXVWartist_nameEHFDXVHLWH[LVWVRQO\LQWKHartist
WDEOH+RZHYHULI\RXZDQW artist_idWKHQ\RXQHHGWRVSHFLI\LWH[SOLFLWO\DV
artist.artist_idRU album.artist_idEHFDXVHERWKWDEOHVKDYHDFROXPQRIWKH
VDPHQDPH
'RQWIRUJHWWKHUSINGFODXVH0\64/ZRQWFRPSODLQLI\RXRPLWLWEXWWKHUHVXOWV
ZRQWPDNHVHQVHEHFDXVH\RXOOJHWD&DUWHVLDQSURGXFW:HGLVFXVVWKLVIXUWKHU
LQ&KDSWHU

The SELECT Statement and Basic Querying Techniques | 159

7KHFROXPQRUFROXPQVIROORZLQJWKHUSINGFODXVHPXVWEHVXUURXQGHGE\SDUHQ
WKHVHV,I\RXZDQWWRMRLQRQPRUHWKDQRQHFROXPQVHSDUDWHWKHFROXPQQDPHV
ZLWKDFRPPD:HOOVKRZ\RXDQH[DPSOHLQDPRPHQW
,I\RXUHPHPEHUWKHVHUXOHV\RXOOILQGMRLQVZLWKINNER JOINDUHUHDVRQDEO\VWUDLJKW
IRUZDUG/HWVQRZFRQVLGHUDIHZPRUHH[DPSOHVWKDWLOOXVWUDWHWKHVHLGHDV
6XSSRVH\RXZDQWWROLVWWKHWUDFNQDPHVIRUDOO\RXUDOEXPV([DPLQLQJWKHalbumDQG
trackWDEOHV\RXLGHQWLI\WKDW\RXZRXOGKDYHWRMRLQWZRFROXPQV artist_idDQG
album_id/HWVWU\WKHMRLQRSHUDWLRQ
mysql> SELECT album_name, track_name FROM album INNER JOIN track
-> USING (artist_id, album_id) LIMIT 15;
+---------------------------+----------------------------+
| album_name
| track_name
|
+---------------------------+----------------------------+
| Let Love In
| Do You Love Me?
|
| Let Love In
| Nobody's Baby Now
|
| Let Love In
| Loverman
|
| Let Love In
| Jangling Jack
|
| Let Love In
| Red Right Hand
|
| Let Love In
| I Let Love In
|
| Let Love In
| Thirsty Dog
|
| Let Love In
| Ain't Gonna Rain Anymore |
| Let Love In
| Lay Me Low
|
| Let Love In
| Do You Love Me? (Part Two) |
| Retro - John McCready FAN | Elegia
|
| Retro - John McCready FAN | In A Lonely Place
|
| Retro - John McCready FAN | Procession
|
| Retro - John McCready FAN | Your Silent Face
|
| Retro - John McCready FAN | Sunrise
|
+---------------------------+----------------------------+
15 rows in set (0.00 sec)

:HYHVSHFLILHGWKHWZRMRLQFROXPQVLQWKHUSINGFODXVHVHSDUDWHGE\FRPPDVDVUSING
(artist_id, album_id)7KHUHVXOWVVKRZWKHWUDFNVIRUWKHDOEXP/HW/RYH,QDQGWKH
ILUVWIHZIURP5HWUR-RKQ0F5HDG\)$17RILWWKHUHVXOWVLQWRWKHERRNZHYHOLPLWHG
WKH RXWSXW WR  URZV XVLQJ WKH LIMIT FODXVH ZH GLVFXVVHG HDUOLHU LQ 7KH /,0,7
&ODXVH
:HFDQLPSURYHRXUSUHYLRXVH[DPSOHE\DGGLQJDQ ORDER BYFODXVH,WPDNHVVHQVH
WKDWZHGZDQWWRVHHWKHDOEXPVLQDOSKDEHWLFDORUGHUZLWKWKHWUDFNVVKRZQLQWKH
RUGHUWKH\RFFXURQWKHDOEXPVRZHFRXOGPRGLI\RXUSUHYLRXVTXHU\WREH
mysql> SELECT album_name, track_name FROM album INNER JOIN track
-> USING (artist_id, album_id)
-> ORDER BY album_name, track_id LIMIT 15;
+----------------------+-----------------------+
| album_name
| track_name
|
+----------------------+-----------------------+
| Brotherhood
| State of the Nation |
| Brotherhood
| Every Little Counts |
| Brotherhood
| Angel Dust
|

160 | Chapter 5:Basic SQL

| Brotherhood
| All Day Long
|
| Brotherhood
| Bizarre Love Triangle |
| Brotherhood
| Way of Life
|
| Brotherhood
| Broken Promise
|
| Brotherhood
| As It Is When It Was |
| Brotherhood
| Weirdo
|
| Brotherhood
| Paradise
|
| Exile On Main Street | Rocks Off
|
| Exile On Main Street | Rip This Joint
|
| Exile On Main Street | Shake Your Hips
|
| Exile On Main Street | Casino Boogie
|
| Exile On Main Street | Tumbling Dice
|
+----------------------+-----------------------+
15 rows in set (0.00 sec)

<RXFDQVHHWKDWWKHORDER BYFODXVHVRUWVWKHDOEXPVDQGWUDFNVLQWKHUHTXLUHGRUGHU
DQGWKDWLWVOLVWHGODVWLQWKHTXHU\DIWHUWKHMRLQFRQGLWLRQ
/HWVWU\DGLIIHUHQWTXHU\6XSSRVH\RXZDQWWRILQGRXWZKLFKWUDFNV\RXYHSOD\HG
<RXFDQGRWKLVZLWKDMRLQEHWZHHQWKHtrackDQGplayedWDEOHVXVLQJWKHartist_id
album_idDQGtrack_idFROXPQVLQWKHMRLQFRQGLWLRQ+HUHVWKHTXHU\
mysql> SELECT played, track_name FROM
-> track INNER JOIN played USING (artist_id, album_id, track_id)
-> ORDER BY track.artist_id, track.album_id, track.track_id, played;
+---------------------+-----------------------+
| played
| track_name
|
+---------------------+-----------------------+
| 2006-08-14 10:21:03 | Fine Time
|
| 2006-08-14 10:25:22 | Temptation
|
| 2006-08-14 10:30:25 | True Faith
|
| 2006-08-14 10:36:54 | The Perfect Kiss
|
| 2006-08-14 10:41:43 | Ceremony
|
| 2006-08-14 10:43:37 | Regret
|
| 2006-08-14 10:47:21 | Crystal
|
| 2006-08-14 10:54:02 | Bizarre Love Triangle |
| 2006-08-15 14:00:03 | In A Silent Way
|
| 2006-08-15 14:26:12 | Intruder
|
| 2006-08-15 14:33:57 | New Blues
|
+---------------------+-----------------------+
11 rows in set (0.00 sec)

:HYHVRUWHGWKHUHVXOWVE\DUWLVWWKHQDOEXPWKHQWUDFNDQGWKHQWKHSOD\GDWHDQG
WLPH1RWLFHZHYHDOVRKDGWRXQDPELJXRXVO\VSHFLI\WKHFROXPQVLQWKH ORDER BY
FODXVHXVLQJWKHWDEOHQDPHVLQFHWKHILUVWWKUHHFROXPQVRFFXULQERWKWDEOHV,QSUDF
WLFHLIFROXPQVDUHXVHGLQWKHMRLQFRQGLWLRQLWGRHVQWPDWWHUZKHWKHU\RXVRUWRU
VHOHFWXVLQJWKHFROXPQIURPHLWKHUWDEOHIRUH[DPSOHLQWKLVTXHU\track.artist_id
DQG played.artist_idDUHLQWHUFKDQJHDEOHEHFDXVHWKH\UHDOZD\VWKHVDPHIRUHDFK
URZ
%HIRUHZHOHDYH SELECTZHOOJLYH\RXDWDVWHRIRQHRIWKHIXQFWLRQV\RXFDQXVHWR
DJJUHJDWHYDOXHV6XSSRVH\RXZDQWWRILQGRXWKRZORQJ1HZ2UGHUV%URWKHUKRRG

The SELECT Statement and Basic Querying Techniques | 161

DOEXPWDNHVWRSOD\<RXFDQGRWKLVE\VXPPLQJWKHWLPHVRIWKHLQGLYLGXDOWUDFNV
ZLWKWKH64/SUM( )IXQFWLRQ+HUHVKRZLWZRUNV
mysql> SELECT SUM(time) FROM
-> album INNER JOIN track USING (artist_id, album_id)
-> WHERE album.artist_id = 1 AND album.album_id = 7;
+-----------+
| SUM(time) |
+-----------+
|
43.78 |
+-----------+
1 row in set (0.00 sec)

<RXFDQVHHWKHDOEXPUXQVIRUMXVWXQGHUPLQXWHV7KHSUM( )IXQFWLRQUHSRUWVWKH
VXPRIDOOYDOXHVIRUWKHFROXPQHQFORVHGLQWKHSDUHQWKHVHVLQWKLVFDVHtimeDQG
QRWWKHLQGLYLGXDOYDOXHVWKHPVHOYHV%HFDXVHZHYHXVHGDWHEREFODXVHWRFKRRVHRQO\
URZVIRUWKH%URWKHUKRRGDOEXPWKHVXPRIWKHWLPHYDOXHVLVWKHWRWDOSOD\WLPHRIWKH
DOEXP2IFRXUVHWRUXQWKLVTXHU\ZHQHHGHGWRNQRZWKDW1HZ2UGHUV artist_id
LVDQGWKDWWKH album_idRI%URWKHUKRRGLV:HGLVFRYHUHGWKLVE\UXQQLQJWZR
RWKHUSELECTTXHULHVEHIRUHKDQG
mysql> SELECT artist_id FROM artist WHERE artist_name = "New Order";
+-----------+
| artist_id |
+-----------+
|
1 |
+-----------+
1 row in set (0.00 sec)
mysql> SELECT album_id FROM album
-> WHERE artist_id = 1 AND album_name = "Brotherhood";
+----------+
| album_id |
+----------+
|
7 |
+----------+
1 row in set (0.00 sec)

:HH[SODLQPRUHIHDWXUHVRISELECTDQGDJJUHJDWHIXQFWLRQVLQ&KDSWHU

The INSERT Statement


7KHINSERTVWDWHPHQWLVXVHGWRDGGQHZGDWDWRWDEOHV,QWKLVVHFWLRQZHH[SODLQLWV
EDVLFV\QWD[DQGVKRZ\RXVLPSOHH[DPSOHVWKDWDGGQHZURZVWRWKHmusicGDWDEDVH
,Q&KDSWHUZHOOGLVFXVVKRZWRORDGGDWDIURPH[LVWLQJWDEOHVRUIURPH[WHUQDOGDWD
VRXUFHV

162 | Chapter 5:Basic SQL

INSERT Basics
,QVHUWLQJGDWDW\SLFDOO\RFFXUVLQWZRVLWXDWLRQVZKHQ\RXEXONORDGLQDODUJHEDWFK
DV\RXFUHDWH\RXUGDWDEDVHDQGZKHQ\RXDGGGDWDRQDQDGKRFEDVLVDV\RXXVHWKH
GDWDEDVH,Q0\64/WKHUHDUHGLIIHUHQWRSWLPL]DWLRQVEXLOWLQWRWKHVHUYHUIRUHDFK
VLWXDWLRQDQGLPSRUWDQWO\GLIIHUHQW64/V\QWD[HVDYDLODEOHWRPDNHLWHDV\IRU\RXWR
ZRUNZLWKWKHVHUYHULQERWKFDVHV:HH[SODLQDEDVLF INSERTV\QWD[LQWKLVVHFWLRQ
DQGVKRZ\RXH[DPSOHVRIKRZWRXVHLWIRUEXONDQGVLQJOHUHFRUGLQVHUWLRQ
/HWVVWDUWZLWKWKHEDVLFWDVNRILQVHUWLQJRQHQHZURZLQWRWKHartistWDEOH7RGRWKLV
\RXQHHGWRXQGHUVWDQGWKHWDEOHVVWUXFWXUH$VZHH[SODLQHGLQ&KDSWHULQ7KH
0XVLF'DWDEDVH\RXFDQGLVFRYHUWKLVZLWKWKHSHOW COLUMNSVWDWHPHQW
mysql> SHOW COLUMNS FROM artist;
+-------------+-------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| artist_id
| smallint(5) | NO | PRI | 0
|
|
| artist_name | char(128)
| NO |
|
|
|
+-------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

7KLV WHOOV \RX WKDW WKH WZR FROXPQV RFFXU LQ WKH RUGHU artist_id DQG WKHQ
artist_nameDQG\RXQHHGWRNQRZWKLVIRUWKHEDVLFV\QWD[ZHUHDERXWWRXVH
2XUQHZURZLVIRUDQHZDUWLVW%DUU\$GDPVRQ%XWZKDW artist_idYDOXHGRZH
JLYHKLP"<RXPLJKWUHFDOOWKDWZHDOUHDG\KDYHVL[DUWLVWVVRZHVKRXOGSUREDEO\XVH
<RXFDQFKHFNWKLVZLWK
mysql> SELECT MAX(artist_id) FROM artist;
+----------------+
| MAX(artist_id) |
+----------------+
|
6 |
+----------------+
1 row in set (0.04 sec)

7KHMAX( )IXQFWLRQLVDQDJJUHJDWHIXQFWLRQDQGLWWHOOV\RXWKHPD[LPXPYDOXHIRU
WKHFROXPQVXSSOLHGDVDSDUDPHWHU7KLVLVDOLWWOHFOHDQHUWKDQSELECT artist_id FROM
artistZKLFKSULQWVRXWDOOURZVDQGUHTXLUHV\RXWRLQVSHFWWKHURZVWRILQGWKHPD[
LPXPYDOXHDGGLQJDQORDER BYPDNHVLWHDVLHU8VLQJMAX( )LVDOVRPXFKVLPSOHUWKDQ
SELECT artist_id FROM artist ORDER BY artist_id DESC LIMIT 1ZKLFKDOVRUHWXUQV
WKHFRUUHFWDQVZHU<RXOOOHDUQPRUHDERXWWKHAUTO_INCREMENTVKRUWFXWWRDXWRPDWL
FDOO\DVVLJQWKHQH[WDYDLODEOHLGHQWLILHULQ&KDSWHUDQGDERXWDJJUHJDWHIXQFWLRQVLQ
&KDSWHU
:HUHQRZUHDG\WRLQVHUWWKHURZ+HUHVZKDW\RXW\SH
mysql> INSERT INTO artist VALUES (7, "Barry Adamson");
Query OK, 1 row affected (0.00 sec)

The INSERT Statement | 163

$QHZURZLVFUHDWHG0\64/UHSRUWVWKDWRQHURZKDVEHHQDIIHFWHGDQGWKHYDOXH
LVLQVHUWHGDVWKHartist_idDQGBarry AdamsonDVWKHartist_name<RXFDQFKHFNZLWK
DTXHU\
mysql> SELECT * FROM artist WHERE artist_id = 7;
+-----------+---------------+
| artist_id | artist_name
|
+-----------+---------------+
|
7 | Barry Adamson |
+-----------+---------------+
1 row in set (0.01 sec)

<RXPLJKWEHWHPSWHGWRWU\RXWVRPHWKLQJOLNHWKLV
mysql> INSERT INTO artist
VALUES((SELECT 1+MAX(artist_id) FROM artist), "Barry Adamson");

+RZHYHUWKLVZRQWZRUNEHFDXVH\RXFDQWPRGLI\DWDEOHZKLOH\RXUHUHDGLQJIURP
LW7KHTXHU\ZRXOGZRUNLI\RXZDQWHGWRINSERT INTODGLIIHUHQWWDEOH KHUHDWDEOH
RWKHUWKDQartist 
7RFRQWLQXHRXUH[DPSOHDQGLOOXVWUDWHWKHEXONORDGLQJDSSURDFKOHWVQRZLQVHUW
%DUU\ $GDPVRQV DOEXP 7KH 7DPLQJ RI WKH 6KUHZG DQG LWV WUDFNV )LUVW FKHFN WKH
VWUXFWXUHRIWKHalbumWDEOH
mysql> SHOW COLUMNS FROM album;
+------------+-----------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+------------+-----------+------+-----+---------+-------+
| artist_id | int(5)
|
| PRI | 0
|
|
| album_id
| int(4)
|
| PRI | 0
|
|
| album_name | char(128) | YES |
| NULL
|
|
+------------+-----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

6HFRQGLQVHUWWKHDOEXPXVLQJWKHDSSURDFKZHXVHGSUHYLRXVO\
mysql> INSERT INTO album VALUES (7, 1, "The Taming of the Shrewd");
Query OK, 1 row affected (0.00 sec)

7KHILUVWYDOXHLVWKH artist_idWKHYDOXHRIZKLFKZHNQRZIURPFUHDWLQJWKHDUWLVW
DQGWKHVHFRQGYDOXHLVWKH album_idZKLFKPXVWEHEHFDXVHWKLVLVWKHILUVWDOEXP
ZHYHDGGHGIRU%DUU\$GDPVRQ
7KLUGFKHFNWKHtrackWDEOHVWUXFWXUH
mysql> SHOW COLUMNS FROM track;
+------------+--------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| track_id
| int(3)
|
| PRI | 0
|
|
| track_name | char(128)
| YES |
| NULL
|
|
| artist_id | int(5)
|
| PRI | 0
|
|
| album_id
| int(4)
|
| PRI | 0
|
|
| time
| decimal(5,2) | YES |
| NULL
|
|

164 | Chapter 5:Basic SQL

+------------+--------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

)LQDOO\LQVHUWWKHWUDFNV
mysql> INSERT INTO track VALUES (1, "Diamonds", 7, 1, 4.10),
-> (2, "Boppin Out / Eternal Morning", 7, 1, 3.22),
-> (3, "Splat Goes the Cat", 7, 1, 1.39),
-> (4, "From Rusholme With Love", 7, 1, 3.59);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0

+HUHZHYHXVHGDGLIIHUHQW INSERTVW\OHWRDGGDOOIRXUWUDFNVLQDVLQJOH64/TXHU\
7KLVVW\OHLVUHFRPPHQGHGZKHQ\RXZDQWWRORDGPRUHWKDQRQHURZ,WKDVDVLPLODU
IRUPDWWRWKHVLQJOHLQVHUWLRQVW\OHH[FHSWWKDWWKHYDOXHVIRUVHYHUDOURZVDUHFROOHFWHG
WRJHWKHULQDFRPPDVHSDUDWHGOLVW*LYLQJ0\64/DOOWKHGDWD\RXZDQWWRLQVHUWLQ
RQHVWDWHPHQWKHOSVLWRSWLPL]HWKHLQVHUWLRQSURFHVVDOORZLQJTXHULHVWKDWXVHWKLV
V\QWD[WREHW\SLFDOO\PDQ\WLPHVIDVWHUWKDQUHSHDWHGLQVHUWLRQVRIVLQJOHURZV7KHUH
DUHRWKHUZD\VWRVSHHGXSLQVHUWLRQDQGZHGLVFXVVVHYHUDOLQ&KDSWHU
7KHVLQJOHURZINSERTVW\OHLVXQIRUJLYLQJLILWILQGVDGXSOLFDWHLWOOVWRSDVVRRQDVLW
ILQGVDGXSOLFDWHNH\)RUH[DPSOHVXSSRVHZHWU\WRLQVHUWWKHVDPHWUDFNVDJDLQ
mysql> INSERT INTO track VALUES (1, "Diamonds", 7, 1, 4.10),
-> (2, "Boppin Out / Eternal Morning", 7, 1, 3.22),
-> (3, "Splat Goes the Cat", 7, 1, 1.39),
-> (4, "From Rusholme With Love", 7, 1, 3.59);
ERROR 1062 (23000): Duplicate entry '7-1-1' for key 1

7KHINSERTRSHUDWLRQVWRSVRQWKHILUVWGXSOLFDWHNH\<RXFDQDGGDQIGNOREFODXVHWR
SUHYHQWWKHHUURULI\RXZDQW
mysql> INSERT IGNORE INTO track VALUES (1, "Diamonds", 7, 1, 4.10),
-> (2, "Boppin Out / Eternal Morning", 7, 1, 3.22),
-> (3, "Splat Goes the Cat", 7, 1, 1.39),
-> (4, "From Rusholme With Love", 7, 1, 3.59);
Query OK, 0 rows affected (0.01 sec)
Records: 4 Duplicates: 4 Warnings: 0

+RZHYHULQPRVWFDVHV\RXZDQWWRNQRZDERXWSRVVLEOHSUREOHPV DIWHUDOOSULPDU\
NH\VDUHVXSSRVHGWREHXQLTXH DQGVRWKLVIGNOREV\QWD[LVUDUHO\XVHG
<RXOOQRWLFHWKDW0\64/UHSRUWVWKHUHVXOWVRIEXONLQVHUWLRQGLIIHUHQWO\IURPVLQJOH
LQVHUWLRQ)URPRXULQLWLDOEXONLQVHUWLRQLWUHSRUWV
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0

7KHILUVWOLQHWHOOV\RXKRZPDQ\URZVZHUHLQVHUWHGZKLOHWKHILUVWHQWU\LQWKHILQDO
OLQHWHOOV\RXKRZPDQ\URZV RUUHFRUGV ZHUHDFWXDOO\SURFHVVHG,I\RXXVH INSERT
IGNOREDQGWU\WRLQVHUWDGXSOLFDWHUHFRUGIRUZKLFKWKHSULPDU\NH\PDWFKHVWKDW
RIDQH[LVWLQJURZWKHQ0\64/ZLOOTXLHWO\VNLSLQVHUWLQJLWDQGUHSRUWLWDVDGXSOLFDWH
LQWKHVHFRQGHQWU\RQWKHILQDOOLQH

The INSERT Statement | 165

Query OK, 0 rows affected (0.01 sec)


Records: 4 Duplicates: 4 Warnings: 0

:HGLVFXVVFDXVHVRIZDUQLQJVVKRZQDVWKHWKLUGHQWU\RQWKHILQDOOLQHLQ&KDS
WHU

Alternative Syntaxes
7KHUHDUHVHYHUDODOWHUQDWLYHVWRWKHVALUESV\QWD[ZHYHVKRZQ\RXVRIDU7KLVVHFWLRQ
VKRZV\RXWKHVHDQGH[SODLQVWKHDGYDQWDJHVDQGGUDZEDFNVRIHDFK,I\RXUHKDSS\
ZLWKWKHEDVLFV\QWD[ZHYHGHVFULEHGVRIDUDQGZDQWWRPRYHRQWRDQHZWRSLFIHHO
IUHHWRVNLSDKHDGWR7KH'(/(7(6WDWHPHQW
7KHUHDUHWKUHHGLVDGYDQWDJHVRIWKH VALUESV\QWD[ZHYHVKRZQ\RX)LUVW\RXQHHG
WRUHPHPEHUWKHRUGHURIWKHFROXPQV6HFRQG\RXQHHGWRSURYLGHDYDOXHIRUHDFK
FROXPQ/DVWLWVFORVHO\WLHGWRWKHXQGHUO\LQJWDEOHVWUXFWXUHLI\RXFKDQJHWKHWDEOHV
VWUXFWXUH\RXQHHGWRFKDQJHWKH INSERTVWDWHPHQWVDQGWKHIXQFWLRQRIWKH INSERT
VWDWHPHQWLVQWREYLRXVXQOHVV\RXKDYHWKHWDEOHVWUXFWXUHDWKDQG+RZHYHUWKHWKUHH
DGYDQWDJHVRIWKHDSSURDFKDUHWKDWLWZRUNVIRUERWKVLQJOHDQGEXONLQVHUWV\RXJHW
DQHUURUPHVVDJHLI\RXIRUJHWWRVXSSO\YDOXHVIRUDOOFROXPQVDQG\RXGRQWKDYHWR
W\SHLQFROXPQQDPHV)RUWXQDWHO\WKHGLVDGYDQWDJHVDUHHDVLO\DYRLGHGE\YDU\LQJWKH
V\QWD[
6XSSRVH\RXNQRZWKDWWKHalbumWDEOHKDVWKUHHFROXPQVDQG\RXUHFDOOWKHLUQDPHV
EXW\RXIRUJHWWKHLURUGHU<RXFDQLQVHUWXVLQJWKHIROORZLQJDSSURDFK
mysql> INSERT INTO album (artist_id, album_id, album_name)
-> VALUES (7, 2, "Oedipus Schmoedipus");
Query OK, 1 row affected (0.00 sec)

7KHFROXPQQDPHVDUHLQFOXGHGLQSDUHQWKHVHVDIWHUWKHWDEOHQDPHDQGWKHYDOXHV
VWRUHGLQWKRVHFROXPQVDUHOLVWHGLQSDUHQWKHVHVDIWHUWKHVALUESNH\ZRUG6RLQWKLV
H[DPSOHDQHZURZLVFUHDWHGDQGWKHYDOXHLVVWRUHGDVWKHartist_idLVVWRUHGDV
WKHalbum_idDQGOedipus SchmoedipusLVVWRUHGDVWKHalbum_name7KHDGYDQWDJHVRI
WKLV V\QWD[ DUH WKDW LWV UHDGDEOHDQGIOH[LEOH DGGUHVVLQJWKHWKLUGGLVDGYDQWDJHZH
GHVFULEHG DQGRUGHULQGHSHQGHQW DGGUHVVLQJWKHILUVWGLVDGYDQWDJH 7KHGLVDGYDQW
DJHLVWKDW\RXQHHGWRNQRZWKHFROXPQQDPHVDQGW\SHWKHPLQ
7KLVQHZV\QWD[FDQDOVRDGGUHVVWKHVHFRQGGLVDGYDQWDJHRIWKHVLPSOHUDSSURDFK
WKDWLVLWFDQDOORZ\RXWRLQVHUWYDOXHVIRURQO\VRPHFROXPQV7RXQGHUVWDQGKRZ
WKLVPLJKWEHXVHIXOOHWVH[SORUHWKHplayedWDEOH
mysql> SHOW COLUMNS FROM played;
+-----------+-----------+------+-----+-------------------+-------+
| Field
| Type
| Null | Key | Default
| Extra |
+-----------+-----------+------+-----+-------------------+-------+
| artist_id | int(5)
|
| PRI | 0
|
|
| album_id | int(4)
|
| PRI | 0
|
|
| track_id | int(3)
|
| PRI | 0
|
|
| played
| timestamp | YES | PRI | CURRENT_TIMESTAMP |
|

166 | Chapter 5:Basic SQL

+-----------+-----------+------+-----+-------------------+-------+
4 rows in set (0.00 sec)

1RWLFHWKDWWKH playedFROXPQKDVDGHIDXOWYDOXHRI CURRENT_TIMESTAMP7KLVPHDQV


WKDWLI\RXGRQWLQVHUWDYDOXHIRUWKHplayedFROXPQLWOOLQVHUWWKHFXUUHQWGDWHDQG
WLPHE\GHIDXOW7KLVLVMXVWZKDWZHZDQWZKHQZHSOD\DWUDFNZHGRQWZDQWWR
ERWKHUFKHFNLQJWKHGDWHDQGWLPHDQGW\SLQJLWLQ+HUHVKRZ\RXLQVHUWDQLQFRPSOHWH
SOD\HGHQWU\
mysql> INSERT INTO played (artist_id, album_id, track_id)
-> VALUES (7, 1, 1);
Query OK, 1 row affected (0.00 sec)

:HGLGQWVHWWKHplayedFROXPQVR0\64/GHIDXOWVLWWRWKHFXUUHQWGDWHDQGWLPH
<RXFDQFKHFNWKLVZLWKDTXHU\
mysql> SELECT * FROM played WHERE artist_id = 7
-> AND album_id = 1;
+-----------+----------+----------+---------------------+
| artist_id | album_id | track_id | played
|
+-----------+----------+----------+---------------------+
|
7 |
1 |
1 | 2006-08-09 12:03:00 |
+-----------+----------+----------+---------------------+
1 row in set (0.00 sec)

<RXFDQDOVRXVHWKLVDSSURDFKIRUEXONLQVHUWLRQDVIROORZV
mysql> INSERT INTO played (artist_id, album_id, track_id)
-> VALUES (7,1,2),(7,1,3),(7,1,4);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0

7KHGLVDGYDQWDJHVRIWKLVDSSURDFKDUHWKDW\RXFDQDFFLGHQWDOO\RPLWYDOXHVIRUFRO
XPQVDQG\RXQHHGWRUHPHPEHUDQGW\SHFROXPQQDPHV7KHRPLWWHGFROXPQVZLOO
EHVHWWRWKHGHIDXOWYDOXHV
$OOFROXPQVLQD0\64/WDEOHKDYHDGHIDXOWYDOXHRINULLXQOHVVDQRWKHUGHIDXOWYDOXH
LVH[SOLFLWO\DVVLJQHGZKHQWKHWDEOHLVFUHDWHGRUPRGLILHG%HFDXVHRIWKLVGHIDXOWV
FDQRIWHQFDXVHGXSOLFDWHURZVLI\RXDGGDURZZLWKWKHGHIDXOWSULPDU\NH\YDOXHV
DQGUHSHDWWKHSURFHVV\RXOOJHWDGXSOLFDWHHUURU+RZHYHUWKHGHIDXOWLVQWDOZD\V
VHQVLEOHIRUH[DPSOHLQWKH playedWDEOHWKH artist_id album_idDQG track_idFRO
XPQVDOOGHIDXOWWRZKLFKGRHVQWPDNHVHQVHLQWKHFRQWH[WRIRXUPXVLFFROOHFWLRQ
/HWVWU\DGGLQJDURZWRplayedZLWKRQO\GHIDXOWYDOXHV
mysql> INSERT INTO played () VALUES ();
Query OK, 1 row affected (0.00 sec)

7KH ( )V\QWD[LVXVHGWRUHSUHVHQWWKDWDOOFROXPQVDQGYDOXHVDUHWREHVHWWRWKHLU
GHIDXOWV/HWVILQGRXUQHZURZE\DVNLQJIRUWKHPRVWUHFHQWSOD\HGWLPH
mysql> SELECT * FROM played ORDER BY played DESC LIMIT 1;
+-----------+----------+----------+---------------------+
| artist_id | album_id | track_id | played
|
+-----------+----------+----------+---------------------+

The INSERT Statement | 167

|
0 |
0 |
0 | 2006-08-09 12:20:40 |
+-----------+----------+----------+---------------------+
1 row in set (0.00 sec)

7KHSURFHVVZRUNHGEXWWKHURZGRHVQWPDNHDQ\VHQVH:HOOGLVFXVVGHIDXOWYDOXHV
IXUWKHULQ&KDSWHU
<RXFDQVHWGHIDXOWVDQGVWLOOXVHWKHRULJLQDOINSERTV\QWD[ZLWK0\64/RUODWHU
E\XVLQJWKHDEFAULTNH\ZRUG+HUHVDQH[DPSOHWKDWDGGVDplayedURZ
mysql> INSERT INTO played VALUES (7, 1, 2, DEFAULT);
Query OK, 1 row affected (0.00 sec)

7KHNH\ZRUGDEFAULTWHOOV0\64/WRXVHWKHGHIDXOWYDOXHIRUWKDWFROXPQDQGVRWKH
FXUUHQWGDWHDQGWLPHDUHLQVHUWHGLQRXUH[DPSOH7KHDGYDQWDJHVRIWKLVDSSURDFKDUH
WKDW\RXFDQXVHWKHEXONLQVHUWIHDWXUHZLWKGHIDXOWYDOXHVDQG\RXFDQQHYHUDFFL
GHQWDOO\RPLWDFROXPQ
7KHUHVDQRWKHUDOWHUQDWLYHINSERTV\QWD[,QWKLVDSSURDFK\RXOLVWWKHFROXPQQDPH
DQGYDOXHWRJHWKHUJLYLQJWKHDGYDQWDJHWKDW\RXGRQWKDYHWRPHQWDOO\PDSWKHOLVW
RIYDOXHVWRWKHHDUOLHUOLVWRIFROXPQV+HUHVDQH[DPSOHWKDWDGGVDQHZURZWRWKH
playedWDEOH
mysql> INSERT INTO played
-> SET artist_id = 7, album_id = 1, track_id = 1;
Query OK, 1 row affected (0.00 sec)

7KHV\QWD[UHTXLUHV\RXOLVWDWDEOHQDPHWKHNH\ZRUGSETDQGWKHQFROXPQHTXDOV
YDOXHSDLUVVHSDUDWHGE\FRPPDV&ROXPQVWKDWDUHQWVXSSOLHGDUHVHWWRWKHLUGHIDXOW
YDOXHV7KHGLVDGYDQWDJHVDUHDJDLQWKDW\RXFDQDFFLGHQWDOO\RPLWYDOXHVIRUFROXPQV
DQGWKDW\RXQHHGWRUHPHPEHUDQGW\SHLQFROXPQQDPHV$VLJQLILFDQWDGGLWLRQDO
GLVDGYDQWDJHLVWKDW\RXFDQWXVHWKLVPHWKRGIRUEXONLQVHUWLRQ
<RXFDQDOVRLQVHUWXVLQJYDOXHVUHWXUQHGIURPDTXHU\:HGLVFXVVWKLVLQ&KDSWHU

The DELETE Statement


7KHDELETEVWDWHPHQWLVXVHGWRUHPRYHRQHRUPRUHURZVIURPDGDWDEDVH:HH[SODLQ
VLQJOHWDEOHGHOHWHVKHUHDQGGLVFXVVPXOWLWDEOHGHOHWHVZKLFKUHPRYHGDWDIURPWZR
RUPRUHWDEOHVWKURXJKRQHVWDWHPHQWLQ&KDSWHU
,I\RXZDQWWRWU\RXWWKHVWHSVLQWKLVVHFWLRQRQ\RXU0\64/VHUYHU\RXOOQHHGWR
UHORDG \RXU music GDWDEDVH DIWHUZDUGV VR WKDW \RX FDQ IROORZ WKH H[DPSOHV LQ ODWHU
VHFWLRQV7RGRWKLVIROORZWKHVWHSV\RXXVHGLQ/RDGLQJWKH6DPSOH'DWDEDVHVLQ
&KDSWHUWRORDGLWLQWKHILUVWSODFH

DELETE Basics
7KHVLPSOHVWXVHRIDELETELVWRUHPRYHDOOURZVLQDWDEOH6XSSRVH\RXZDQWWRHPSW\
\RXUplayedWDEOHSHUKDSVEHFDXVHLWVWDNLQJWRRPXFKVSDFHRUEHFDXVH\RXZDQWWR
168 | Chapter 5:Basic SQL

VKDUH\RXU musicGDWDEDVHZLWKVRPHRQHHOVHDQGWKH\GRQWZDQW\RXU playedGDWD


<RXGRWKLVZLWK
mysql> DELETE FROM played;
Query OK, 19 rows affected (0.07 sec)

7KLVUHPRYHVDOOURZVLQFOXGLQJWKRVHZHMXVWDGGHGLQ7KH,16(576WDWHPHQW\RX
FDQVHHWKDWURZVKDYHEHHQDIIHFWHG
7KHDELETEV\QWD[GRHVQWLQFOXGHFROXPQQDPHVVLQFHLWVXVHGWRUHPRYHZKROHURZV
DQG QRW MXVW YDOXHV IURP D URZ 7R UHVHW RU PRGLI\ D YDOXH LQ D URZ \RX XVH WKH
UPDATEVWDWHPHQWGHVFULEHGODWHULQWKLVFKDSWHULQ7KH83'$7(6WDWHPHQW7KH
DELETEVWDWHPHQWGRHVQWUHPRYHWKHWDEOHLWVHOI)RUH[DPSOHKDYLQJGHOHWHGDOOURZV
LQWKHplayedWDEOH\RXFDQVWLOOTXHU\WKHWDEOH
mysql> SELECT * FROM played;
Empty set (0.00 sec)

2IFRXUVH\RXFDQDOVRFRQWLQXHWRH[SORUHLWVVWUXFWXUHXVLQJDESCRIBERUSHOW CREATE
TABLEDQGLQVHUWQHZURZVXVLQJINSERT7RUHPRYHDWDEOH\RXXVHWKHDROPVWDWHPHQW
GHVFULEHGLQ&KDSWHU

Using WHERE, ORDER BY, and LIMIT


,I\RXYHGHOHWHGURZVLQWKHSUHYLRXVVHFWLRQUHORDG\RXU musicGDWDEDVHQRZ<RX
QHHGWKHURZVLQWKHplayedWDEOHUHVWRUHGIRUWKHH[DPSOHVLQWKLVVHFWLRQ
7RUHPRYHRQHRUPRUHURZVEXWQRWDOOURZVLQDWDEOH\RXXVHDWHEREFODXVH7KLV
ZRUNVLQWKHVDPHZD\DVLWGRHVIRUSELECT)RUH[DPSOHVXSSRVH\RXZDQWWRUHPRYH
DOOURZVIURPWKHplayedWDEOHZLWKSOD\HGGDWHVDQGWLPHVHDUOLHUWKDQ$XJXVW
<RXGRWKLVZLWK
mysql> DELETE FROM played WHERE played < "2006-08-15";
Query OK, 8 rows affected (0.00 sec)

7KHUHVXOWLVWKDWWKHHLJKWSOD\HGURZVWKDWPDWFKWKHFULWHULDDUHUHPRYHG1RWHWKDW
WKHGDWHLVHQFORVHGLQTXRWHVDQGWKDWWKHGDWHIRUPDWLV\HDUPRQWKGD\VHSDUDWHG
E\K\SKHQV0\64/VXSSRUWVVHYHUDOGLIIHUHQWZD\VRIVSHFLI\LQJWLPHVDQGGDWHVEXW
VDYHV GDWHV LQ WKLV LQWHUQDWLRQDOO\ IULHQGO\ HDV\WRVRUW IRUPDW LWV DFWXDOO\ DQ ,62
VWDQGDUG 0\64/FDQDOVRUHDVRQDEO\LQWHUSUHWWZRGLJLW\HDUVEXWZHUHFRPPHQG
DJDLQVWXVLQJWKHPUHPHPEHUDOOWKHZRUNUHTXLUHGWRDYRLGWKH<.SUREOHP"
6XSSRVH\RXZDQWWRUHPRYHDQDUWLVWKLVDOEXPVDQGKLVDOEXPWUDFNV)RUH[DPSOH
OHWVUHPRYHHYHU\WKLQJE\0LOHV'DYLV%HJLQE\ILQGLQJRXWWKH artist_idIURPWKH
artistWDEOHZKLFKZHOOXVHWRUHPRYHGDWDIURPDOOIRXUWDEOHV
mysql> SELECT artist_id FROM artist WHERE artist_name = "Miles Davis";
+-----------+
| artist_id |
+-----------+
|
3 |

The DELETE Statement | 169

+-----------+
1 row in set (0.00 sec)

1H[WUHPRYHWKHURZIURPWKHartistWDEOH
mysql> DELETE FROM artist WHERE artist_id = 3;
Query OK, 1 row affected (0.00 sec)

7KHQGRWKHVDPHWKLQJIRUWKHalbumtrackDQGplayedWDEOHV
mysql> DELETE FROM album WHERE artist_id = 3;
Query OK, 2 rows affected (0.01 sec)
mysql> DELETE FROM track WHERE artist_id = 3;
Query OK, 13 rows affected (0.01 sec)
mysql> DELETE FROM played WHERE artist_id = 3;
Query OK, 3 rows affected (0.00 sec)

6LQFHDOOIRXUWDEOHVFDQEHMRLQHGXVLQJWKHartist_idFROXPQ\RXFDQDFFRPSOLVKWKLV
ZKROHGHOHWLRQSURFHVVLQDVLQJOHDELETEVWDWHPHQWZHVKRZ\RXKRZLQ&KDSWHU
<RXFDQXVHWKHORDER BYDQGLIMITFODXVHVZLWKDELETE<RXXVXDOO\GRWKLVZKHQ\RX
ZDQWWROLPLWWKHQXPEHURIURZVGHOHWHGHLWKHUVRWKDWWKHVWDWHPHQWGRHVQWUXQIRU
WRRORQJRUEHFDXVH\RXZDQWWRNHHSDWDEOHWRDVSHFLILFVL]H6XSSRVH\RXU played
WDEOHFRQWDLQVURZVEXW\RXZDQWWRKDYHDWPRVWURZV,QWKLVVLWXDWLRQ
LWPD\PDNHVHQVHWRUHPRYHWKHROGHVWURZVDQG\RXFDQGRWKLVZLWKWKHIROORZLQJ
VWDWHPHQW
mysql> DELETE FROM played ORDER BY played LIMIT 528;
Query OK, 528 rows affected (0.23 sec)

7KHTXHU\VRUWVWKHURZVE\DVFHQGLQJSOD\GDWHDQGWKHQGHOHWHVDWPRVWURZV
VWDUWLQJZLWKWKHROGHVW7\SLFDOO\ZKHQ\RXUHGHOHWLQJ\RXXVH LIMITDQGORDER BY
WRJHWKHULWXVXDOO\GRHVQWPDNHVHQVHWRXVHWKHPVHSDUDWHO\1RWHWKDWVRUWLQJODUJH
QXPEHUVRIHQWULHVRQDILHOGWKDWGRHVQWKDYHDQLQGH[FDQEHTXLWHVORZ:HGLVFXVV
LQGH[HVLQGHWDLOLQ.H\VDQG,QGH[HVLQ&KDSWHU

Removing All Rows with TRUNCATE


,I\RXZDQWWRUHPRYHDOOURZVLQDWDEOHWKHUHVDIDVWHUPHWKRGWKDQUHPRYLQJWKHP
ZLWK DELETE %\ XVLQJ WKH TRUNCATE TABLE VWDWHPHQW 0\64/ WDNHV WKH VKRUWFXW RI
GURSSLQJWKHWDEOHWKDWLVUHPRYLQJWKHWDEOHVWUXFWXUHVDQGWKHQUHFUHDWLQJWKHP
:KHQWKHUHDUHPDQ\URZVLQDWDEOHWKLVLVPXFKIDVWHU
,I\RXZDQWWRUHPRYHWKHGDWDLQWKHplayedWDEOH\RXFDQZULWHWKLV
mysql> TRUNCATE TABLE played;
Query OK, 0 rows affected (0.00 sec)

1RWLFHWKDWWKHQXPEHURIURZVDIIHFWHGLVVKRZQDV]HURWRTXLFNO\GHOHWHDOOWKHGDWD
LQWKHWDEOH0\64/GRHVQWFRXQWWKHQXPEHURIURZVWKDWDUHGHOHWHGVRWKHQXPEHU

170 | Chapter 5:Basic SQL

VKRZQ QRUPDOO\]HUREXWVRPHWLPHVQRQ]HUR GRHVQRWUHIOHFWWKHDFWXDOQXPEHURI


URZVGHOHWHG
7KHTRUNCATE TABLEVWDWHPHQWKDVWZRRWKHUOLPLWDWLRQV
,WVDFWXDOO\LGHQWLFDOWRDELETELI\RXXVH,QQR'%WDEOHV
,WGRHVQRWZRUNZLWKORFNLQJRUWUDQVDFWLRQV
7DEOHW\SHVWUDQVDFWLRQVDQGORFNLQJDUHGLVFXVVHGLQ&KDSWHU,QSUDFWLFHQRQHRI
WKHVHOLPLWDWLRQVDIIHFWPRVWDSSOLFDWLRQVDQG\RXFDQXVHTRUNCATE TABLEWRVSHHGXS
\RXU SURFHVVLQJ 2I FRXUVH LWV QRW FRPPRQ WR GHOHWH ZKROH WDEOHV GXULQJ QRUPDO
RSHUDWLRQ$QH[FHSWLRQLVWHPSRUDU\WDEOHVZKLFKDUHXVHGWRWHPSRUDULO\VWRUHTXHU\
UHVXOWVIRUDSDUWLFXODUXVHUVHVVLRQDQGFDQEHGHOHWHGZLWKRXWORVLQJWKHRULJLQDOGDWD

The UPDATE Statement


7KHUPDATEVWDWHPHQWLVXVHGWRFKDQJHGDWD,QWKLVVHFWLRQZHVKRZ\RXKRZWRXSGDWH
RQHRUPRUHURZVLQDVLQJOHWDEOH0XOWLWDEOHXSGDWHVDUHGLVFXVVHGLQ&KDSWHU
,I\RXYHGHOHWHGURZVIURP\RXUmusicGDWDEDVHUHORDGLWE\IROORZLQJWKHLQVWUXFWLRQV
LQ/RDGLQJWKH6DPSOH'DWDEDVHVLQ&KDSWHU<RXQHHGDFRS\RIWKHXQPRGLILHG
musicGDWDEDVHWRIROORZWKHH[DPSOHVLQWKLVVHFWLRQ

Examples
7KHVLPSOHVWXVHRIWKH UPDATEVWDWHPHQWLVWRFKDQJHDOOURZVLQDWDEOH7KHUHLVQW
PXFKQHHGWRFKDQJHDOOURZVIURPDWDEOHLQWKH musicGDWDEDVHDQ\H[DPSOHLVD
OLWWOHFRQWULYHGEXWOHWVGRLWDQ\ZD\7RFKDQJHWKHDUWLVWQDPHVWRXSSHUFDVH\RX
FDQXVH
mysql> UPDATE artist SET artist_name = UPPER(artist_name);
Query OK, 6 rows affected (0.04 sec)
Rows matched: 6 Changed: 6 Warnings: 0

7KHIXQFWLRQUPPER( )LVD0\64/IXQFWLRQWKDWUHWXUQVWKHXSSHUFDVHYHUVLRQRIWKH
WH[WSDVVHGDVWKHSDUDPHWHUIRUH[DPSOHNew OrderLVUHWXUQHGDVNEW ORDER<RXFDQ
VHHWKDWDOOVL[DUWLVWVDUHPRGLILHGVLQFHVL[URZVDUHUHSRUWHGDVDIIHFWHG7KHIXQFWLRQ
LOWER( )SHUIRUPVWKHUHYHUVHFRQYHUWLQJDOOWKHWH[WWRORZHUFDVH
7KHVHFRQGURZUHSRUWHGE\DQ UPDATEVWDWHPHQWVKRZVWKHRYHUDOOHIIHFWRIWKHVWDWH
PHQW,QRXUH[DPSOH\RXVHH
Rows matched: 6

Changed: 6

Warnings: 0

7KHILUVWFROXPQUHSRUWVWKHQXPEHURIURZVWKDWZHUHUHWULHYHGDVDQVZHUVE\WKH
VWDWHPHQWLQWKLVFDVHVLQFHWKHUHVQRWHERERULIMITFODXVHDOOVL[URZVLQWKHWDEOH
PDWFKWKHTXHU\7KHVHFRQGFROXPQUHSRUWVKRZPDQ\URZVQHHGHGWREHFKDQJHG
DQGWKLVLVDOZD\VHTXDOWRRUOHVVWKDQWKHQXPEHURIURZVWKDWPDWFKLQWKLVH[DPSOH

The UPDATE Statement | 171

VLQFHQRQHRIWKHVWULQJVDUHHQWLUHO\LQXSSHUFDVHDOOVL[URZVDUHFKDQJHG,I\RXUHSHDW
WKHVWDWHPHQW\RXOOVHHDGLIIHUHQWUHVXOW
mysql> UPDATE artist SET artist_name = UPPER(artist_name);
Query OK, 0 rows affected (0.00 sec)
Rows matched: 6 Changed: 0 Warnings: 0

7KLV WLPH VLQFH DOO RI WKH DUWLVWV DUH DOUHDG\ LQ XSSHUFDVH VL[ URZV VWLOO PDWFK WKH
VWDWHPHQWEXWQRQHDUHFKDQJHG1RWHDOVRWKHQXPEHURIURZVFKDQJHGLVDOZD\VHTXDO
WRWKHQXPEHURIURZVDIIHFWHGDVUHSRUWHGRQWKHILUVWOLQHRIWKHRXWSXW
2XUSUHYLRXVH[DPSOHXSGDWHVHDFKYDOXHUHODWLYHWRLWVFXUUHQWYDOXH<RXFDQDOVRVHW
FROXPQVWRDVLQJOHYDOXH)RUH[DPSOHLI\RXZDQWWRVHWDOOplayedGDWHVDQGWLPHVWR
WKHFXUUHQWGDWHDQGWLPH\RXFDQXVH
mysql> UPDATE played SET played = NULL;
Query OK, 11 rows affected (0.00 sec)
Rows matched: 11 Changed: 11 Warnings: 0

<RXOOUHFDOOIURP$OWHUQDWLYH6\QWD[HVWKDWVLQFHWKHGHIDXOWYDOXHRIWKHplayedFRO
XPQLVCURRENT_TIMESTAMPSDVVLQJDNULLYDOXHFDXVHVWKHFXUUHQWGDWHDQGWLPHWREH
VWRUHGLQVWHDG6LQFHDOOURZVPDWFKDQGDOOURZVDUHFKDQJHG DIIHFWHG \RXFDQVHH
WKUHHVLQWKHRXWSXW

Using WHERE, ORDER BY, and LIMIT


2IWHQ\RXGRQWZDQWWRFKDQJHDOOURZVLQDWDEOH,QVWHDG\RXZDQWWRXSGDWHRQH
RUPRUHURZVWKDWPDWFKDFRQGLWLRQ$VZLWK SELECTDQG DELETEWKH WHEREFODXVHLV
XVHGIRUWKHWDVN,QDGGLWLRQLQWKHVDPHZD\DVZLWK DELETE\RXFDQXVH ORDER BY
DQGLIMITWRJHWKHUWRFRQWUROKRZPDQ\URZVDUHXSGDWHGIURPDQRUGHUHGOLVW
/HWVWU\DQH[DPSOHWKDWPRGLILHVRQHURZLQDWDEOH,I\RXEURZVHWKHalbumGDWDEDVH
\RXOOQRWLFHDQLQFRQVLVWHQF\IRUWKHWZRDOEXPVEHJLQQLQJZLWK6XEVWDQFH
mysql> SELECT * FROM album WHERE album_name LIKE
-> "Substance%";
+-----------+----------+-------------------------+
| artist_id | album_id | album_name
|
+-----------+----------+-------------------------+
|
1 |
2 | Substance (Disc 2)
|
|
1 |
6 | Substance 1987 (Disc 1) |
+-----------+----------+-------------------------+
2 rows in set (0.00 sec)

7KH\UHDFWXDOO\SDUWRIWKHVDPHWZR&'VHWDQGWKHILUVWOLVWHGDOEXPLVPLVVLQJWKH
\HDUZKLFKLVSDUWRIWKHWLWOH7RFKDQJHLW\RXXVHDQUPDATEFRPPDQGZLWKD
WHEREFODXVH
mysql> UPDATE album SET album_name = "Substance 1987 (Disc 2)"
-> WHERE artist_id = 1 AND album_id = 2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

172 | Chapter 5:Basic SQL

$VH[SHFWHGRQHURZZDVPDWFKHGDQGRQHURZZDVFKDQJHG
7RFRQWUROKRZPDQ\XSGDWHVRFFXU\RXFDQXVHWKHFRPELQDWLRQRI ORDER BYDQG
LIMIT$VZLWKDELETE\RXZRXOGGRWKLVEHFDXVH\RXHLWKHUZDQWWKHVWDWHPHQWWRUXQ
IRUDFRQWUROOHGDPRXQWRIWLPHRU\RXZDQWWRPRGLI\RQO\VRPHURZV6XSSRVH\RX
ZDQWWRVHWWKHPRVWUHFHQWSOD\HGGDWHVDQGWLPHVWRWKHFXUUHQWGDWHDQGWLPH WKH
GHIDXOW <RXGRWKLVZLWK
mysql> UPDATE played SET played = NULL ORDER BY played DESC LIMIT 10;
Query OK, 10 rows affected (0.00 sec)
Rows matched: 10 Changed: 10 Warnings: 0

<RXFDQVHHWKDWURZVZHUHPDWFKHGDQGZHUHFKDQJHG
7KHSUHYLRXVTXHU\DOVRLOOXVWUDWHVDQLPSRUWDQWDVSHFWRIXSGDWHV$V\RXYHVHHQ
XSGDWHVKDYHWZRSKDVHVDPDWFKLQJSKDVHZKHUHURZVDUHIRXQGWKDWPDWFKWKH
WHEREFODXVHDQGDPRGLILFDWLRQSKDVHZKHUHWKHURZVWKDWQHHGFKDQJLQJDUHXS
GDWHG,QRXUSUHYLRXVH[DPSOHWKHORDER BY playedLVXVHGLQWKHPDWFKLQJSKDVHWR
VRUWWKHGDWDDIWHULWVUHDGIURPWKHWDEOH$IWHUWKDWWKHPRGLILFDWLRQSKDVHSURFHVVHV
WKHILUVWURZVXSGDWLQJWKRVHWKDWQHHGWREHFKDQJHG6LQFH0\64/WKH
LIMITFODXVHFRQWUROVWKHPD[LPXPQXPEHURIURZVWKDWDUHPDWFKHG3ULRUWRWKLVLW
FRQWUROOHGWKHPD[LPXPQXPEHURIURZVWKDWZHUHFKDQJHG7KHQHZLPSOHPHQWDWLRQ
LVEHWWHUXQGHUWKHROGVFKHPH\RXKDGOLWWOHFRQWURORYHUWKHXSGDWHSURFHVVLQJWLPH
ZKHQPDQ\URZVPDWFKHGEXWIHZUHTXLUHGFKDQJHV

Exploring Databases and Tables with SHOW and mysqlshow


:HYHDOUHDG\H[SODLQHGKRZ\RXFDQXVHWKHSHOWFRPPDQGWRREWDLQLQIRUPDWLRQRQ
WKHVWUXFWXUHRIDGDWDEDVHLWVWDEOHVDQGWKHWDEOHFROXPQV,QWKLVVHFWLRQZHOOUHYLHZ
WKHPRVWFRPPRQW\SHVRISHOWVWDWHPHQWZLWKEULHIH[DPSOHVXVLQJWKHmusicGDWDEDVH
7KH mysqlshow FRPPDQGOLQH SURJUDP SHUIRUPV WKH VDPH IXQFWLRQ DV VHYHUDO SHOW
FRPPDQGYDULDQWVEXWZLWKRXWQHHGLQJWRVWDUWWKHPRQLWRU
7KHSHOW DATABASESVWDWHPHQWOLVWVWKHGDWDEDVHV\RXFDQDFFHVV,I\RXYHIROORZHGRXU
VDPSOHGDWDEDVHLQVWDOODWLRQVWHSVLQ&KDSWHULQ/RDGLQJWKH6DPSOH'DWDEDVHV
\RXURXWSXWVKRXOGEHDVIROORZV
mysql> SHOW DATABASES;
+------------+
| Database
|
+------------+
| flight
|
| music
|
| mysql
|
| test
|
| university |
+------------+
5 rows in set (0.01 sec)

Exploring Databases and Tables with SHOW and mysqlshow | 173

7KHVHDUHWKHGDWDEDVHVWKDW\RXFDQDFFHVVZLWKWKH USEFRPPDQGDVZHH[SODLQLQ
&KDSWHU\RXFDQWVHHGDWDEDVHVIRUZKLFK\RXKDYHQRDFFHVVSULYLOHJHVXQOHVV\RX
KDYHWKHJOREDOSHOW DATABASESSULYLOHJH<RXFDQJHWWKHVDPHHIIHFWIURPWKHFRPPDQG
OLQHXVLQJWKHmysqlshowSURJUDP
$ mysqlshow --user=root --password=the_mysql_root_password

<RXFDQDGGD LIKEFODXVHWR SHOW DATABASES7KLVLVXVHIXORQO\LI\RXKDYHPDQ\


GDWDEDVHVDQGZDQWDVKRUWOLVWDVRXWSXW)RUH[DPSOHWRVHHGDWDEDVHVEHJLQQLQJZLWK
mW\SH
mysql> SHOW DATABASES LIKE "m%";
+---------------+
| Database (m%) |
+---------------+
| music
|
| mysql
|
+---------------+
2 rows in set (0.00 sec)

7KHV\QWD[RIWKHLIKEVWDWHPHQWLVLGHQWLFDOWRWKDWLQLWVXVHLQSELECT
7RVHHWKHVWDWHPHQWXVHGWRFUHDWHDGDWDEDVH\RXFDQXVHWKH SHOW CREATE DATA
BASEVWDWHPHQW)RUH[DPSOHWRVHHKRZmusicZDVFUHDWHGW\SH
mysql> SHOW CREATE DATABASE music;
+----------+------------------------------------------------------------------+
| Database | Create Database
|
+----------+------------------------------------------------------------------+
| music
| CREATE DATABASE music /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)

7KLVLVSHUKDSVWKHOHDVWH[FLWLQJSHOWVWDWHPHQWLWRQO\GLVSOD\VWKHVWDWHPHQW
CREATE DATABASE music

7KHUH DUH VRPH DGGLWLRQDO NH\ZRUGV WKDW DUH HQFORVHG EHWZHHQ WKH FRPPHQW V\P
EROV/*!DQG*/
40100 DEFAULT CHARACTER SET latin1

7KHVHLQVWUXFWLRQVFRQWDLQ0\64/VSHFLILFH[WHQVLRQVWRVWDQGDUG64/WKDWDUHXQ
OLNHO\ WR EH XQGHUVWRRG E\ RWKHU GDWDEDVH SURJUDPV $ GDWDEDVH VHUYHU RWKHU WKDQ
0\64/ZRXOGLJQRUHWKLVFRPPHQWWH[WDQGVRWKHV\QWD[LVXVDEOHE\ERWK0\64/
DQGRWKHUGDWDEDVHVHUYHUVRIWZDUH7KHRSWLRQDOQXPEHU40100LQGLFDWHVWKHPLQLPXP
YHUVLRQRI0\64/WKDWFDQSURFHVVWKLVSDUWLFXODULQVWUXFWLRQLQWKLVFDVHYHUVLRQ
ROGHUYHUVLRQVRI0\64/LJQRUHVXFKLQVWUXFWLRQV<RXOOOHDUQDERXWFUHDWLQJ
GDWDEDVHVLQ&KDSWHU
7KHSHOW TABLESVWDWHPHQWOLVWVWKHWDEOHVLQDGDWDEDVH7RFKHFNWKHWDEOHVLQmusic
W\SH

174 | Chapter 5:Basic SQL

mysql> SHOW TABLES FROM music;


+-----------------+
| Tables_in_music |
+-----------------+
| album
|
| artist
|
| played
|
| track
|
+-----------------+
4 rows in set (0.01 sec)

,I\RXYHDOUHDG\VHOHFWHGWKHmusicGDWDEDVHZLWKWKHUSE musicFRPPDQG\RXFDQXVH
WKHVKRUWFXW
mysql> SHOW TABLES;
+-----------------+
| Tables_in_music |
+-----------------+
| album
|
| artist
|
| played
|
| track
|
+-----------------+
4 rows in set (0.01 sec)

<RXFDQJHWDVLPLODUUHVXOWE\VSHFLI\LQJWKHGDWDEDVHQDPHWRWKHmysqlshowSURJUDP
$ mysqlshow --user=root --password=the_mysql_root_password music

$VZLWK SHOW DATABASES\RXFDQWVHHWDEOHVWKDW\RXGRQWKDYHSULYLOHJHVIRU7KLV


PHDQV\RXFDQWVHHWDEOHVLQDGDWDEDVH\RXFDQWDFFHVVHYHQLI\RXKDYHWKH SHOW
DATABASESJOREDOSULYLOHJH
7KH SHOW COLUMNSVWDWHPHQWOLVWVWKHFROXPQVLQDWDEOH)RUH[DPSOHWRFKHFNWKH
FROXPQVRItrackW\SH
mysql> SHOW COLUMNS FROM track;
+------------+--------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| track_id
| int(3)
|
| PRI | 0
|
|
| track_name | char(128)
| YES |
| NULL
|
|
| artist_id | int(5)
|
| PRI | 0
|
|
| album_id
| int(4)
|
| PRI | 0
|
|
| time
| decimal(5,2) | YES |
| NULL
|
|
+------------+--------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

7KHRXWSXWUHSRUWVDOOFROXPQQDPHVWKHLUW\SHVDQGVL]HVZKHWKHUWKH\FDQEHNULL
ZKHWKHUWKH\DUHSDUWRIDNH\WKHLUGHIDXOWYDOXHDQGDQ\H[WUDLQIRUPDWLRQ7\SHV
NH\VNULLYDOXHVDQGGHIDXOWVDUHGLVFXVVHGIXUWKHULQ&KDSWHU,I\RXKDYHQWDOUHDG\
FKRVHQWKHmusicGDWDEDVHZLWKWKHUSEFRPPDQGWKHQ\RXFDQDGGWKHGDWDEDVHQDPH
EHIRUHWKHWDEOHQDPHDVLQmusic.track8QOLNHWKHSUHYLRXVSHOWVWDWHPHQWV\RXFDQ
DOZD\VVHHDOOFROXPQQDPHVLI\RXKDYHDFFHVVWRDWDEOHLWGRHVQWPDWWHUWKDW\RX

Exploring Databases and Tables with SHOW and mysqlshow | 175

GRQW KDYH FHUWDLQ SULYLOHJHV IRU DOO FROXPQV <RX FDQ JHW D VLPLODU UHVXOW E\ XVLQJ
mysqlshowZLWKWKHGDWDEDVHDQGWDEOHQDPH
$ mysqlshow --user=root --password=the_mysql_root_password music track

<RX FDQ VHH WKH VWDWHPHQW XVHG WR FUHDWH D SDUWLFXODU WDEOH XVLQJ WKH SHOW CREATE
TABLEVWDWHPHQWFUHDWLQJWDEOHVLVDVXEMHFWRI&KDSWHU6RPHXVHUVSUHIHUWKLVRXWSXW
WRWKDWRISHOW COLUMNSVLQFHLWKDVWKHIDPLOLDUIRUPDWRID CREATE TABLEVWDWHPHQW
+HUHVDQH[DPSOHIRUWKHtrackWDEOH
mysql> SHOW CREATE TABLE track;
+-------+---------------------------------------------------+
| Table | Create Table
|
+-------+---------------------------------------------------+
| track | CREATE TABLE `track` (
|
|
| `track_id` int(3) NOT NULL default '0',
|
|
| `track_name` char(128) default NULL,
|
|
| `artist_id` int(5) NOT NULL default '0',
|
|
| `album_id` int(4) NOT NULL default '0',
|
|
| `time` decimal(5,2) default NULL,
|
|
| PRIMARY KEY (`artist_id`,`album_id`,`track_id`) |
|
| ) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
+-------+---------------------------------------------------+

:HYHUHIRUPDWWHGWKHRXWSXWVOLJKWO\VRLWILWVEHWWHULQWKHERRN

Exercises
$OOH[HUFLVHVKHUHFRQFHUQWKHmusicGDWDEDVH<RXOOILQGWKHWDEOHVWUXFWXUHVLQ7KH
0XVLF'DWDEDVHDUHDXVHIXOUHIHUHQFHRU\RXFDQSUDFWLFHXVLQJWKH SHOWVWDWHPHQW
DV\RXZRUN\RXUZD\WKURXJKWKHWDVNV
 8VHRQHRUPRUHSELECTVWDWHPHQWVWRILQGRXWKRZPDQ\WUDFNVDUHRQ1HZ2UGHUV
%URWKHUKRRGDOEXP
 8VLQJDMRLQOLVWWKHDOEXPVWKDWZHRZQE\WKHEDQG1HZ2UGHU
 :LWK INSERT VWDWHPHQWV DGG WKH DUWLVW Leftfield WR WKH GDWDEDVH )RU WKLV QHZ
DUWLVWDGGWKHDOEXPLeftismWKDWKDVWKHIROORZLQJWUDFNV
D Release the Pressure 7LPH
E Afro-Melt 7LPH
F Melt 7LPH
G Song of Life 7LPH
H Original 7LPH
I Black Flute 7LPH
J Space Shanty 7LPH
K Inspection Check One 7LPH
L Storm 3000 7LPH
176 | Chapter 5:Basic SQL

M Open Up 7LPH


N 21st Century Poem 7LPH
O Bonus Track 7LPH
 +RZORQJLQPLQXWHVLVWKHLeftismDOEXP\RXDGGHGLQ4XHVWLRQ"+LQWXVHWKH
SUM( )DJJUHJDWHIXQFWLRQ
 &KDQJHWKHWLPHIRUWKHOriginalWUDFNRQWKHLeftismDOEXPWR
 5HPRYHWKHBonus TrackIURPWKHLeftismDOEXP

Exercises | 177

CHAPTER 6

Working with Database Structures

7KLVFKDSWHUVKRZV\RXKRZWRFUHDWH\RXURZQGDWDEDVHVDGGDQGUHPRYHVWUXFWXUHV
VXFKDVWDEOHVDQGLQGH[HVDQGPDNHFKRLFHVDERXWFROXPQW\SHVLQ\RXUWDEOHV,W
IRFXVHVRQWKHV\QWD[DQGIHDWXUHVRI64/DQGQRWWKHVHPDQWLFVRIFRQFHLYLQJVSHF
LI\LQJDQGUHILQLQJDGDWDEDVHGHVLJQ\RXOOILQGDQLQWURGXFWRU\GHVFULSWLRQRIGDWD
EDVHGHVLJQWHFKQLTXHVLQ&KDSWHU7RZRUNWKURXJKWKLVFKDSWHU\RXQHHGWRXQ
GHUVWDQGKRZWRZRUNZLWKDQH[LVWLQJGDWDEDVHDQGLWVWDEOHVDVGLVFXVVHGLQ&KDS
WHU
7KLVFKDSWHUOLVWVWKHVWUXFWXUHVLQWKHVDPSOHPXVLFGDWDEDVHXVHGLQWKLVERRNGHWDLO
RQKRZWRORDGWKHGDWDEDVHLVSUHVHQWHGLQ&KDSWHU,I\RXYHIROORZHGWKRVHLQ
VWUXFWLRQV \RXOO DOUHDG\ KDYH WKH GDWDEDVH DYDLODEOH DQG NQRZ KRZ WR UHVWRUH WKH
GDWDEDVHDIWHU\RXYHPRGLILHGLWVVWUXFWXUHV
:KHQ\RXILQLVKWKLVFKDSWHU\RXOOKDYHDOOWKHEDVLFVUHTXLUHGWRFUHDWHPRGLI\DQG
GHOHWH GDWDEDVH VWUXFWXUHV 7RJHWKHU ZLWK WKH WHFKQLTXHV \RX OHDUQHG LQ &KDSWHU 
\RXOOKDYHWKHVNLOOVWRFDUU\RXWDZLGHUDQJHRIEDVLFRSHUDWLRQV&KDSWHUVDQG
FRYHUVNLOOVWKDWDOORZ\RXWRGRPRUHDGYDQFHGRSHUDWLRQVZLWK0\64/

Creating and Using Databases


:KHQ\RXYHILQLVKHGGHVLJQLQJDGDWDEDVHWKHILUVWSUDFWLFDOVWHSWRWDNHZLWK0\64/
LVWRFUHDWHLW<RXGRWKLVZLWKWKHCREATE DATABASEVWDWHPHQW6XSSRVH\RXZDQWWR
FUHDWHDGDWDEDVHZLWKWKHQDPHlucy+HUHVWKHVWDWHPHQW\RXGW\SHLQWKHPRQLWRU
mysql> CREATE DATABASE lucy;
Query OK, 1 row affected (0.10 sec)

:HDVVXPHKHUHWKDW\RXNQRZKRZWRFRQQHFWWRDQGXVHWKHPRQLWRUDVGHVFULEHG
LQ&KDSWHU:HDOVRDVVXPHWKDW\RXUHDEOHWRFRQQHFWDVWKHrootXVHURUDVDQRWKHU
XVHUZKRFDQFUHDWHGHOHWHDQGPRGLI\VWUXFWXUHV \RXOOILQGDGHWDLOHGGLVFXVVLRQRQ
XVHUSULYLOHJHVLQ&KDSWHU 1RWHWKDWZKHQ\RXFUHDWHWKHGDWDEDVH0\64/VD\VWKDW
RQHURZZDVDIIHFWHG7KLVLVQWLQIDFWDQRUPDOURZLQDQ\VSHFLILFGDWDEDVHEXWD
QHZHQWU\DGGHGWRWKHOLVWWKDW\RXVHHZLWKSHOW DATABASES
179

%HKLQGWKHVFHQHV0\64/FUHDWHVDQHZGLUHFWRU\XQGHUWKHGDWDGLUHFWRU\IRUWKHQHZ
GDWDEDVHDQGVWRUHVWKHWH[WILOHGERSWWKDWOLVWVWKHGDWDEDVHRSWLRQVIRUH[DPSOHWKH
ILOHPLJKWFRQWDLQ
default-character-set=latin1
default-collation=latin1_swedish_ci

7KHVHSDUWLFXODUWZROLQHVVSHFLI\WKHGHIDXOWFKDUDFWHUVHWDQGFROODWLRQRIWKHQHZ
GDWDEDVH:HOOORRNDWZKDWWKHVHPHDQODWHUEXW\RXJHQHUDOO\ZRQWQHHGWRNQRZ
PXFKDERXWWKHGERSWILOHRUDFFHVVLWGLUHFWO\
2QFH\RXYHFUHDWHGWKHGDWDEDVHWKHQH[WVWHSLVWRXVHLWWKDWLVFKRRVHLWDVWKH
GDWDEDVH\RXUHZRUNLQJZLWK<RXGRWKLVZLWKWKH0\64/FRPPDQG
mysql> USE lucy;
Database changed

$VGLVFXVVHGSUHYLRXVO\LQ&KDSWHUWKLVFRPPDQGPXVWEHHQWHUHGRQRQHOLQHDQG
QHHG QRW EH WHUPLQDWHG ZLWK D VHPLFRORQ WKRXJK ZH XVXDOO\ GR VR DXWRPDWLFDOO\
WKURXJKKDELW2QFH\RXYHXVHGWKHGDWDEDVH\RXFDQVWDUWFUHDWLQJWDEOHVLQGH[HV
DQGRWKHUVWUXFWXUHVXVLQJWKHVWHSVGLVFXVVHGQH[WLQ&UHDWLQJ7DEOHV
%HIRUHZHPRYHRQWRFUHDWLQJRWKHUVWUXFWXUHVOHWVGLVFXVVDIHZIHDWXUHVDQGOLPLWD
WLRQVRIFUHDWLQJGDWDEDVHV)LUVWOHWVVHHZKDWKDSSHQVLI\RXFUHDWHDGDWDEDVHWKDW
DOUHDG\H[LVWV
mysql> CREATE DATABASE lucy;
ERROR 1007 (HY000): Can't create database 'lucy'; database exists

<RXFDQDYRLGWKLVHUURUE\DGGLQJWKHIF NOT EXISTSNH\ZRUGSKUDVHWRWKHVWDWHPHQW


mysql> CREATE DATABASE IF NOT EXISTS lucy;
Query OK, 0 rows affected (0.00 sec)

<RXFDQVHHWKDW0\64/GLGQWFRPSODLQEXWLWGLGQWGRDQ\WKLQJHLWKHUWKH0 rows
affectedPHVVDJHLQGLFDWHVWKDWQRGDWDZDVFKDQJHG7KLVDGGLWLRQLVXVHIXOZKHQ
\RXUHDGGLQJ64/VWDWHPHQWVWRDVFULSWLWSUHYHQWVWKHVFULSWIURPDERUWLQJRQHUURU
/HWVGLVFXVVKRZWRFKRRVHGDWDEDVHQDPHVDQGWKHXVHRIFKDUDFWHUFDVH'DWDEDVH
QDPHVGHILQHSK\VLFDOGLUHFWRU\ RUIROGHU QDPHVRQGLVN2QVRPHRSHUDWLQJV\VWHPV
GLUHFWRU\QDPHVDUHFDVHVHQVLWLYHRQRWKHUVFDVHGRHVQWPDWWHU)RUH[DPSOH8QL[
OLNHV\VWHPVVXFKDV/LQX[DQG0DF26;DUHW\SLFDOO\FDVHVHQVLWLYHZKLOH:LQGRZV
LVQW7KHUHVXOWLVWKDWGDWDEDVHQDPHVKDYHWKHVDPHUHVWULFWLRQVZKHQFDVHPDWWHUV
WRWKHRSHUDWLQJV\VWHPLWPDWWHUVWR0\64/)RUH[DPSOHRQD/LQX[PDFKLQHLUCY
lucyDQGLucyDUHGLIIHUHQWGDWDEDVHQDPHVRQ:LQGRZVWKH\UHIHUWRMXVWRQHGDWD
EDVH8VLQJLQFRUUHFWFDSLWDOL]DWLRQXQGHU/LQX[RU0DF26;ZLOOFDXVH0\64/WR
FRPSODLQ
mysql> select artIst.Artist_id from ARTist;
ERROR 1146 (42S02): Table 'music.ARTist' doesn't exist

180 | Chapter 6:Working with Database Structures

EXWXQGHU:LQGRZVWKLVZLOOQRUPDOO\ZRUN7RPDNH\RXU64/PDFKLQHLQGHSHQG
HQWZHUHFRPPHQGWKDW\RXFRQVLVWHQWO\XVHORZHUFDVHQDPHVIRUGDWDEDVHV DQGIRU
WDEOHVFROXPQVDOLDVHVDQGLQGH[HV 
7KHUHDUHRWKHUUHVWULFWLRQVRQGDWDEDVHQDPHV7KH\FDQEHDWPRVWFKDUDFWHUVLQ
OHQJWK<RXDOVRVKRXOGQWXVH0\64/UHVHUYHGZRUGVVXFKDVSELECTFROMDQGUSE
DVQDPHVIRUVWUXFWXUHVWKHVHFDQFRQIXVHWKH0\64/SDUVHUPDNLQJLWLPSRVVLEOH
WRLQWHUSUHWWKHPHDQLQJRI\RXUVWDWHPHQWV7KHUHVDZD\DURXQGWKLVSUREOHP\RX
FDQHQFORVHWKHUHVHUYHGZRUGZLWKWKHEDFNWLFNV\PERO RQHLWKHUVLGHEXWLWVPRUH
WURXEOHUHPHPEHULQJWRGRVRWKDQLWVZRUWK,QDGGLWLRQ\RXFDQWXVHVHOHFWHGFKDU
DFWHUVLQWKHQDPHVVSHFLILFDOO\\RXFDQWXVHWKHIRUZDUGVODVKEDFNZDUGVODVKVHP
LFRORQDQGSHULRGFKDUDFWHUVDQGDGDWDEDVHQDPHFDQWHQGLQZKLWHVSDFH$JDLQWKH
XVH RI WKHVH FKDUDFWHUV FRQIXVHV WKH 0\64/ SDUVHU DQG FDQ UHVXOW LQ XQSUHGLFWDEOH
EHKDYLRU)RUH[DPSOHKHUHVZKDWKDSSHQVZKHQ\RXLQVHUWDVHPLFRORQLQWRDGDWD
EDVHQDPH
mysql> CREATE DATABASE IF NOT EXISTS lu;cy;
Query OK, 1 row affected (0.00 sec)
ERROR 1064 (42000): You have an error in your SQL syntax. Check the manual
that corresponds to your MySQL server version for the right syntax to use
near 'cy' at line 1

6LQFHPRUHWKDQRQH64/VWDWHPHQWFDQEHRQDVLQJOHOLQHWKHUHVXOWLVWKDWDGDWDEDVH
luLVFUHDWHGDQGWKHQDQHUURULVJHQHUDWHGE\WKHYHU\VKRUWXQH[SHFWHG64/VWDWH
PHQWcy;

Creating Tables
7KLVVHFWLRQFRYHUVWRSLFVRQWDEOHVWUXFWXUHV:HVKRZ\RXKRZWR

&UHDWHWDEOHVWKURXJKLQWURGXFWRU\H[DPSOHV
&KRRVHQDPHVIRUWDEOHVDQGWDEOHUHODWHGVWUXFWXUHV
8QGHUVWDQGDQGFKRRVHFROXPQW\SHV
8QGHUVWDQGDQGFKRRVHNH\VDQGLQGH[HV
8VHWKHSURSULHWDU\0\64/AUTO_INCREMENTIHDWXUH

:KHQ\RXILQLVKWKLVVHFWLRQ\RXOOKDYHFRPSOHWHGDOORIWKHEDVLFPDWHULDORQFUHDWLQJ
GDWDEDVHVWUXFWXUHVWKHUHPDLQGHURIWKLVFKDSWHUFRYHUVWKHVDPSOH musicGDWDEDVH
XVHGLQWKHERRNDQGKRZWRDOWHUDQGUHPRYHH[LVWLQJVWUXFWXUHV

Basics
)RU RXU H[DPSOHV LQ WKLV VHFWLRQ ZHOO DVVXPH WKDW WKH GDWDEDVH music KDVQW EHHQ
FUHDWHG,I\RXZDQWWRIROORZWKHH[DPSOHVDQG\RXKDYHDOUHDG\ORDGHGWKHGDWDEDVH
\RXFDQGURSLWIRUWKLVVHFWLRQDQGUHORDGLWODWHUGURSSLQJLWUHPRYHVWKHGDWDEDVH

Creating Tables | 181

WDEOHVDQGDOORIWKHGDWDEXWWKHRULJLQDOLVHDV\WRUHVWRUHE\IROORZLQJWKHVWHSVLQ
&KDSWHU+HUHVKRZ\RXGURSLWWHPSRUDULO\
mysql> DROP DATABASE music;
Query OK, 4 rows affected (0.06 sec)

7KH DROPVWDWHPHQWLVGLVFXVVHGIXUWKHUDWWKHHQGRIWKLVFKDSWHULQ'HOHWLQJ6WUXF
WXUHV
7REHJLQFUHDWHWKHGDWDEDVHmusicXVLQJWKHVWDWHPHQW
mysql> CREATE DATABASE music;
Query OK, 1 row affected (0.00 sec)

7KHQVHOHFWWKHGDWDEDVHZLWK
mysql> USE music;
Database changed

:HUHQRZUHDG\WREHJLQFUHDWLQJWKHWDEOHVWKDWOOKROGRXUGDWD/HWVFUHDWHDWDEOH
WRKROGDUWLVWGHWDLOV+HUHVWKHVWDWHPHQWWKDWZHXVH
mysql>
->
->
->
->

CREATE TABLE artist (


artist_id SMALLINT(5) NOT NULL DEFAULT 0,
artist_name CHAR(128) DEFAULT NULL,
PRIMARY KEY (artist_id)
);

Query OK, 0 rows affected (0.06 sec)

'RQWSDQLFHYHQWKRXJK0\64/UHSRUWVWKDW]HURURZVZHUHDIIHFWHGLWVGHILQLWHO\
FUHDWHGWKHWDEOH
mysql> SHOW TABLES;
+-----------------+
| Tables_in_music |
+-----------------+
| artist
|
+-----------------+
1 row in set (0.00 sec)

/HWVFRQVLGHUDOOWKLVLQGHWDLO7KHCREATE TABLEVWDWHPHQWKDVWKUHHPDMRUVHFWLRQV
 7KHCREATE TABLEVWDWHPHQWZKLFKLVIROORZHGE\WKHWDEOHQDPHWRFUHDWH,QWKLV
H[DPSOHLWVartist
 $OLVWRIRQHRUPRUHFROXPQVWRDGGWRWKHWDEOH,QWKLVH[DPSOHZHYHDGGHG
WZR artist_id SMALLINT(5) NOT NULL DEFAULT 0 DQG artist_name CHAR(128)
default NULL:HOOGLVFXVVWKHVHLQDPRPHQW
 2SWLRQDONH\GHILQLWLRQV,QWKLVH[DPSOHZHYHGHILQHGDVLQJOHNH\PRIMARY KEY
(artist_id):HOOGLVFXVVNH\VDQGLQGH[HVLQGHWDLOODWHULQWKLVVHFWLRQ
1RWLFHWKDWWKHCREATE TABLEFRPSRQHQWLVIROORZHGE\DQRSHQLQJSDUHQWKHVLVWKDWV
PDWFKHGE\DFORVLQJSDUHQWKHVLVDWWKHHQGRIWKHVWDWHPHQW1RWLFHDOVRWKDWWKHRWKHU

182 | Chapter 6:Working with Database Structures

FRPSRQHQWVDUHVHSDUDWHGE\FRPPDV7KHUHDUHRWKHUHOHPHQWVWKDW\RXFDQDGGWRD
CREATE TABLEVWDWHPHQWDQGZHOOGLVFXVVVRPHLQDPRPHQW
/HWVGLVFXVVWKHFROXPQVSHFLILFDWLRQV7KHEDVLFV\QWD[LVDVIROORZVname type [NOT
NULL | NULL] [DEFAULT value]7KHnameILHOGLVWKHFROXPQQDPHDQGLWKDVWKHVDPH
OLPLWDWLRQVDVGDWDEDVHQDPHVDVGLVFXVVHGLQWKHSUHYLRXVVHFWLRQ,WFDQEHDWPRVW
FKDUDFWHUVLQOHQJWKEDFNZDUGDQGIRUZDUGVODVKHVDUHQWDOORZHGSHULRGVDUHQW
DOORZHGLWFDQWHQGLQZKLWHVSDFHDQGFDVHVHQVLWLYLW\LVGHSHQGHQWRQWKHXQGHUO\LQJ
RSHUDWLQJV\VWHP7KHtypeGHILQHVKRZDQGZKDWLVVWRUHGLQWKHFROXPQIRUH[DPSOH
ZHYHVHHQWKDWLWFDQEHVHWWRCHARIRUVWULQJVSMALLINTIRUQXPEHUVRUTIMESTAMPIRU
DGDWHDQGWLPH
,I\RXVSHFLI\NOT NULLDURZLVQWYDOLGZLWKRXWDYDOXHIRUWKHFROXPQLI\RXVSHFLI\
NULLRURPLWWKHFODXVHDURZFDQH[LVWZLWKRXWDYDOXHIRUWKHFROXPQ,I\RXVSHFLI\
DvalueZLWKWKH DEFAULTFODXVHLWOOEHXVHGWRSRSXODWHWKHFROXPQZKHQ\RXGRQW
RWKHUZLVHSURYLGHGDWDWKLVLVSDUWLFXODUO\XVHIXOZKHQ\RXIUHTXHQWO\UHXVHDGHIDXOW
YDOXH VXFK DV D FRXQWU\ QDPH 7KH value PXVW EH D FRQVWDQW VXFK DV 0 "cat" RU
20060812045623 H[FHSWLIWKHFROXPQLVRIWKHW\SHTIMESTAMP7\SHVDUHGLVFXVVHGLQ
GHWDLOODWHULQWKLVVHFWLRQ
7KH NOT NULLDQG DEFAULTIHDWXUHVFDQEHXVHGWRJHWKHU,I\RXVSHFLI\ NOT NULLDQG
DGGDDEFAULTYDOXHWKHGHIDXOWLVXVHGZKHQ\RXGRQWSURYLGHDYDOXHIRUWKHFROXPQ
6RPHWLPHVWKLVZRUNVILQH
mysql> INSERT INTO artist SET artist_name = "Duran Duran";
Query OK, 1 row affected (0.05 sec)

$QGVRPHWLPHVLWGRHVQW
mysql> INSERT INTO artist SET artist_name = "Bob The Builder";
ERROR 1062 (23000): Duplicate entry '0' for key 1

:KHWKHULWZRUNVRUQRWLVGHSHQGHQWRQWKHXQGHUO\LQJFRQVWUDLQWVDQGFRQGLWLRQVRI
WKHGDWDEDVHLQWKLVH[DPSOHartist_idKDVDGHIDXOWYDOXHRI0EXWLWVDOVRWKHSULPDU\
NH\ +DYLQJ WZR URZV ZLWK WKH VDPH SULPDU\NH\ YDOXH LVQW SHUPLWWHG DQG VR WKH
VHFRQGDWWHPSWWRLQVHUWDURZZLWKQRYDOXHV DQGDUHVXOWLQJSULPDU\NH\YDOXHRI0
IDLOV:HGLVFXVVSULPDU\NH\VLQGHWDLOODWHULQWKLVVHFWLRQ
&ROXPQQDPHVKDYHIHZHUUHVWULFWLRQVWKDQGDWDEDVHDQGWDEOHQDPHV:KDWVPRUH
WKH\UH QRW GHSHQGHQW RQ WKH RSHUDWLQJ V\VWHP WKH QDPHV DUH FDVHLQVHQVLWLYH DQG
SRUWDEOHDFURVVDOOSODWIRUPV$OOFKDUDFWHUVDUHDOORZHGLQFROXPQQDPHVWKRXJKLI
\RXZDQWWHUPLQDWHWKHPZLWKZKLWHVSDFHRULQFOXGHSHULRGV RURWKHUVSHFLDOFKDUDF
WHUVVXFKDVWKHVHPLFRORQ \RXOOQHHGWRHQFORVHWKHQDPHZLWKDEDFNWLFNV\PERO
` RQHLWKHUVLGH:HUHFRPPHQGWKDW\RXFRQVLVWHQWO\FKRRVHORZHUFDVHQDPHVIRU
GHYHORSHUGULYHQFKRLFHV VXFKDVGDWDEDVHDOLDVDQGWDEOHQDPHV DQGDYRLGFKDUDF
WHUV WKDW UHTXLUH \RX WR UHPHPEHU WR XVH EDFNWLFNV :H DOVR UHFRPPHQG EHLQJ GH
VFULSWLYH ZLWK \RXU FKRLFHV name GRHVQW PHDQ PXFK RXWVLGH RI WKH FRQWH[W RI WKH
artistWDEOHEXWartist_nameKDVXQLYHUVDOPHDQLQJDFURVVWKHmusicGDWDEDVH:HOLNH
XVLQJWKHXQGHUVFRUHFKDUDFWHUWRVHSDUDWHZRUGVEXWWKDWVMXVWDPDWWHURIVW\OHDQG
Creating Tables | 183

WDVWH\RXFRXOGXVHXQGHUVFRUHVRUGDVKHVRURPLWWKHZRUGVHSDUDWLQJIRUPDWWLQJ
DOWRJHWKHU$VZLWKGDWDEDVHDQGWDEOHQDPHVWKHORQJHVWFROXPQQDPHLVFKDUDFWHUV
LQOHQJWK

Collation and Character Sets


%HFDXVH QRW HYHU\RQH ZDQWV WR VWRUH (QJOLVK VWULQJV LWV LPSRUWDQW WKDW D GDWDEDVH
VHUYHUEHDEOHWRPDQDJHQRQ(QJOLVKFKDUDFWHUVDQGGLIIHUHQWZD\VRIVRUWLQJFKDUDF
WHUV:KHQ\RXUHFRPSDULQJRUVRUWLQJVWULQJVKRZ0\64/HYDOXDWHVWKHUHVXOWGH
SHQGVRQWKHFKDUDFWHUVHWDQGFROODWLRQXVHG&KDUDFWHUVHWVGHILQHZKDWFKDUDFWHUVFDQ
EHVWRUHGIRUH[DPSOH\RXPD\QHHGWRVWRUHQRQ(QJOLVKFKDUDFWHUVVXFKDVRU$
FROODWLRQGHILQHVKRZVWULQJVDUHRUGHUHGDQGWKHUHDUHGLIIHUHQWFROODWLRQVIRUGLIIHUHQW
ODQJXDJHVIRUH[DPSOHWKHSRVLWLRQRIWKHFKDUDFWHULQWKHDOSKDEHWLVGLIIHUHQWLQ
WZR*HUPDQRUGHULQJVDQGGLIIHUHQWDJDLQLQ6ZHGLVKDQG)LQQLVK
,QRXUSUHYLRXVVWULQJFRPSDULVRQH[DPSOHVZHLJQRUHGWKHFROODWLRQDQGFKDUDFWHU
VHWLVVXHDQGMXVWOHW0\64/XVHLWVGHIDXOWVWKHGHIDXOWFKDUDFWHUVHWLV latin1DQG
WKHGHIDXOWFROODWLRQLV latin1_swedish_ci0\64/FDQEHFRQILJXUHGWRXVHGLIIHUHQW
FKDUDFWHU VHWV DQG FROODWLRQ RUGHUV DW WKH FRQQHFWLRQ GDWDEDVH WDEOH DQG FROXPQ
OHYHOV
<RXFDQOLVWWKHFKDUDFWHUVHWVDYDLODEOHRQ\RXUVHUYHUZLWKWKH SHOW CHARACTER SET
FRPPDQG7KLVVKRZVDVKRUWGHVFULSWLRQIRUHDFKFKDUDFWHUVHWLWVGHIDXOWFROODWLRQ
DQGWKHPD[LPXPQXPEHURIE\WHVXVHGIRUHDFKFKDUDFWHULQWKDWFKDUDFWHUVHW
mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset | Description
| Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5
| Big5 Traditional Chinese
| big5_chinese_ci
| 2
|
| dec8
| DEC West European
| dec8_swedish_ci
| 1
|
| cp850
| DOS West European
| cp850_general_ci
| 1
|
| hp8
| HP West European
| hp8_english_ci
| 1
|
| koi8r
| KOI8-R Relcom Russian
| koi8r_general_ci
| 1
|
| latin1
| cp1252 West European
| latin1_swedish_ci | 1
|
| latin2
| ISO 8859-2 Central European | latin2_general_ci | 1
|
| swe7
| 7bit Swedish
| swe7_swedish_ci
| 1
|
| ascii
| US ASCII
| ascii_general_ci
| 1
|
| ujis
| EUC-JP Japanese
| ujis_japanese_ci
| 3
|
| sjis
| Shift-JIS Japanese
| sjis_japanese_ci
| 2
|
| hebrew
| ISO 8859-8 Hebrew
| hebrew_general_ci | 1
|
| tis620
| TIS620 Thai
| tis620_thai_ci
| 1
|
| euckr
| EUC-KR Korean
| euckr_korean_ci
| 2
|
| koi8u
| KOI8-U Ukrainian
| koi8u_general_ci
| 1
|
| gb2312
| GB2312 Simplified Chinese | gb2312_chinese_ci | 2
|
| greek
| ISO 8859-7 Greek
| greek_general_ci
| 1
|
| cp1250
| Windows Central European
| cp1250_general_ci | 1
|
| gbk
| GBK Simplified Chinese
| gbk_chinese_ci
| 2
|
| latin5
| ISO 8859-9 Turkish
| latin5_turkish_ci | 1
|
| armscii8 | ARMSCII-8 Armenian
| armscii8_general_ci | 1
|
| utf8
| UTF-8 Unicode
| utf8_general_ci
| 3
|

184 | Chapter 6:Working with Database Structures

| ucs2
| UCS-2 Unicode
| ucs2_general_ci
| 2
|
| cp866
| DOS Russian
| cp866_general_ci
| 1
|
| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1
|
| macce
| Mac Central European
| macce_general_ci
| 1
|
| macroman | Mac West European
| macroman_general_ci | 1
|
| cp852
| DOS Central European
| cp852_general_ci
| 1
|
| latin7
| ISO 8859-13 Baltic
| latin7_general_ci | 1
|
| cp1251
| Windows Cyrillic
| cp1251_general_ci | 1
|
| cp1256
| Windows Arabic
| cp1256_general_ci | 1
|
| cp1257
| Windows Baltic
| cp1257_general_ci | 1
|
| binary
| Binary pseudo charset
| binary
| 1
|
| geostd8 | GEOSTD8 Georgian
| geostd8_general_ci | 1
|
| cp932
| SJIS for Windows Japanese | cp932_japanese_ci | 2
|
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3
|
+----------+-----------------------------+---------------------+--------+
36 rows in set (0.30 sec)

)RUH[DPSOHWKH latin1FKDUDFWHUVHWLVDFWXDOO\WKH:LQGRZVFRGHSDJHWKDW
VXSSRUWV :HVW (XURSHDQ ODQJXDJHV 7KH GHIDXOW FROODWLRQ IRU WKLV FKDUDFWHU VHW LV
latin1_swedish_ci ZKLFK IROORZV 6ZHGLVK FRQYHQWLRQV WR VRUW DFFHQWHG FKDUDFWHUV
(QJOLVKLVKDQGOHGDV\RXGH[SHFW 7KLVFROODWLRQLVFDVHLQVHQVLWLYHDVLQGLFDWHGE\
WKHOHWWHUVci)LQDOO\HDFKFKDUDFWHUWDNHVXSRQHE\WH%\FRPSDULVRQLI\RXXVHWKH
ucs2FKDUDFWHUVHWHDFKFKDUDFWHUZRXOGWDNHXSWRWZRE\WHVRIVWRUDJH
6LPLODUO\\RXFDQOLVWWKHFROODWLRQRUGHUVDQGWKHFKDUDFWHUVHWVWKH\DSSO\WR
mysql> SHOW COLLATION;
+----------------------+----------+-----+---------+----------+---------+
| Collation
| Charset | Id | Default | Compiled | Sortlen |
+----------------------+----------+-----+---------+----------+---------+
| big5_chinese_ci
| big5
| 1 | Yes
| Yes
| 1
|
...
| latin1_german1_ci
| latin1 | 5 |
|
| 0
|
| latin1_swedish_ci
| latin1 | 8 | Yes
| Yes
| 1
|
| latin1_danish_ci
| latin1 | 15 |
|
| 0
|
| latin1_german2_ci
| latin1 | 31 |
| Yes
| 2
|
| latin1_bin
| latin1 | 47 |
| Yes
| 1
|
| latin1_general_ci
| latin1 | 48 |
|
| 0
|
| latin1_general_cs
| latin1 | 49 |
|
| 0
|
..
| hebrew_general_ci
| hebrew | 16 | Yes
|
| 0
|
...
| gb2312_chinese_ci
| gb2312 | 24 | Yes
| Yes
| 1
|
...
| utf8_persian_ci
| utf8
| 208 |
| Yes
| 8
|
| utf8_esperanto_ci
| utf8
| 209 |
| Yes
| 8
|
...
| eucjpms_japanese_ci | eucjpms | 97 | Yes
| Yes
| 1
|
| eucjpms_bin
| eucjpms | 98 |
| Yes
| 1
|
+----------------------+----------+-----+---------+----------+---------+
126 rows in set (0.02 sec)

<RXFDQVHHWKHFXUUHQWGHIDXOWVRQ\RXUVHUYHUDVIROORZV

Creating Tables | 185

mysql> SHOW VARIABLES LIKE 'c%';


+--------------------------+----------------------------+
| Variable_name
| Value
|
+--------------------------+----------------------------+
| character_set_client
| latin1
|
| character_set_connection | latin1
|
| character_set_database
| latin1
|
| character_set_filesystem | binary
|
| character_set_results
| latin1
|
| character_set_server
| latin1
|
| character_set_system
| utf8
|
| character_sets_dir
| /usr/share/mysql/charsets/ |
| collation_connection
| latin1_swedish_ci
|
| collation_database
| latin1_swedish_ci
|
| collation_server
| latin1_swedish_ci
|
...
+--------------------------+----------------------------+
14 rows in set (0.00 sec)

:KHQ\RXUHFUHDWLQJDGDWDEDVH\RXFDQVHWWKHGHIDXOWFKDUDFWHUVHWDQGVRUWRUGHU
IRUWKHGDWDEDVHDQGLWVWDEOHV)RUH[DPSOHLI\RXZDQWWRXVHWKHlatin1FKDUDFWHUVHW
DQGWKHlatin1_swedish_cs FDVHVHQVLWLYH FROODWLRQRUGHU\RXZRXOGZULWH
mysql> CREATE DATABASE rose DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_cs;
Query OK, 1 row affected (0.00 sec)

$VZHYHSUHYLRXVO\GLVFXVVHGWKHUHVQRQHHGWRGRWKLVLI\RXYHLQVWDOOHG\RXU0\64/
FRUUHFWO\IRU\RXUODQJXDJHDQGUHJLRQDQGLI\RXUHQRWSODQQLQJRQLQWHUQDWLRQDOL]LQJ
\RXUDSSOLFDWLRQ<RXFDQDOVRFRQWUROWKHFKDUDFWHUVHWDQGFROODWLRQIRULQGLYLGXDO
WDEOHVRUFROXPQVEXWZHZRQWJRLQWRWKHGHWDLORIKRZWRGRWKDWKHUH

Other Features
7KLVVHFWLRQEULHIO\GHVFULEHVRWKHUIHDWXUHVRIWKH0\64/CREATE TABLEVWDWHPHQW,W
LQFOXGHVDQH[DPSOHXVLQJWKH IF NOT EXISTSIHDWXUHDQGDOLVWRIDGYDQFHGIHDWXUHV
DQGZKHUHWRILQGPRUHDERXWWKHPLQWKLVERRN
<RXFDQXVHWKH IF NOT EXISTSNH\ZRUGSKUDVHZKHQFUHDWLQJDWDEOHDQGLWZRUNV
PXFKDVLWGRHVIRUGDWDEDVHV+HUHVDQH[DPSOHWKDWZRQWUHSRUWDQHUURUHYHQZKHQ
WKHartistWDEOHH[LVWV
mysql>
->
->
->
->

CREATE TABLE IF NOT EXISTS artist (


artist_id SMALLINT(5) NOT NULL DEFAULT 0,
artist_name CHAR(128) DEFAULT NULL,
PRIMARY KEY (artist_id)
);

Query OK, 0 rows affected (0.00 sec)

,WVDFWXDOO\KDUGWRWHOOVXFFHVVIURPIDLOXUHKHUH]HURURZVDUHDIIHFWHGZKHWKHURUQRW
WKHWDEOHH[LVWVDQGQRZDUQLQJLVUHSRUWHGZKHQWKHWDEOHGRHVH[LVW

186 | Chapter 6:Working with Database Structures

7KHUHDUHDZLGHUDQJHRIDGGLWLRQDOIHDWXUHV\RXFDQDGGWRDCREATE TABLEVWDWHPHQW
0DQ\RIWKHVHDUHDGYDQFHGDQGDUHQWGLVFXVVHGLQWKLVERRNEXW\RXFDQILQGPRUH
LQIRUPDWLRQ LQ WKH 0\64/ PDQXDO XQGHU WKH KHDGLQJ &5($7( 7$%/( V\QWD[
7KHVHDGGLWLRQDOIHDWXUHVLQFOXGH
7KHAUTO_INCREMENTIHDWXUHIRUQXPHULFFROXPQV
7KLVIHDWXUHDOORZV\RXWRDXWRPDWLFDOO\FUHDWHXQLTXHLGHQWLILHUVIRUDWDEOH:H
GLVFXVVLWLQGHWDLOODWHULQWKLVFKDSWHULQ7KH$872B,1&5(0(17)HDWXUH
&ROXPQFRPPHQWV
<RXFDQDGGDFRPPHQWWRDFROXPQWKLVLVGLVSOD\HGZKHQ\RXXVHWKHSHOW CREATE
TABLEFRPPDQGWKDWZHGLVFXVVODWHULQWKLVVHFWLRQ
)RUHLJQNH\FRQVWUDLQWV
<RXFDQWHOO0\64/WRFKHFNZKHWKHUGDWDLQRQHRUPRUHFROXPQVPDWFKHVGDWD
LQDQRWKHUWDEOH)RUH[DPSOH\RXPLJKWZDQWWRSUHYHQWDQDOEXPIURPEHLQJ
DGGHGWRWKHmusicGDWDEDVHXQOHVVWKHUHVDPDWFKLQJDUWLVWLQWKHartistWDEOH$V
ZHH[SODLQLQ7DEOH7\SHVZHGRQWUHFRPPHQGXVLQJIRUHLJQNH\FRQVWUDLQWV
IRUPRVWDSSOLFDWLRQV7KLVIHDWXUHLVFXUUHQWO\VXSSRUWHGIRURQO\WKH,QQR'%WDEOH
W\SH
&UHDWLQJWHPSRUDU\WDEOHV
,I \RXFUHDWH D WDEOH XVLQJ WKHNH\ZRUGSKUDVH CREATE TEMPORARY TABLELWOOEH
UHPRYHG GURSSHG ZKHQWKHPRQLWRUFRQQHFWLRQLVFORVHG7KLVLVXVHIXOIRUFRS\
LQJDQGUHIRUPDWWLQJGDWDEHFDXVH\RXGRQWKDYHWRUHPHPEHUWRFOHDQXS
$GYDQFHGWDEOHRSWLRQV
<RXFDQFRQWURODZLGHUDQJHRIIHDWXUHVRIWKHWDEOHXVLQJWDEOHRSWLRQV7KHVH
LQFOXGHWKHVWDUWLQJYDOXHRIAUTO_INCREMENTWKHZD\LQGH[HVDQGURZVDUHVWRUHG
DQGRSWLRQVWRRYHUULGHWKHLQIRUPDWLRQWKDWWKH0\64/TXHU\RSWLPL]HUJDWKHUV
IURPWKHWDEOH
&RQWURORYHULQGH[VWUXFWXUHV
6LQFH0\64/IRUVRPHWDEOHW\SHV\RXYHEHHQDEOHWRFRQWUROZKDWW\SHRI
LQWHUQDOVWUXFWXUHVXFKDVD%WUHHRUKDVKWDEOH0\64/XVHVIRULWVLQGH[HV
<RXFDQDOVRWHOO0\64/WKDW\RXZDQWDIXOOWH[WRUVSDWLDOGDWDLQGH[RQDFROXPQ
DOORZLQJVSHFLDOW\SHVRIVHDUFK
<RXFDQFKHFNWKHCREATETABLEVWDWHPHQWIRUDWDEOHXVLQJWKHSHOWCREATETABLEVWDWH
PHQWLQWURGXFHGLQ&KDSWHU7KLVRIWHQVKRZV\RXRXWSXWWKDWLQFOXGHVVRPHRIWKH
DGYDQFHGIHDWXUHVZHYHMXVWGLVFXVVHGWKHRXWSXWUDUHO\PDWFKHVZKDW\RXDFWXDOO\
W\SHGWRFUHDWHWKHWDEOH+HUHVDQH[DPSOHIRUWKHartistWDEOH
mysql> SHOW CREATE TABLE artist;
+--------+------------------------------------------------+
| Table | Create Table
|
+--------+------------------------------------------------+
| artist | CREATE TABLE `artist` (
`artist_id` smallint(5) NOT NULL default '0',
`artist_name` char(128) default NULL,

Creating Tables | 187

PRIMARY KEY (`artist_id`)


) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
+--------+------------------------------------------------+
1 row in set (0.08 sec)

:HYHUHIRUPDWWHGWKHRXWSXWVOLJKWO\WRILWEHWWHULQWKLVERRN<RXOOQRWLFHWKDWWKH
RXWSXWLQFOXGHVFRQWHQWDGGHGE\0\64/WKDWZDVQWLQRXURULJLQDO CREATE TABLE
VWDWHPHQW
7KHQDPHVRIWKHWDEOHDQGFROXPQVDUHHQFORVHGLQEDFNWLFNV7KLVLVQWQHFHVVDU\
EXWLWGRHVDYRLGDQ\SDUVLQJSUREOHPVWKDWFDQRFFXUWKURXJKXVLQJUHVHUYHGZRUGV
DQGVSHFLDOFKDUDFWHUVDVGLVFXVVHGSUHYLRXVO\
$QDGGLWLRQDOGHIDXOW ENGINEFODXVHLVLQFOXGHGZKLFKH[SOLFLWO\VWDWHVWKHWDEOH
W\SH WKDW VKRXOG EH XVHG 7KH VHWWLQJ LQ D GHIDXOW LQVWDOODWLRQ RI 0\64/ LV MyI
SAMVRLWKDVQRHIIHFWLQWKLVH[DPSOH
$QDGGLWLRQDODEFAULT CHARSET=latin1FODXVHLVLQFOXGHGZKLFKWHOOV0\64/ZKDW
FKDUDFWHUVHWLVXVHGE\WKHFROXPQVLQWKHWDEOH$JDLQWKLVKDVQRHIIHFWLQD
GHIDXOW/DWLQFKDUDFWHUVHWEDVHGLQVWDOODWLRQ

Column Types
7KLVVHFWLRQGHVFULEHVWKHFROXPQW\SHV\RXFDQXVHLQ0\64/,WH[SODLQVZKHQHDFK
VKRXOGEHXVHGDQGDQ\OLPLWDWLRQVLWKDV:HYHRUGHUHGWKHFKRLFHVLQWZRVHFWLRQV
ILUVWWKHFRPPRQO\XVHGDQGVHFRQGWKHOHVVIUHTXHQWO\XVHGFKRLFHV6NLSWKHVHFRQG
SDUWLI\RXZDQWWRDQGUHYLVLWLWZKHQRQHRIWKHFRPPRQFKRLFHVGRHVQWILW\RXUQHHGV
LWV FHUWDLQO\ ZRUWK UHYLHZLQJ ZKHQ \RXUH WDFNOLQJ WKH H[HUFLVHV DW WKH HQG RI WKLV
FKDSWHU

Common column types


7KHIROORZLQJDUHWKHVL[FRPPRQO\XVHGFROXPQW\SHVLQ0\64/WDEOHV
INT[(width)] [UNSIGNED] [ZEROFILL]

7KHPRVWFRPPRQO\XVHGQXPHULFW\SH6WRUHVLQWHJHU ZKROHQXPEHU YDOXHVLQ


WKHUDQJHWR,IWKHRSWLRQDO UNSIGNEDNH\ZRUGLV
DGGHGWKHUDQJHLVWR7KHNH\ZRUGINTLVVKRUWIRUINTEGERDQG
WKH\FDQEHXVHGLQWHUFKDQJHDEO\$Q INTFROXPQUHTXLUHVIRXUE\WHVRIVWRUDJH
VSDFH
<RXFDQDOVRLQFOXGHRSWLRQDOwidthDQGZEROFILLDUJXPHQWVWROHIWSDGWKHYDOXHV
ZLWK]HURVXSWRWKHVSHFLILHGOHQJWK7KHPD[LPXP widthLV7KH widthSD
UDPHWHUKDVQRHIIHFWRQZKDWLVVWRUHG,I\RXVWRUHDYDOXHZLGHUWKDQWKHwidth
WKHwidthYDOXHLVLJQRUHG&RQVLGHUWKLVH[DPSOH
mysql> CREATE TABLE numbers (my_number INT(4) ZEROFILL );
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO numbers VALUES(3),(33),(333),(3333),(33333),(333333);

188 | Chapter 6:Working with Database Structures

Query OK, 6 rows affected (0.00 sec)


Records: 6 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM numbers;
+-----------+
| my_number |
+-----------+
| 0003
|
| 0033
|
| 0333
|
| 3333
|
| 33333
|
| 333333
|
+-----------+
6 rows in set (0.00 sec)

<RXFDQVHHWKDWQXPEHUVVKRUWHUWKDQIRXUGLJLWVZLGHDUH]HURSDGGHGWRIRXU
GLJLWVRQFHWKHQXPEHUVDUHORQJHUWKDQIRXUGLJLWVORQJWKH\DUHVKRZQXQDIIHFWHG
E\WKHwidthDQGWKHZEROFILLSDUDPHWHUV
,I\RXXVHZEROFILL0\64/DXWRPDWLFDOO\DGGVUNSIGNEDWRWKHGHFODUDWLRQ VLQFH
]HURILOOLQJPDNHVVHQVHRQO\LQWKHFRQWH[WRISRVLWLYHQXPEHUV 
DECIMAL[(width[,decimals])] [UNSIGNED] [ZEROFILL]

$FRPPRQO\XVHGQXPHULFW\SH6WRUHVDIL[HGSRLQWQXPEHUVXFKDVDVDODU\RU
GLVWDQFHZLWKDWRWDORI widthGLJLWVRIZKLFKVRPHVPDOOHUQXPEHUDUH decimals
WKDW IROORZ D GHFLPDO SRLQW )RU H[DPSOH D FROXPQ GHFODUHG DV price DECI
MAL(4,2)VKRXOGEHXVHGWRVWRUHYDOXHVLQWKHUDQJHWR,I\RXWU\WR
VWRUHDYDOXHWKDWVRXWVLGHWKLVUDQJHLWZLOOEHVWRUHGDVWKHFORVHVWYDOXHLQWKH
DOORZHGUDQJH)RUH[DPSOHZRXOGEHVWRUHGDVDQGZRXOGEH
VWRUHGDV1RWHWKDW0\64/YHUVLRQVEHIRUHZRXOGDOORZDQH[WUDGLJLW
IRUSRVLWLYHYDOXHV QXPEHUVIURPWRFRXOGEHVWRUHG 7KHwidthLV
RSWLRQDODQGDYDOXHRILVDVVXPHGZKHQWKLVLVRPLWWHG7KHPD[LPXPYDOXH
RIwidthLV
7KHQXPEHURI decimalsLVRSWLRQDODQGZKHQRPLWWHGDYDOXHRILVDVVXPHG
WKHPD[LPXPYDOXHRIdecimalsVKRXOGEHWZROHVVWKDQWKHYDOXHRIwidth,I\RXUH
VWRULQJRQO\SRVLWLYHYDOXHVXVHWKHUNSIGNEDNH\ZRUGDVGHVFULEHGIRUINT,I\RX
ZDQW]HURSDGGLQJXVHWKHZEROFILLNH\ZRUGIRUWKHVDPHEHKDYLRUDVGHVFULEHG
IRUINT7KHNH\ZRUGDECIMALKDVWKUHHLGHQWLFDOLQWHUFKDQJHDEOHDOWHUQDWLYHVDEC
NUMERICDQGFIXED
3ULRUWR0\64/YHUVLRQD DECIMALFROXPQZDVVWRUHGDVDVWULQJDQGVR
UHTXLUHGH[DFWO\WKHQXPEHURIE\WHVRIVWRUDJHVSDFHDVWKHOHQJWKRIWKHYDOXH
SOXVXSWRWZRE\WHVIRUDPLQXVVLJQDQGDGHFLPDOSRLQWLIUHTXLUHG %HJLQQLQJ
ZLWKYHUVLRQDELQDU\IRUPDWZDVLQWURGXFHGWKDWXVHVIRXUE\WHVIRUHYHU\
QLQHGLJLWV8QGHUERWKDSSURDFKHVWKHYDOXHUHWULHYHGLVLGHQWLFDOWRWKHYDOXH
VWRUHGWKLVLVQWDOZD\VWKHFDVHZLWKRWKHUW\SHVWKDWFRQWDLQGHFLPDOSRLQWVVXFK
DVWKHFLOATDQGDOUBLEW\SHVGHVFULEHGODWHU

Creating Tables | 189

DATE

6WRUHVDQGGLVSOD\VDGDWHLQWKHIRUPDW YYYY-MM-DDIRUWKHUDQJHWR
'DWHVPXVWDOZD\VEHLQSXWDV\HDUPRQWKDQGGD\WULSOHVEXWWKH
IRUPDWRIWKHLQSXWFDQYDU\DVVKRZQLQWKHIROORZLQJH[DPSOHV
YYYY-MM-DDRUYY-MM-DD
,WVRSWLRQDOZKHWKHU\RXSURYLGHWZRGLJLWRUIRXUGLJLW\HDUV:HVWURQJO\
UHFRPPHQGWKDW\RXXVHWKHIRXUGLJLWYHUVLRQWRDYRLGFRQIXVLRQDERXWWKH
FHQWXU\,QSUDFWLFHLI\RXXVHWKHWZRGLJLWYHUVLRQ\RXOOILQGWKDWWR
DUHLQWHUSUHWHGDVWRDQGWRDUHLQWHUSUHWHGDVWR
YYYY/MM/DDYYYY:MM:DDYY/MM/DDRURWKHUSXQFWXDWHGIRUPDWV
0\64/DOORZVDQ\SXQFWXDWLRQFKDUDFWHUVWRVHSDUDWHWKHFRPSRQHQWVRID
GDWH:HUHFRPPHQGXVLQJGDVKHVDQGDJDLQDYRLGLQJWKHWZRGLJLW\HDUV
YYYY-M-DYYYY-MM-DRUYYYY-M-DD
:KHQ SXQFWXDWLRQ LV XVHG DJDLQ DQ\ SXQFWXDWLRQ FKDUDFWHU LV DOORZHG 
VLQJOHGLJLWGD\VDQGPRQWKVFDQEHVSHFLILHGDVVXFK)RUH[DPSOH)HEUXDU\
FDQEHVSHFLILHGDV2006-2-27KHWZRGLJLW\HDUHTXLYDOHQWLVDYDLODEOH
EXWQRWUHFRPPHQGHG
YYYYMMDDRUYYMMDD
3XQFWXDWLRQFDQEHRPLWWHGLQERWKGDWHVW\OHVEXWWKHGLJLWVHTXHQFHVPXVW
EHVL[RUHLJKWGLJLWVLQOHQJWK
<RXFDQDOVRLQSXWDGDWHE\SURYLGLQJERWKDGDWHDQGWLPHLQWKHIRUPDWVGHVFULEHG
ODWHUIRUDATETIMEDQGTIMESTAMPEXWRQO\WKHGDWHFRPSRQHQWLVVWRUHGLQDDATE
W\SHFROXPQ5HJDUGOHVVRIWKHLQSXWW\SHWKHVWRUDJHDQGGLVSOD\W\SHLVDOZD\V
YYYY-MM-DD7KH]HURGDWH0000-00-00LVDOORZHGLQDOOYHUVLRQVDQGFDQEHXVHGWR
UHSUHVHQWDQXQNQRZQRUGXPP\YDOXH,IDQLQSXWGDWHLVRXWRIUDQJHWKH]HUR
GDWH0000-00-00LVVWRUHG%\GHIDXOWIURP0\64/RQZDUGWKH]HURGDWHLV
VWRUHGZKHQ\RXLQVHUWDQLQYDOLGGDWHVXFKDV 2007-02-313ULRUWRWKDWYHUVLRQ
LQYDOLGGDWHVDUHVWRUHGSURYLGHGWKHPRQWKLVLQWKHUDQJHWRDQGWKHGD\LV
LQWKHUDQJHWR&RQVLGHUWKLVH[DPSOH
mysql> CREATE TABLE testdate (mydate DATE);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO testdate VALUES ('2007/02/0');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO testdate VALUES ('2007/02/1');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO testdate VALUES ('2007/02/31');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO testdate VALUES ('2007/02/100');
Query OK, 1 row affected, 1 warning (0.00 sec)

:LWKDYHUVLRQRI0\64/ROGHUWKDQZHZRXOGKDYH

190 | Chapter 6:Working with Database Structures

mysql> SELECT * FROM testdate;


+------------+
| mydate
|
+------------+
| 2007-02-00 |
| 2007-02-01 |
| 2007-02-31 |
| 0000-00-00 |
+------------+
4 rows in set (0.00 sec)

ZKLOHZLWKYHUVLRQRQZDUGVZHKDYH
mysql> SELECT * FROM testdate;
+------------+
| mydate
|
+------------+
| 2007-02-00 |
| 2007-02-01 |
| 0000-00-00 |
| 0000-00-00 |
+------------+
4 rows in set (0.01 sec)

1RWHDOVRWKDWWKHGDWHLVGLVSOD\HGLQWKHYYYY-MM-DDIRUPDWUHJDUGOHVVRIKRZLW
ZDVLQSXW
TIME

6WRUHVDWLPHLQWKHIRUPDW HHH:MM:SSIRUWKHUDQJH -838:59:59WR 838:59:597KH


YDOXHVWKDWFDQEHVWRUHGDUHRXWVLGHWKHUDQJHRIWKHKRXUFORFNWRDOORZODUJH
GLIIHUHQFHVEHWZHHQWLPHYDOXHV XSWRGD\VKRXUVPLQXWHVDQGVHF
RQGV WREHFRPSXWHGDQGVWRUHG7LPHVPXVWDOZD\VEHLQSXWLQWKHRUGHUGD\V
KRXUVPLQXWHVDQGVHFRQGVXVLQJWKHIROORZLQJIRUPDWV
DD HH:MM:SSHH:MM:SSDD HH:MMHH:MMDD HHRUSS
7KH DDUHSUHVHQWVDRQHGLJLWRUWZRGLJLWYDOXHRIGD\VLQWKHUDQJHWR
7KHDDYDOXHLVVHSDUDWHGIURPWKHKRXUYDOXHHHE\DVSDFHZKLOHWKHRWKHU
FRPSRQHQWVDUHVHSDUDWHGE\DFRORQ1RWHWKDWMM:SSLVQRWDYDOLGFRPELQD
WLRQVLQFHLWFDQQRWEHGLVDPELJXDWHGIURPHH:MM
)RU H[DPSOH LI \RX LQVHUW 2 13:25:59 LQWR D TIME W\SH FROXPQ WKH YDOXH
61:25:59LVVWRUHGVLQFHWKHVXPRIGD\V KRXUV DQGKRXUVLVKRXUV
,I\RXWU\LQVHUWLQJDYDOXHWKDWVRXWRIERXQGVDZDUQLQJLVJHQHUDWHGDQG
WKHYDOXHLVOLPLWHGWRWKHPD[LPXPWLPHDYDLODEOH6LPLODUO\LI\RXWU\LQ
VHUWLQJDQLQFRUUHFWYDOXHDZDUQLQJLVJHQHUDWHGDQGWKHYDOXHLVVHWWR]HUR
<RXFDQXVHWKHSHOW WARNINGSFRPPDQGWRUHSRUWVWKHGHWDLOVRIWKHZDUQLQJ
JHQHUDWHGE\WKHSUHYLRXV64/VWDWHPHQW
/HWVWU\DOOWKHVHRXWLQSUDFWLFH
mysql CREATE TABLE test_time(id SMALLINT, mytime TIME);
Query OK, 0 rows affected (0.00 sec)
mysql INSERT INTO test_time VALUES(1, "2 13:25:59");

Creating Tables | 191

Query OK, 1 row affected (0.00 sec)


mysql INSERT INTO test_time VALUES(2, "35 13:25:59");
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql SHOW WARNINGS;
+---------+------+----------------------------------------------------------+
| Level
| Code | Message
|
+---------+------+----------------------------------------------------------+
| Warning | 1264 | Out of range value adjusted for column 'mytime' at row 1 |
+---------+------+----------------------------------------------------------+
1 row in set (0.00 sec)
mysql INSERT INTO test_time VALUES(3, "-35 13:25:59");
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql INSERT INTO test_time VALUES(4, "35 13:25:69");
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql SHOW WARNINGS;
+---------+------+---------------------------------------------+
| Level
| Code | Message
|
+---------+------+---------------------------------------------+
| Warning | 1265 | Data truncated for column 'mytime' at row 1 |
+---------+------+---------------------------------------------+
1 row in set (0.00 sec)
mysql SELECT * FROM test_time;
+----+------------+
| id | mytime
|
+----+------------+
| 1 | 61:25:59
|
| 2 | 838:59:59 |
| 3 | -838:59:59 |
| 4 | 00:00:00
|
+----+------------+
4 rows in set (0.00 sec)

1RWHKRZWKHRXWRIUDQJHDQGLQYDOLGWLPHVDUHVWRUHG
H:M:SDQGVLQJOHGRXEOHDQGWULSOHGLJLWFRPELQDWLRQV
<RXFDQXVHGLIIHUHQWFRPELQDWLRQVRIGLJLWVZKHQLQVHUWLQJRUXSGDWLQJGDWD
0\64/FRQYHUWVWKHPLQWRWKHLQWHUQDOWLPHIRUPDWDQGGLVSOD\VWKHPFRQ
VLVWHQWO\)RUH[DPSOH 1:1:3LVHTXLYDOHQWWR 01:01:03'LIIHUHQWQXPEHUVRI
GLJLWVFDQEHPL[HGIRUH[DPSOH 1:12:3LVHTXLYDOHQWWR 01:12:03&RQVLGHU
WKHVHH[DPSOHV
mysql> CREATE TABLE mytime (testtime TIME);
Query OK, 0 rows affected (0.12 sec)
mysql> INSERT INTO mytime VALUES
-> ('-1:1:1'), ('1:1:1'),
-> ('1:23:45'), ('123:4:5'),
-> ('123:45:6'), ('-123:45:6');
Query OK, 4 rows affected (0.00 sec)

192 | Chapter 6:Working with Database Structures

Records: 4

Duplicates: 0 Warnings: 0

mysql> SELECT * FROM mytime;


+------------+
| testtime
|
+------------+
| -01:01:01 |
| 01:01:01
|
| 01:23:45
|
| 123:04:05 |
| 123:45:06 |
| -123:45:06 |
+------------+
5 rows in set (0.01 sec)

1RWHWKDWKRXUVDUHVKRZQZLWKWZRGLJLWVIRUYDOXHVZLWKLQWKHUDQJHWR

HHMMSSMMSSDQGSS
3XQFWXDWLRQFDQEHRPLWWHGEXWWKHGLJLWVHTXHQFHVPXVWEHWZRIRXURUVL[
GLJLWVLQOHQJWK1RWHWKDWWKHULJKWPRVWSDLURIGLJLWVLVDOZD\VLQWHUSUHWHGDV
DSS VHFRQGV YDOXHWKHVHFRQGQH[WULJKWPRVWSDLU LISUHVHQW DVMM PLQXWHV 
DQGWKHWKLUGULJKWPRVWSDLU LISUHVHQW DVHH KRXUV 7KHUHVXOWLVWKDWDYDOXH
VXFKDV1222LVLQWHUSUHWHGDVPLQXWHVDQGVHFRQGVQRWKRXUVDQG
PLQXWHV
<RXFDQDOVRLQSXWDWLPHE\SURYLGLQJERWKDGDWHDQGWLPHLQWKHIRUPDWVGHVFULEHG
IRUDATETIMEDQGTIMESTAMPEXWRQO\WKHWLPHFRPSRQHQWLVVWRUHGLQDTIMEW\SH
FROXPQ 5HJDUGOHVV RI WKH LQSXW W\SH WKH VWRUDJH DQG GLVSOD\ W\SH LV DOZD\V
HH:MM:SS7KH]HURWLPH00:00:00FDQEHXVHGWRUHSUHVHQWDQXQNQRZQRUGXPP\
YDOXH,IDQLQSXWGDWHLVLQYDOLGRURXWRIUDQJHWKH]HURWLPH00:00:00LVVWRUHG
7KH TIMEW\SHKDVDQDGGLWLRQDOIUDFWLRQFRPSRQHQWIRUVWRULQJIUDFWLRQVRIVHF
RQGVEXWZKLOHDWLPHYDOXHFDQEHLQSXWZLWKDIUDFWLRQDOFRPSRQHQWLWLVSUHV
HQWO\ WUXQFDWHG EHIRUH VWRUDJH E\ 0\64/ ZHYH WKHUHIRUH RPLWWHG LW IURP RXU
GLVFXVVLRQV
TIMESTAMP

6WRUHVDQGGLVSOD\VDGDWHDQGWLPHSDLULQWKHIRUPDWYYYY-MM-DD HH:MM:SSIRUWKH
UDQJH 1970-01-01 00:00:00 WRVRPHWLPHLQ7KHEHKDYLRURIWKLVW\SHKDV
YDULHGRYHUWKHOLIHRI0\64/ DQGFRQWLQXHVWRGRVR DQGWKLVVHFWLRQGHVFULEHV
RQO\WKHYHUVLRQLPSOHPHQWHGVLQFH0\64/7KHNH\IHDWXUHVRID TIMESTAMP
FROXPQDUHWZRIROG)LUVWLI\RXDVVLJQ NULLWRLWLWVVHWWRWKHFXUUHQWGDWHDQG
WLPH6HFRQGDGHYHORSHUVHOHFWHG TIMESTAMPFROXPQLQDWDEOHFDQEHDXWRPDWL
FDOO\XSGDWHGWRWKHFXUUHQWGDWHDQGWLPHZKHQDURZLVLQVHUWHGRUXSGDWHG<RX
FDQDOZD\VH[SOLFLWO\VHWDFROXPQWRDYDOXH\RXZDQWE\DVVLJQLQJWKDWYDOXHWR
WKH FROXPQ UHJDUGOHVV RI ZKHWKHU LWV WKH DXWRPDWLFDOO\ XSGDWLQJ FROXPQ 7KH
DXWRPDWLFXSGDWHIHDWXUHLVGLVFXVVHGODWHULQWKLVVHFWLRQ$QRQXSGDWLQJQHDU
HTXLYDOHQWLVWKHDATETIMEW\SHGHVFULEHGODWHULQWKLVVHFWLRQ

Creating Tables | 193

7KHYDOXHVWRUHGDOZD\VPDWFKHVWKHWHPSODWHYYYY-MM-DD HH:MM:SSEXWWKHYDOXH
FDQEHSURYLGHGLQDZLGHUDQJHRIIRUPDWV
YYYY-MM-DD HH:MM:SSRUYY-MM-DD HH:MM:SS
7KH GDWH DQG WLPH FRPSRQHQWV IROORZ WKH VDPH UHOD[HG UHVWULFWLRQV DV WKH
DATEDQGTIMEFRPSRQHQWVGHVFULEHGSUHYLRXVO\ KRZHYHUDVRI0\64/
]HUR YDOXHV DUHQW SHUPLWWHG  7KLV LQFOXGHV DOORZDQFH IRU DQ\ SXQFWXDWLRQ
FKDUDFWHUVLQFOXGLQJ XQOLNH TIME IOH[LELOLW\LQWKHSXQFWXDWLRQXVHGLQWKH
WLPHFRPSRQHQW)RUH[DPSOH2005/02/15 12+22+23LVYDOLG
YYYYMMDDHHMMSSRUYYMMDDHHMMSS
3XQFWXDWLRQFDQEHRPLWWHGEXWWKHVWULQJVKRXOGEHHLWKHURUGLJLWVLQ
OHQJWK:HUHFRPPHQGRQO\WKHXQDPELJXRXVGLJLWYHUVLRQIRUWKHUHDVRQV
GLVFXVVHGIRUWKHDATEW\SH<RXFDQVSHFLI\YDOXHVZLWKRWKHUOHQJWKVZLWKRXW
SURYLGLQJVHSDUDWRUVEXWZHGRQWUHFRPPHQGGRLQJVR
/HWVGLVFXVVWKHDXWRPDWLFXSGDWHIHDWXUHLQGHWDLO2QO\RQH TIMESTAMPFROXPQ
SHUWDEOHFDQEHDXWRPDWLFDOO\VHWWRWKHFXUUHQWGDWHDQGWLPHRQLQVHUWRUXSGDWH
<RXFRQWUROWKLVE\IROORZLQJWKHVHVWHSVZKHQFUHDWLQJDWDEOH
 &KRRVHWKHFROXPQ\RXZDQWWREHDXWRPDWLFDOO\XSGDWHG
 ,I\RXKDYHRWKHUTIMESTAMPFROXPQVLQWKHWDEOHVHWWKHRQHVWKDWSUHFHGHWKH
VHOHFWHGFROXPQLQWKHCREATE TABLEVWDWHPHQWWRKDYHDFRQVWDQWGHIDXOW VXFK
DVDEFAULT 0 
 )RUWKHDXWRPDWLFDOO\XSGDWLQJFROXPQGHFLGHZKLFKEHKDYLRU\RXZDQW
D ,I\RXZDQWWKHWLPHVWDPSWREHVHWRQO\ZKHQDQHZURZLVLQVHUWHGLQWR
WKHWDEOHDGG DEFAULT CURRENT_TIMESTAMPWRWKHHQGRIWKHFROXPQGHF
ODUDWLRQ
E ,I\RXGRQWZDQWDGHIDXOWWLPHVWDPSEXWZDQWWKHFXUUHQWWLPHWREHXVHG
ZKHQHYHU WKH GDWD LQ D URZ LV XSGDWHG DGG ON UPDATE CURRENT_TIME
STAMPWRWKHHQGRIWKHFROXPQGHFODUDWLRQ
F ,I\RXZDQWERWKRIWKHDERYHWKDWLV\RXZDQWWKHWLPHVWDPSWREHVHW
WRWKHFXUUHQWWLPHLQHDFKQHZURZRUZKHQHYHUDQH[LVWLQJURZLVPRGL
ILHGDGG DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMPWR
WKHHQGRIWKHFROXPQGHFODUDWLRQ
,I\RXVSHFLI\DEFAULT NULLIRUDTIMESTAMPFROXPQLWZLOOEHLQWHUSUHWHGGLIIHUHQWO\
GHSHQGLQJRQZKHWKHUWKHUHDUHDQ\RWKHUTIMESTAMPFROXPQVEHIRUHLWLQWKHWDEOH
DEFAULT NULLLVKDQGOHGDVDEFAULT CURRENT_TIMESTAMPIRUWKHILUVWWLPHVWDPSFRO
XPQEXWDVDEFAULT 0IRUDQ\VXEVHTXHQWRQHV
&RQVLGHUWKLVH[DPSOH
mysql> CREATE TABLE mytime(id INT NOT NULL,
-> changetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO mytime VALUES(1,''),(2,'2006-07-16 1:2:3'),(3,NULL);
Query OK, 3 rows affected, 2 warnings (0.01 sec)

194 | Chapter 6:Working with Database Structures

Records: 3

Duplicates: 0 Warnings: 2

mysql> SELECT * FROM mytime;


+----+---------------------+
| id | changetime
|
+----+---------------------+
| 1 | 0000-00-00 00:00:00 |
| 2 | 2006-07-16 01:02:03 |
| 3 | 2006-07-16 01:05:24 |
+----+---------------------+
3 rows in set (0.00 sec)

1RWHKRZWKHFXUUHQWWLPHLVVWRUHGZKHQZHDVNWRLQVHUWDNULLYDOXH1RZOHWV
FKDQJHWKHidIRUWKHILUVWURZ
mysql> UPDATE mytime SET id=4 WHERE id=1;
Query OK, 1 row affected (0.08 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM mytime;
+----+---------------------+
| id | changetime
|
+----+---------------------+
| 4 | 2006-07-16 01:05:42 |
| 2 | 2006-07-16 01:02:03 |
| 3 | 2006-07-16 01:05:24 |
+----+---------------------+
3 rows in set (0.00 sec)

$V\RXFDQVHHWKHWLPHVWDPSLVXSGDWHGWRWKHFXUUHQWWLPHVWDPS
7KHUH DUH RWKHU YDULDWLRQV RQ KRZ \RX FDQ FRQWURO ZKLFK FROXPQ XSGDWHV
DXWRPDWLFDOO\EXWLI\RXVWLFNWRWKHSUHYLRXVVWHSV\RXOOJHWWKHEHKDYLRU\RX
ZDQW<RXFDQILQGPRUHH[DPSOHVRIXVLQJWLPHVWDPSVODWHULQ7KH6DPSOH0XVLF
'DWDEDVH
CHAR[(width)]

7KHPRVWFRPPRQO\XVHGVWULQJW\SHCHARVWRUHVDIL[HGOHQJWKVWULQJ VXFKDVD
QDPHDGGUHVVRUFLW\ RIOHQJWK width,ID widthLVQRWSURYLGHG CHAR(1)LVDV
VXPHG7KHPD[LPXPYDOXHRIwidthLV:LWK0\64/YHUVLRQVEHWZHHQ
DQG0\64/DFFHSWVYDOXHVJUHDWHUWKDQDQGVLOHQWO\FKDQJHVWKH CHAR
W\SHWRWKHVPDOOHVWTEXTW\SHWKDWLVVXLWDEOHZHGLVFXVVWKHTEXTW\SHODWHULQWKLV
VHFWLRQ
<RXFDQLQIDFWGHILQHDVSHFLDOCHAR(0) NULLFROXPQWKDWWDNHVXSRQO\RQHELWRI
VWRUDJH7KLVSURYLGHVWZRKDQG\IHDWXUHV)LUVWLWDOORZV\RXWRLQFOXGHDGXPP\
FROXPQLQDWDEOHWKDWGRHVQWGRDQ\WKLQJ ZKLFKPLJKWEHXVHIXODVDSODFHKROGHU
IRUDIXWXUHIHDWXUHRUWREHEDFNZDUGFRPSDWLEOHZLWKDQROGDSSOLFDWLRQ 6HF
RQGLWDOORZV\RXWRVWRUHRQHRIWZRYDOXHV NULLRUWKHHPSW\VWULQJ ''JLYLQJ
\RXYHU\FRPSDFWVWRUDJHRIELQDU\ %RROHDQ YDOXHV7RKHOS\RXXQGHUVWDQGWKLV
EHWWHUOHWVFUHDWHDWDEOHZLWKDCHAR(0)ILHOGDQGDQidILHOGWRKHOSGLIIHUHQWLDWH
EHWZHHQHQWULHV

Creating Tables | 195

mysql> CREATE TABLE bool(id INT, bit CHAR(0) NULL);


Query OK, 0 rows affected (0.02 sec)

1RZOHWVDGGWKUHHYDOXHVDQHPSW\VWULQJ''NULLDQGWKHFKDUDFWHU1
mysql> INSERT INTO bool VALUES (1,''), (2,NULL), (3,'1');
Query OK, 3 rows affected, 1 warning (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 1

7KHVHDOOORRNWKHVDPH
mysql> SELECT * FROM bool;
+----+------+
| id | bit |
+----+------+
| 1 |
|
| 2 |
|
| 3 |
|
+----+------+
3 rows in set (0.00 sec)

+RZHYHURQHLVNULL
mysql> SELECT * FROM bool WHERE bit IS NULL;
+----+------+
| id | bit |
+----+------+
| 2 |
|
+----+------+
1 row in set (0.00 sec)

DQGWKHRWKHUWZRDUHQW
mysql> SELECT * FROM bool WHERE bit IS NOT NULL;
+----+------+
| id | bit |
+----+------+
| 1 |
|
| 3 |
|
+----+------+
2 rows in set (0.01 sec)

,QDOORWKHUFDVHVWKHCHARW\SHWDNHVH[DFWO\WKHQXPEHURIE\WHVLQVWRUDJHVSDFH
DVWKHZLGWKRIWKHFROXPQ DVVXPLQJ\RXUFKRVHQFKDUDFWHUVHWXVHVRQHE\WHSHU
FKDUDFWHU  9DOXHV WKDW DUH OHVV WKDQ width FKDUDFWHUV LQ OHQJWK DUH VWRUHG OHIW
DOLJQHGLQWKHDOORFDWHGVSDFHZLWKVSDFHFKDUDFWHUSDGGLQJRQWKHULJKWVLGH$OO
WUDLOLQJ VSDFHV DUH LJQRUHG ZKHQ UHWULHYLQJ DQG GLVSOD\LQJ YDOXHV DV LQ WKLV
H[DPSOH
mysql> CREATE TABLE show_padding(mystring CHAR(10));
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO show_padding VALUES ('a'),('abc'),('abcde'),('abcdefg
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0

196 | Chapter 6:Working with Database Structures

');

mysql> SELECT * FROM show_padding;


+----------+
| mystring |
+----------+
| a
|
| abc
|
| abcde
|
| abcdefg |
+----------+
4 rows in set (0.01 sec)

$V\RXFDQVHHWKHWUDLOLQJVSDFHVDUHQWVKRZQLQWKHODVWURZ7KH\UHDOVRLJQRUHG
LI\RXWU\WRILQGVWULQJVWKDWKDYHDWUDLOLQJVSDFH
mysql> SELECT * FROM show_padding WHERE mystring LIKE '% ';
Empty set (0.00 sec)

6LQFHWUDLOLQJVSDFHVDUHLJQRUHGQRPDWFKHVDUHUHSRUWHG
1RWHWKDWWKLVKDVDQLQWHUHVWLQJVLGHHIIHFW\RXFDQWGLIIHUHQWLDWHEHWZHHQVWULQJV
RIVSDFHVDORQHWKHVWULQJV " "DQG "
"DUHFRQVLGHUHGWREHWKHVDPHWKLQJ
&RQVHTXHQWO\\RXFDQWXVHRQHYDOXHLQWKHSULPDU\NH\LI\RXYHDOUHDG\JRWWKH
RWKHU&RQVLGHUDQH[DPSOHZHFDQFUHDWHDWDEOHWRVWRUHQDPHVDQGHPDLODG
GUHVVHVZLWKWKHHPDLODGGUHVVDVWKHSULPDU\NH\
mysql> CREATE TABLE contacts (name CHAR(40), email CHAR(40) PRIMARY KEY);
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO contacts VALUES('Sarah', 'sarah@learningmysql.com');
Query OK, 1 row affected (0.01 sec)

6RIDUVRJRRG1RZLIZHGRQWNQRZVRPHRQHVHPDLODGGUHVVZHFDQVWRUHDQ
HPSW\VWULQJ
mysql> INSERT INTO contacts VALUES('Zahra', '');
Query OK, 1 row affected (0.00 sec)

1RWHWKDWDQHPSW\VWULQJLVQRWNULLVR0\64/GRHVQWFRPSODLQKRZHYHUVLQFH
WKHHPDLODGGUHVVLVWKHSULPDU\NH\ZHFDQWVWRUHDQRWKHUHPSW\VWULQJ/HWVWU\
VWRULQJDVLQJOHVSDFH
mysql> INSERT INTO Contacts VALUES('Samaneh', ' ');
ERROR 1062 (23000): Duplicate entry '' for key 1

0\64/FRPSODLQVDERXWDGXSOLFDWHNH\VLQFHWKHVLQJOHVSDFHLVWUHDWHGDVDQ
HPSW\ VWULQJ 7U\LQJ WR LQVHUW WKH VWULQJ "not sure" ZRUNV EXW WKHQ
"not sure " ZLWKDWUDLOLQJVSDFH GRHVQWZRUN
mysql> INSERT INTO Contacts VALUES('Samaneh', 'not sure');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO Contacts VALUES('Sadri', 'not sure ');
ERROR 1062 (23000): Duplicate entry 'not sure' for key 1

/HDGLQJVSDFHVGRQWFDXVHDQ\SUREOHPV

Creating Tables | 197

mysql> INSERT INTO Contacts VALUES('Saleh', ' not sure');


Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO Contacts VALUES('Susan', ' not sure');
Query OK, 1 row affected (0.00 sec)

<RXVKRXOGXVHWKH BLOBRU TEXTW\SHVGHVFULEHGODWHULI\RXGRQWZDQWWKLVEH


KDYLRU
7KDWFRQFOXGHVRXUGLVFXVVLRQRIWKHVL[FRPPRQFROXPQW\SHVXVHGLQ0\64/<RXOO
ILQGH[DPSOHVXVLQJVRPHRIWKHVHW\SHVLQ7KH6DPSOH0XVLF'DWDEDVHODWHULQWKLV
FKDSWHU 7KH UHPDLQGHU RI WKLV VHFWLRQ FRYHUV WKH RWKHU W\SH FKRLFHV DYDLODEOH LQ
0\64/EHJLQQLQJZLWKWKHRWKHUFKRLFHVIRUQXPHULFYDOXHV

Other integer types


,Q&RPPRQFROXPQW\SHVZHVDZWKHINTW\SHIRUVWRULQJLQWHJHUQXPEHUV,QWKLV
VHFWLRQZHOOORRNDWDIHZRWKHULQWHJHUW\SHVWKDW\RXFDQXVH:HUHFRPPHQGWKDW
\RXDOZD\VFKRRVHWKHVPDOOHVWSRVVLEOHW\SHWRVWRUHYDOXHV)RUH[DPSOHLI\RXUH
VWRULQJDJHYDOXHVFKRRVHTINYINTLQVWHDGRIWKHUHJXODUINT6PDOOHUW\SHVUHTXLUHOHVV
VWRUDJHVSDFHWKLVUHGXFHVGLVNDQGPHPRU\UHTXLUHPHQWVDQGVSHHGVXSWKHUHWULHYDO
RIGDWDIURPGLVN,QGHHGFROXPQW\SHWXQLQJLVDNH\VWHSWKDWSURIHVVLRQDOGDWDEDVH
WXQHUVXVHLQRSWLPL]LQJGDWDEDVHDSSOLFDWLRQV
+HUHLVWKHOLVWRIWKHLQWHJHUW\SHVEHVLGHVINTWKDW\RXFDQFKRRVHIURP%HDZDUH
WKDWWKHJHQHUDOLVVXHVGHVFULEHGIRUINTDSSO\WRWKHVHW\SHVDVZHOO
BOOLEAN

$W\SHLQWURGXFHGLQ0\64/WKDWVWRUHVD%RROHDQYDOXHRIIDOVH ]HUR RUWUXH


QRQ]HUR )RUH[DPSOHLWPLJKWEHXVHGWRVWRUHZKHWKHUDSHUVRQLVDOLYH WUXH
RUGHDG IDOVH DFXVWRPHULVDFWLYH WUXH RULQDFWLYH IDOVH RUZKHWKHUDFXVWRPHU
ZDQWVWRUHFHLYHHPDLOV WUXH RUQRW IDOVH 7KH BOOLEANW\SHKDVWKHV\QRQ\PV
BOOLDQG BIT,WLVHTXLYDOHQWWR TINYINT(1)DQGVRUHTXLUHVRQHE\WHRIVWRUDJH
VSDFH\RXFDQDFKLHYHPRUHFRPSDFWRQHELW%RROHDQYDOXHVE\XVLQJCHAR(0)DV
GHVFULEHGSUHYLRXVO\
TINYINT[(width)] [UNSIGNED] [ZEROFILL]

6WRUHV LQWHJHU ZKROH QXPEHU  YDOXHV LQ WKH UDQJH  WR  7KH width
UNSIGNEDDQGZEROFILLRSWLRQVEHKDYHDVIRUINT:KHQUNSIGNEDLVXVHGDFROXPQ
FDQVWRUHYDOXHVLQWKHUDQJHWR$TINYINTFROXPQUHTXLUHVRQHE\WHRIVWRUDJH
VSDFH
SMALLINT[(width)] [UNSIGNED] [ZEROFILL]

6WRUHVLQWHJHU ZKROHQXPEHU YDOXHVLQWKHUDQJHWR7KH width


UNSIGNEDDQGZEROFILLRSWLRQVEHKDYHDVIRUINT:KHQUNSIGNEDLVXVHGDFROXPQ
FDQVWRUHYDOXHVLQWKHUDQJHWR$SMALLINTFROXPQUHTXLUHVWZRE\WHVRI
VWRUDJHVSDFH

198 | Chapter 6:Working with Database Structures

MEDIUMINT[(width)] [UNSIGNED] [ZEROFILL]

6WRUHVLQWHJHU ZKROHQXPEHU YDOXHVLQWKHUDQJHWR7KH


width UNSIGNEDDQG ZEROFILLRSWLRQVEHKDYHDVIRU INT:KHQ UNSIGNEDLVXVHG
DFROXPQFDQVWRUHYDOXHVLQWKHUDQJHWR$ MEDIUMINTFROXPQUH
TXLUHVWKUHHE\WHVRIVWRUDJHVSDFH
BIGINT[(width)] [UNSIGNED] [ZEROFILL]

6WRUHVLQWHJHU ZKROHQXPEHU YDOXHVLQWKHUDQJHWR


7KHwidthUNSIGNEDDQGZEROFILLRSWLRQVEHKDYHDV
IRU INT :KHQ UNSIGNED LV XVHG D FROXPQ FDQ VWRUH YDOXHV LQ WKH UDQJH  WR
 $ BIGINT FROXPQ UHTXLUHV HLJKW E\WHV RI VWRUDJH
VSDFH

Other rational number types


,Q&RPPRQFROXPQW\SHVZHGLVFXVVHGWKHIL[HGSRLQWDECIMALW\SH7KHUHDUHWZR
RWKHUW\SHVWKDWVXSSRUWGHFLPDOSRLQWVDOUBLE DOVRNQRZQDVREAL DQGFLOAT7KH\UH
GHVLJQHGWRVWRUHDSSUR[LPDWHQXPHULFYDOXHVUDWKHUWKDQWKHH[DFWYDOXHVVWRUHGE\
DECIMAL:K\ZRXOG\RXZDQWDSSUR[LPDWHYDOXHV"7KHDQVZHULVWKDWPDQ\QXPEHUV
ZLWKDGHFLPDOSRLQWDUHDSSUR[LPDWLRQVRIUHDOTXDQWLWLHV)RUH[DPSOHVXSSRVH\RX
HDUQSHUDQQXPDQG\RXZDQWWRVWRUHLWDVDPRQWKO\ZDJH:KHQ\RXFRQYHUW
LWWRDSHUPRQWKDPRXQWLWVSOXVDQGUGVFHQWV,I\RXVWRUHWKLVDV
LWVQRWH[DFWHQRXJKWRFRQYHUWWRD\HDUO\ZDJH VLQFHPXOWLSOLHGE\
LV +RZHYHULI\RXVWRUHUGVZLWKHQRXJKGHFLPDOSODFHV
LWVDFORVHUDSSUR[LPDWLRQDQG\RXOOILQGWKDWLWLVDFFXUDWHHQRXJKWRFRUUHFWO\PXO
WLSO\ WR REWDLQ WKH RULJLQDO YDOXH LQ D KLJKSUHFLVLRQ HQYLURQPHQW VXFK DV 0\64/
7KDWVZKHUHDOUBLEDQGFLOATDUHXVHIXOWKH\OHW\RXVWRUHYDOXHVVXFKDVUGVRU
SLZLWKDODUJHQXPEHURIGHFLPDOSODFHVDOORZLQJDFFXUDWHDSSUR[LPDWHUHSUHVHQWD
WLRQVRIH[DFWTXDQWLWLHV
/HWVFRQWLQXHWKHSUHYLRXVH[DPSOHXVLQJDOUBLE6XSSRVH\RXFUHDWHDWDEOHDVIROORZV
mysql> CREATE TABLE wage (monthly DOUBLE);
Query OK, 0 rows affected (0.09 sec)

<RXFDQQRZLQVHUWWKHPRQWKO\ZDJHXVLQJ
mysql> INSERT INTO wage VALUES (50000/12);
Query OK, 1 row affected (0.00 sec)

:KHQ\RXPXOWLSO\LWWRD\HDUO\YDOXH\RXJHWDQDFFXUDWHDSSUR[LPDWLRQ
mysql> SELECT monthly*12 FROM wage;
+------------+
| monthly*12 |
+------------+
|
50000 |
+------------+
1 row in set (0.00 sec)

+HUHDUHWKHGHWDLOVRIWKHDOUBLEDQGFLOATW\SHV
Creating Tables | 199

FLOAT[(width, decimals)] [UNSIGNED] [ZEROFILL] RU FLOAT[(precision)] [UNSIGNED]


[ZEROFILL]

6WRUHV IORDWLQJSRLQW QXPEHUV ,W KDV WZR RSWLRQDO V\QWD[HV WKH ILUVW DOORZV DQ
RSWLRQDOQXPEHURIdecimalsDQGDQRSWLRQDOGLVSOD\widthDQGWKHVHFRQGDOORZV
DQRSWLRQDOprecisionWKDWFRQWUROVWKHDFFXUDF\RIWKHDSSUR[LPDWLRQPHDVXUHG
LQ ELWV :LWKRXW SDUDPHWHUV WKH W\SH VWRUHV VPDOO IRXUE\WH VLQJOHSUHFLVLRQ
IORDWLQJSRLQWYDOXHVXVXDOO\\RXXVHLWZLWKRXWSURYLGLQJDQ\SDUDPHWHUV:KHQ
precisionLVEHWZHHQDQGWKHGHIDXOWEHKDYLRURFFXUV:KHQ precisionLV
EHWZHHQDQGWKHW\SHEHKDYHVDVIRUDOUBLE7KHwidthKDVQRHIIHFWRQZKDW
LVVWRUHGRQO\RQZKDWLVGLVSOD\HG7KHUNSIGNEDDQGZEROFILLRSWLRQVEHKDYHDV
IRUINT
DOUBLE[(width, decimals)] [UNSIGNED] [ZEROFILL]

6WRUHVIORDWLQJSRLQWQXPEHUV,WKDVRQHRSWLRQDOV\QWD[LWDOORZVDQRSWLRQDO
QXPEHURIdecimalsDQGDQRSWLRQDOGLVSOD\width:LWKRXWSDUDPHWHUVWKHW\SH
VWRUHVQRUPDOHLJKWE\WHGRXEOHSUHFLVLRQIORDWLQJSRLQWYDOXHVXVXDOO\\RXXVH
LWZLWKRXWSURYLGLQJDQ\SDUDPHWHUV7KH widthKDVQRHIIHFWRQZKDWLVVWRUHG
RQO\RQZKDWLVGLVSOD\HG7KH UNSIGNEDDQG ZEROFILLRSWLRQVEHKDYHDVIRU INT
7KH DOUBLE W\SH KDV WZR LGHQWLFDO V\QRQ\PV REAL DQG DOUBLE PRECISION 7KH
REALDOWHUQDWLYHFDQEHPDGHWREHKDYHDV FLOATXVLQJDQRQGHIDXOWSDUDPHWHUWR
WKH0\64/VHUYHUEXWWKLVLVQRWGLVFXVVHGKHUH

Other date and time types


:HGLVFXVVHGWKHDATETIMEDQGTIMESTAMPW\SHVLQ&RPPRQFROXPQW\SHV7KHUH
DUHWZRPRUHGDWHDQGWLPHW\SHVYEARIRUVWRULQJRQO\\HDUYDOXHVDQGDATETIMEIRU
VWRULQJ GDWH DQG WLPH FRPELQDWLRQV ZLWKRXW WKH DXWRPDWLFXSGDWH IHDWXUH RI
TIMESTAMP7KHVHZRUNDVIROORZV
YEAR[(digits)]

6WRUHVDWZRRUIRXUGLJLW\HDUGHSHQGLQJRQZKHWKHU2RU4LVSDVVHGDVWKHRS
WLRQDOdigitsSDUDPHWHU:LWKRXWWKHSDUDPHWHUIRXUGLJLWVLVWKHGHIDXOW7KHWZR
GLJLWYHUVLRQVWRUHVYDOXHVIURPWRUHSUHVHQWLQJWRDJDLQZH
FDXWLRQDJDLQVWXVLQJWZRGLJLWGDWHV7KHIRXUGLJLWYHUVLRQVWRUHVYDOXHVLQWKH
UDQJHWRDVZHOODVWKH]HUR\HDU,OOHJDOYDOXHVDUHFRQYHUWHGWR
WKH]HURGDWH<RXFDQLQSXW\HDUYDOXHVDVHLWKHUVWULQJV VXFKDV'2005' RULQWHJHUV
VXFKDV2005 7KHYEARW\SHUHTXLUHVRQHE\WHRIVWRUDJHVSDFH
DATETIME

6WRUHVDQGGLVSOD\VDGDWHDQGWLPHSDLULQWKHIRUPDWYYYY-MM-DD HH:MM:SSIRUWKH
UDQJH 1000-01-01 00:00:00 WR 9999-12-31 23:59:59 $V IRU TIMESTAMP WKH YDOXH
VWRUHG DOZD\V PDWFKHV WKH WHPSODWH YYYY-MM-DD HH:MM:SS EXW WKH YDOXH FDQ EH
LQSXWLQWKHVDPHIRUPDWVOLVWHGIRUWKHTIMESTAMPGHVFULSWLRQ,I\RXDVVLJQRQO\D
GDWHWRDDATETIMEFROXPQWKH]HURWLPH00:00:00LVDVVXPHG,I\RXDVVLJQRQO\D
WLPHWRD DATETIMEFROXPQWKH]HURGDWH 0000-00-00LVDVVXPHG7KLVW\SHGRHV
QRWKDYHWKHDXWRPDWLFXSGDWHIHDWXUHVRITIMESTAMP

200 | Chapter 6:Working with Database Structures

Other string types


7KHUHPDLQLQJW\SHVLQ0\64/DUHYDULDQWVRIWKHVWULQJW\SHKHUHVDOLVWWKDW\RXFDQ
FKRRVHIURPH[FHSWLQJCHARZKLFKZDVGHVFULEHGLQ&RPPRQFROXPQW\SHV
VARCHAR(width)

$FRPPRQO\XVHGVWULQJW\SH6WRUHVYDULDEOHOHQJWKVWULQJV VXFKDVQDPHVDG
GUHVVHVRUFLWLHV XSWRDPD[LPXPwidth7KHPD[LPXPYDOXHRIwidthLV
FKDUDFWHUV
3ULRUWR0\64/YHUVLRQWKHPD[LPXPOHQJWKZDVFKDUDFWHUV7U\LQJWR
VSHFLI\DORQJHUOHQJWKZRXOGFDXVHDQHUURULQYHUVLRQVXSWR%HWZHHQYHU
VLRQV  DQG  WKH VHUYHU ZRXOG VLOHQWO\ FKDQJH WKH FROXPQ W\SH WR WKH
VPDOOHVWTEXTW\SHWKDWZRXOGKROGYDOXHVRIWKDWOHQJWK
$VARCHARW\SHLQFXUVRQHRUWZRH[WUDE\WHVRIRYHUKHDGWRVWRUHWKHOHQJWKRIWKH
VWULQJ GHSHQGLQJ RQ ZKHWKHU WKH VWULQJ LV VKRUWHU WKDQ RU ORQJHU WKDQ 
FKDUDFWHUV
7UDLOLQJVSDFHVDUHUHPRYHGZKHQDYDOXHLVVWRUHG\RXFDQXVHTEXTRUBLOBW\SHV
WRDYRLGWKLVEHKDYLRU
BINARY(width) DQG VARBINARY(width)
$YDLODEOHVLQFH0\64/WKHVHDUHHTXLYDOHQWWR CHARDQGVARCHAREXWDOORZ
\RXWRVWRUHELQDU\VWULQJV%LQDU\VWULQJVKDYHQRFKDUDFWHUVHWDQGVRUWLQJWKHP
LV FDVHVHQVLWLYH 5HDG WKH GHVFULSWLRQV RI CHAR DQG VARCHAR IRU RWKHU GHWDLOV ,I
\RXUHXVLQJD0\64/YHUVLRQHDUOLHUWKDQ\RXFDQFUHDWHWKHVDPHEHKDYLRU
E\DGGLQJWKHNH\ZRUGBINARYDIWHUWKHCHARRUVARCHARGHFODUDWLRQDVLQCHAR(12)
BINARY
BLOB

7KHFRPPRQO\XVHGW\SHIRUVWRULQJODUJHGDWD6WRUHVDYDULDEOHDPRXQWRIGDWD
VXFKDVDQLPDJHYLGHRRURWKHUQRQWH[WILOH XSWRE\WHVLQOHQJWK7KH
GDWDLVWUHDWHGDVELQDU\WKDWLVQRFKDUDFWHUVHWLVDVVXPHGDQGFRPSDULVRQV
DQGVRUWVDUHFDVHVHQVLWLYH7KHUHLVQRWUDLOLQJVSDFHUHPRYDOEHKDYLRUDVIRUWKH
CHARRUVARCHARW\SHV,QDGGLWLRQDDEFAULTFODXVHLVQRWSHUPLWWHGDQG\RXPXVW
WDNHDSUHIL[RIWKHYDOXHZKHQXVLQJLWLQDQLQGH[ WKLVLVGLVFXVVHGLQWKHQH[W
VHFWLRQ 
TEXT

$ FRPPRQO\ XVHG W\SH IRU VWRULQJ ODUJH VWULQJ GDWD REMHFWV 6WRUHV D YDULDEOH
DPRXQWRIGDWD VXFKDVDGRFXPHQWRURWKHUWH[WILOH XSWRE\WHVLQOHQJWK
,WLVLGHQWLFDOWRBLOBH[FHSWWKDWWKHGDWDLVWUHDWHGDVEHORQJLQJWRDFKDUDFWHUVHW
6LQFH0\64/WKHFKDUDFWHUVHWFDQEHVHWIRUHDFKFROXPQDQGSULRUWRWKDW
WKHFKDUDFWHUVHWRIWKHVHUYHUZDVDVVXPHG&RPSDULVRQVDQGVRUWVDUHFDVHLQ
VHQVLWLYH
TINYBLOBDQGTINYTEXT
,GHQWLFDOWRBLOBDQGTEXTUHVSHFWLYHO\H[FHSWWKDWDPD[LPXPRIE\WHVFDQ
EHVWRUHG
Creating Tables | 201

MEDIUMBLOBDQGMEDIUMTEXT
,GHQWLFDOWRBLOBDQGTEXTUHVSHFWLYHO\H[FHSWWKDWDPD[LPXPRIE\WHV

FDQEHVWRUHG
LONGBLOBDQGLONGTEXT
,GHQWLFDOWRBLOBDQGTEXTUHVSHFWLYHO\H[FHSWWKDWDPD[LPXPRIIRXUJLJDE\WHV
RIGDWDFDQEHVWRUHG7KHHIIHFWLYHPD[LPXPFDQYDU\GHSHQGLQJRQWKHPHPRU\
DYDLODEOHRQWKHVHUYHUDQGLWVFRQILJXUDWLRQ
ENUM('value1'[,'value2'[, ...]]

$OLVWRUHQXPHUDWLRQRIVWULQJYDOXHV$FROXPQRIW\SHENUMFDQEHVHWWRDYDOXH
IURPWKHOLVWvalue1value2DQGVRRQXSWRDPD[LPXPRIGLIIHUHQWYDOXHV
:KLOHWKHYDOXHVDUHVWRUHGDQGUHWULHYHGDVVWULQJVZKDWVVWRUHGLQWKHGDWDEDVH
LVDQLQWHJHUUHSUHVHQWDWLRQ7KHHQXPHUDWHGFROXPQFDQFRQWDLQNULL VWRUHGDV
NULL WKHHPSW\VWULQJ'' VWRUHGDV0 RUDQ\RIWKHYDOLGHOHPHQWV VWRUHGDV12
3DQGVRRQ <RXFDQSUHYHQW NULLYDOXHVIURPEHLQJDFFHSWHGE\GHFODULQJWKH
FROXPQDVNOT NULLZKHQFUHDWLQJWKHWDEOH
7KLVW\SHLVDFRPSDFWZD\RIVWRULQJYDOXHVIURPDOLVWRISUHGHILQHGYDOXHVVXFK
DVVWDWHRUFRXQWU\QDPHV&RQVLGHUWKLVH[DPSOHXVLQJIUXLWQDPHVWKHQDPHFDQ
EHDQ\RQHRIWKHSUHGHILQHGYDOXHVAppleOrangeRUPear LQDGGLWLRQWRNULLDQG
WKHHPSW\VWULQJ 
mysql> CREATE TABLE fruits_enum ( fruit_name ENUM('Apple', 'Orange', 'Pear') );
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO fruits_enum VALUES ('Apple');
Query OK, 1 row affected (0.00 sec)

,I\RXWU\LQVHUWLQJDYDOXHWKDWVQRWLQWKHOLVW0\64/ZDUQV\RXWKDWLWGLGQW
VWRUHWKHGDWD\RXDVNHG
mysql> INSERT INTO fruits_enum VALUES ('Banana');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS;
+---------+------+-------------------------------------------------+
| Level
| Code | Message
|
+---------+------+-------------------------------------------------+
| Warning | 1265 | Data truncated for column 'fruit_name' at row 1 |
+---------+------+-------------------------------------------------+
1 row in set (0.00 sec)

6LPLODUO\DOLVWRIVHYHUDODOORZHGYDOXHVLVQWDFFHSWHGHLWKHU
mysql> INSERT INTO fruits_enum VALUES ('Apple,Orange');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS;
+---------+------+-------------------------------------------------+
| Level
| Code | Message
|
+---------+------+-------------------------------------------------+
| Warning | 1265 | Data truncated for column 'fruit_name' at row 1 |

202 | Chapter 6:Working with Database Structures

Você também pode gostar