Вы находитесь на странице: 1из 67

Taller Bases de Datos en MySQL

II Congreso Nacional de Ingenieras


Por: Ing. Jos Jess Snc!e" #aras
$es%s&.sanc!e"'g(ail.co(
)
Tabla de Contenido
).Introd%cci*n............................................................................................................................................+
,.-.$eti/o...................................................................................................................................................+
0.Caractersticas de MySQL......................................................................................................................+
0.)Prestaciones......................................................................................................................................1
0.,Li(itaciones.....................................................................................................................................1
+.2cceso a %n ser/idor MySQL.................................................................................................................3
+.)Conectandose con el ser/idor...........................................................................................................3
+.).)Ser/idores y Clientes................................................................................................................3
+.).,Conectarse y desconectarse......................................................................................................4
+.,Introd%cci*n de Sentencias...............................................................................................................4
+.,.)Sentencias.................................................................................................................................5
+.,.,Co(andos en (lti6les lneas..................................................................................................5
+.,.0Cadenas de caracteres.............................................................................................................)7
+.,.+896resiones y /aria.les..........................................................................................................)7
+.,.1896resiones.............................................................................................................................),
+.0Proceso 6or lotes............................................................................................................................),
+.+:sar .ase de datos..........................................................................................................................)3
+.1Prctica )........................................................................................................................................)5
1.Creaci*n y (ani6%laci*n de ta.las.......................................................................................................);
1.)Crear ta.las.....................................................................................................................................);
1.,Ti6o de datos..................................................................................................................................,0
1.,.)Ti6os de datos n%(ricos.......................................................................................................,0
1.,.,Cadenas de caracteres.............................................................................................................,+
1.,.0#ec!as y !oras.........................................................................................................................,3
1.0Modi&icar Ta.las.............................................................................................................................,3
1.0.)2gregar y eli(inar col%(nas..................................................................................................,3
1.0.,Modi&icar col%(nas................................................................................................................,4
1.+-tras o6ciones................................................................................................................................,5
1.+.)Co6iar ta.las...........................................................................................................................,5
1.+.,Ta.las te(6orales...................................................................................................................,5
3.Cons%ltas...............................................................................................................................................,5
3.)La .ase de datos de(o....................................................................................................................,5
3.,Cons%ltar in&or(aci*n ...................................................................................................................07
3.,.)#%nciones a%9iliares ..............................................................................................................0)
3.0Mani6%laci*n de &ilas ....................................................................................................................0+
3.+Prctica ,........................................................................................................................................01
3.1Prctica 0........................................................................................................................................03
4.2d(inistraci*n de MySQL...................................................................................................................04
4.)Instalaci*n de MySQL ...................................................................................................................04
4.,:s%arios y 6ri/ilegios ....................................................................................................................+7
4.,.)La sentencia <=2NT ............................................................................................................+)
4.,.,8s6eci&icaci*n de l%gares origen de la cone9i*n ...................................................................+,
,
4.,.08s6eci&icaci*n de .ases de datos y ta.las ..............................................................................+0
4.,.+8s6eci&icaci*n de col%(nas ...................................................................................................++
4.,.1Ti6os de 6ri/ilegios ...............................................................................................................++
4.,.3-6ciones de encri6taci*n .......................................................................................................+3
4.,.4Li(ites de %so ........................................................................................................................+3
4.,.58li(inar 6ri/ilegios ...............................................................................................................+4
4.,.;8li(inar %s%arios ...................................................................................................................+4
4.,.)7La .ase de datos de 6ri/ilegios: (ys>l ................................................................................+4
4.0Prctica +........................................................................................................................................10
4.+Co6ias de seg%ridad .......................................................................................................................1+
4.+.)(ys>l!otco6y .........................................................................................................................11
4.+.,(ys>ld%(6 ............................................................................................................................13
4.+.0=esta%rar a 6artir de res6aldos ...............................................................................................14
4.1=e6araci*n de ta.las ......................................................................................................................15
4.3Prctica 1........................................................................................................................................37
4.4=e6licaci*n ....................................................................................................................................37
4.4.)Pre6araci*n 6re/ia .................................................................................................................3)
4.4.,Con&ig%raci*n del ser/idor (aestro .......................................................................................3)
4.4.0Con&ig%raci*n del ser/idor escla/o .......................................................................................3,
4.5I(6ortaci*n y e96ortaci*n de datos ..............................................................................................30
4.5.)(ys>li(6ort ...........................................................................................................................3+
4.5.,(ys>ld%(6 ............................................................................................................................31
5.Clientes <r&icos...................................................................................................................................33
5.)P!6(yad(in...................................................................................................................................33
5.,MySQL 2d(inistrator....................................................................................................................33
;.=es%(en................................................................................................................................................33
0
1. Introduccin
MySQL es %n siste(a gestor de .ases de datos ?S<BD@ DBMS 6or s%s siglas en inglsA (%y conocido
y a(6lia(ente %sado 6or s% si(6licidad y nota.le rendi(iento. 2%n>%e carece de alg%nas
caractersticas a/an"adas dis6oni.les en otros S<BD del (ercado@ es %na o6ci*n atracti/a tanto 6ara
a6licaciones co(erciales@ co(o de entreteni(iento 6recisa(ente 6or s% &acilidad de %so y tie(6o
red%cido de 6%esta en (arc!a. 8sto y s% li.re distri.%ci*n en Internet .a$o licencia <PL le otorgan
co(o .ene&icios adicionales ?no (enos i(6ortantesA contar con %n alto grado de esta.ilidad y %n
r6ido desarrollo.
MySQL est dis6oni.le 6ara (lti6les 6lata&or(as@ la seleccionada 6ara los e$e(6los de este taller es
<N:BLin%9. Sin e(.argo@ las di&erencias con c%al>%ier otra 6lata&or(a son 6rctica(ente n%las@ ya
>%e la !erra(ienta %tili"ada en este caso es el cliente (ys>lCclient@ >%e 6er(ite interact%ar con %n
ser/idor MySQL ?local o re(otoA en (odo te9to. De este (odo es 6osi.le reali"ar todos los e$ercicios
so.re %n ser/idor instalado local(ente o@ a tra/s de Internet@ so.re %n ser/idor re(oto.
Para la reali"aci*n de todas las acti/idades@ es i(6rescindi.le >%e dis6onga(os de los datos de acceso
del %s%ario ad(inistrador de la .ase de datos. 2%n>%e en alg%nos de ellos los 6ri/ilegios necesarios
sern (enores@ 6ara los ca6t%los >%e tratan la ad(inistraci*n del S<BD ser i(6rescindi.le dis6oner
de las credenciales de ad(inistrador.
La /ersi*n de MySQL >%e se %tili"ar 6ara la reali"aci*n de los e$e(6los de este taller@ es la 1.)@
a%n>%e no !a.r ningn 6ro.le(a en e$ec%tarlos en /ersiones anteriores.
Lo >%e N- se /er en este taller:
Conce6tos .sicos de .ases de datos: ta.las@ col%(nas@ lla/es 6ri(arias@ lla/es &orneas@
relaciones@ etc.
Conce6tos .sicos de 6rogra(aci*n.
Co(andos .sicos de s!ell ?%s%arios Lin%9A
2. Objetivo
2d>%irir las !a.ilidades y conoci(ientos de MySQL necesarios 6ara %tili"ar y ad(inistrar este S<BD
?siste(a gestor de .ases de datosA.
3. Caractersticas de MySQL
8n este a6artado en%(erare(os las 6restaciones >%e caracteri"an a este S<BD@ as co(o las
de&iciencias de diseDo@ li(itaciones o 6artes del estndar an no i(6le(entadas.
+
3.1 Prestaciones
MySQL es %n S<BD >%e !a ganado 6o6%laridad 6or %na serie de atracti/as caractersticas:
a) 8st desarrollado en CBCEE.
b) Se distri.%yen e$ec%ta.les 6ara cerca de diecin%e/e 6lata&or(as di&erentes.
c) La 2PI se enc%entra dis6oni.le en C@ CEE@ 8i&&el @ Ja/a@ Perl@ PFP@ Pyt!on@ =%.y y TCL.
d) 8st o6ti(i"ado 6ara e>%i6os de (lti6les 6rocesadores.
e) 8s (%y destaca.le s% /elocidad de res6%esta.
f) Se 6%ede %tili"ar co(o clienteCser/idor o incr%stado en a6licaciones.
g) C%enta con %n rico con$%nto de ti6os de datos.
h) So6orta (lti6les (todos de al(acena(iento de las ta.las@ con 6restaciones y rendi(iento
di&erentes 6ara 6oder o6ti(i"ar el S<BD a cada caso concreto.
i) S% ad(inistraci*n se .asa en %s%arios y 6ri/ilegios.
j) Se tiene constancia de casos en los >%e (ane$a cinc%enta (illones de registros@ sesenta (il
ta.las y cinco (illones de col%(nas.
k) S%s o6ciones de conecti/idad a.arcan TCPBIP@ socGets :NIH y socGets NT@ ade(s de so6ortar
co(6leta(ente -DBC.
l) Los (ensa$es de error 6%eden estar en es6aDol y !acer ordenaciones correctas con 6ala.ras
acent%adas o con la letra IDI.
m) 8s alta(ente con&ia.le en c%anto a esta.ilidad se re&iere.
Para todos a>%ellos >%e son ade6tos a la &iloso&a de :NIH y del leng%a$e CBCEE@ el %so de MySQL les
ser (%y &a(iliar@ ya >%e s% diseDo y s%s inter&aces son acordes a esa &iloso&a: Jcrear !erra(ientas >%e
!agan %na sola cosa y >%e la !agan .ienK. MySQL tiene co(o 6rinci6al o.$eti/o ser %na .ase de datos
&ia.le y e&iciente. Ning%na caracterstica es i(6le(entada en MySQL si antes no se tiene la certe"a >%e
&%ncionar con la (e$or /elocidad de res6%esta y@ 6or s%6%esto@ sin ca%sar 6ro.le(as de esta.ilidad.
La in&l%encia de CBCEE y :NIH se 6%ede o.ser/ar de ig%al (anera en s% sinta9is. Por e$e(6lo@ la
%tili"aci*n de e96resiones reg%lares@ la di&erenciaci*n de &%nciones 6or los 6arntesis@ los /alores
l*gicos co(o 7 y )@ la %tili"aci*n del ta.%lador 6ara co(6letar sentencias@ 6or (encionar alg%nos.
3.2 Limitaciones
2l co(6render s%s 6rinci6ios de diseDo@ se 6%ede e96licar (e$or las ra"ones de alg%nas de s%s
carencias. Por e$e(6lo@ el so6orte de transacciones o la integridad re&erencial ?la gesti*n de cla/es
&orneasA en MySQL est condicionado a %n es>%e(a de al(acena(iento de ta.la concreto@ de &or(a
>%e si el %s%ario no /a a %sar transacciones@ 6%ede %sar el es>%e(a de al(acena(iento JtradicionalK
?MyIS2MA y o.tendr (ayor rendi(iento@ (ientras >%e si s% a6licaci*n re>%iere transacciones@ de.er
%sar el es>%e(a >%e lo 6er(ite ?InnoDBA@ sin ning%na otra restricci*n o i(6licaci*n.
-tras li(itaciones son las sig%ientes:
1
No so6orta.a 6rocedi(ientos al(acenados ?ya incl%ida en la /ersi*n 1.HA.
No incl%a dis6aradores ?ya incl%ida en la /ersi*n 1.HA.
No incl%a /istas ?ya incl%ida en la /ersi*n 1.HA.
No incl%ye caractersticas de o.$etos co(o ti6os de datos estr%ct%rados de&inidos 6or el %s%ario@
!erencia etc.
. !cceso a un servidor MySQL
8n este a6artado /ere(os las distintas &or(as de acceso a %n ser/idor MySQL e9istente >%e nos
6ro6orciona el 6ro6io S<BD. 8l acceso desde leng%a$es de 6rogra(aci*n o !erra(ientas en (odo
gr&ico se tratar en otros a6artados.
4.1 Conectandose con el servidor
Para conectarse con el ser/idor de.ere(os aseg%rarnos de >%e ste est &%ncionando y de >%e ad(ite
cone9iones@ sean stas locales ?el S<BD se est e$ec%tando en la (is(a (>%ina >%e intenta la
cone9i*nA o re(otas.
2dicional(ente@ de.ere(os dis6oner de las credenciales necesarias 6ara la cone9i*n. Distintos ti6os de
credenciales nos 6er(itirn distintos ni/eles de acceso. Para si(6li&icar@ s%6ondre(os >%e dis6one(os
de las credenciales ?%s%ario y contraseDaA del ad(inistrador de la .ase de datos ?nor(al(ente@ %s%ario
root y s% contraseDaA. 8n el a6artado >%e concierne a la ad(inistraci*n de MySQL@ se co(enta
detallada(ente los as6ectos relacionados con el siste(a de %s%arios@ contraseDas y 6ri/ilegios del
S<BD.
.1.1 Servidores y Clientes
8l ser/idor MySQL es el ser/icio (ys>ld@ >%e 6%ede reci.ir solicit%des de clientes locales o re(otos a
tra/s TCPBIP@ socGets o 6i6es en &or(a de &ic!eros locales a la (>%ina en >%e se est e$ec%tando. 8n
la distri.%ci*n se incl%ye %n cliente lla(ado (ys>lCclient@ al >%e en adelante nos re&erire(os
si(6le(ente co(o (ys>l ?as es co(o se lla(a el 6rogra(a e$ec%ta.leA. Si se in/oca sin 6ar(etros@
(ys>l reali"a %na cone9i*n al ser/idor local %tili"ando el no(.re del %s%ario :NIH >%e lo !a
in/ocado@ y s%6one >%e este %s%ario no re>%iere contraseDa. La cone9i*n a %n ser/idor re(oto y %n
no(.re de %s%ario es6ec&icos re>%iere de al (enos dos arg%(entos:
C! 6ara es6eci&icar el no(.re del ser/idor.
C% 6ara el no(.re del %s%ario.
Para >%e el 6rogra(a cliente 6reg%nte la contraseDa de cone9i*n al %s%ario@ de.ere(os 6ro6orcionar
adicional(ente el 6ar(etro C6.
L (ys>l C! (iser/idor C% M%s%arioN C6
3
.1.2 Conectarse y desconectarse
Si se tiene algn 6ro.le(a 6ara reali"ar la cone9i*n@ es necesario cons%ltar con el ad(inistrador del
siste(a@ >%e nos 6ro6orcionar %n no(.re de %s%ario@ contraseDa y el no(.re del ser/idor@ segn sea
necesario@ y nos in&or(ar de las restricciones >%e tiene n%estra c%enta.
La ad(inistraci*n y seg%ridad de MySQL est diseDada so.re %n es>%e(a de %s%arios y 6ri/ilegios.
Los %s%arios de.en ser creados 6or el ad(inistrador con s%s res6ecti/os 6ri/ilegios y restricciones. 8s
el ad(inistrador >%ien decide si los no(.res de los %s%arios de MySQL se corres6onden o no a los del
siste(a o6erati/o.
26ariencia de (ys>l al ingresar en el (odo interacti/o:
Oelco(e to t!e MySQL (onitor. Co((ands end Pit! Q or Rg.
So%r MySQL connection id is 54
Ser/er /ersion: 1.).1+C)%.%nt%+ ?:.%nt%A
Co6yrig!t ?cA ,777@ ,7)7@ -racle andBor its a&&iliates. 2ll rig!ts reser/ed.
T!is so&tPare co(es Pit! 2BS-L:T8LS N- O2==2NTS. T!is is &ree so&tPare@
and yo% are Pelco(e to (odi&y and redistri.%te it %nder t!e <PL /, license
Ty6e T!el6QT or TR!T &or !el6. Ty6e TRcT to clear t!e c%rrent in6%t state(ent.
(ys>lN
Con el co(ando !el6 o.tene(os %na serie de o6ciones ?/ere(os las (s %tili"adasA.
Para salir del cliente 6ode(os escri.ir IR>I o U>%itI:
(ys>lN >%itQ
Tanto 6ara el co(ando >%it co(o 6ara el co(ando !el6@ el 6%nto y co(a al &inal es o6cional.
4.2 Introduccin de Sentencias
8l cliente de MySQL en (odo interacti/o nos 6er(ite tanto la introd%cci*n de sentencias SQL 6ara
tra.a$ar con la .ase de datos ?crear ta.las@ !acer cons%ltas y /er s%s res%ltados@ etc.A co(o la e$ec%ci*n
de co(andos 6ro6ios del S<BD 6ara o.tener in&or(aci*n so.re las ta.las@ ndices@ etc. o e$ec%tar
o6eraciones de ad(inistraci*n.
4
.2.1 Sentencias
2 contin%aci*n 6resenta(os %na e$ec%ci*n de la sentencia select con c%atro col%(nas de datos:
(ys>lN select %ser?A@ connectionVid?A@ /ersion?A@ data.ase?AQ
ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCE
W %ser?A W connectionVid?A W /ersion?A W data.ase?A W
ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCE
W root'local!ost W 53 W 1.).1+C)%.%nt%+ W N:LL W
ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCE
) roP in set ?7.77 secA
(ys>lN
8n esta cons%lta se solicita@ a tra/s de &%nciones incor6oradas en el S<BD@ el no(.re del %s%ario
act%al de MySQL@ el n(ero de cone9i*n al ser/idor@ la /ersi*n del ser/idor y la .ase de datos en %so.
Las &%nciones se reconocen 6or los 6arntesis al &inal. (ys>l entrega s%s res%ltados en ta.las@ en la >%e
el 6ri(er rengl*n son los enca.e"ados de las col%(nas. 8s i(6ortante no de$ar es6acio entre el no(.re
de %na &%nci*n y los 6arntesis@ de otro (odo@ (ys>l (arcar %n (ensa$e de error.
La lti(a lnea entregada 6or (ys>l in&or(a so.re el n(ero de &ilas encontrado co(o res%ltado de la
cons%lta y el tie(6o esti(ado >%e lle/* s% reali"aci*n. 8sta (edida de tie(6o no se de.e considerar
(%y 6recisa 6ara (edir el rendi(iento del ser/idor@ se trata si(6le(ente de %n /alor a6ro9i(ado >%e
6%ede /erse alterado 6or (lti6les &actores.
-.ser/a(os >%e la col%(na con el no(.re de la .ase de datos act%al esta /aca. 8sto es nat%ral@ ya >%e
no !e(os creado an ning%na .ase de datos ni le !e(os indicado al gestor so.re c%l >%ere(os
tra.a$ar.
.2.2 Co"andos en "#lti$les lneas
Los co(andos 6%eden e96andirse en /arias lneas 6or co(odidad@ so.re todo al escri.ir largas
sentencias SQL. 8l cliente no en/iar la sentencia SQL al ser/idor !asta encontrar el 6%nto y co(a@ de
este (odo@ el co(ando anterior 6%ede escri.irse as:
(ys>lN select %ser?A@
CN connectionVid?A@
CN /ersion?A@
CN data.ase?AQ
ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCE
5
W %ser?A W connectionVid?A W /ersion?A W data.ase?A W
ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCE
W root'local!ost W 53 W 1.).1+C)%.%nt%+ W N:LL W
ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCE
) roP in set ?7.77 secA
-.sr/ese el indicador de mysql >%e se trans&or(a en ->@ signo >%e signi&ica >%e el co(ando an no
est co(6leto. Ta(.in 6%eden escri.irse /arios co(andos en %na sola lnea@ cada %no de.e lle/ar s%
res6ecti/o 6%nto y co(a:
(ys>lN select noP?AQ select %ser?AQ
ECCCCCCCCCCCCCCCCCCCCCE
W noP?A W
ECCCCCCCCCCCCCCCCCCCCCE
W ,7))C)7C)3 ),:1,:71 W
ECCCCCCCCCCCCCCCCCCCCCE
) roP in set ?7.77 secA
ECCCCCCCCCCCCCCCCE
W %ser?A W
ECCCCCCCCCCCCCCCCE
W root'local!ost W
ECCCCCCCCCCCCCCCCE
) roP in set ?7.77 secA
(ys>lN
Se e$ec%tarn en el orden >%e estn escritos. Los co(andos se 6%eden cancelar con la co(.inaci*n Rc@
con lo >%e el cliente nos /ol/er a (ostrar el indicador 6ara >%e escri.a(os de n%e/o la sentencia.
(ys>lN select now?A@
CN %so
CN /er Rc
(ys>lN
;
Indicadores de (ys>l
Indicador Significado
Mys>lN 8s6era %na n%e/a sentencia
CN La sentencia an no se !a ter(inado con Q
JN :na cadena en co(illas do.les no se !a cerrado
TN :na cadena en co(illas si(6les no se !a cerrado
.2.3 Cadenas de caracteres
Las cadenas de caracteres 6%eden deli(itarse (ediante co(illas do.les o si(6les. 8/idente(ente@
de.en cerrarse con el (is(o deli(itador con el >%e se !an a.ierto.
(ys>lN select XFola (%ndoX@T#elicidadesTQ
y 6%eden escri.irse en di/ersas lneas:
(ys>lN select XYste es %n te9to
XN en dos renglonesXQ
2l 6rinci6io@ es co(n ol/idar el 6%nto y co(a al introd%cir %n co(ando y@ ta(.in@ ol/idar cerrar las
co(illas. Si ste es el caso@ !ay >%e recordar >%e (ys>l no inter6reta lo >%e est entre co(illas@ de tal
(odo >%e 6ara %tili"ar el co(ando de cancelaci*n IRcI es 6reciso antes cerrar las co(illas a.iertas:
(ys>lN select XYste es %n te9to
XN Rc
XN X Rc
(ys>lN
.2. %&$resiones y variables
MySQL dis6one de /aria.les de sesi*n@ /isi.les nica(ente d%rante la cone9i*n act%al. Ystas 6%eden
al(acenar /alores de ti6os enteros@ &lotantes o cadenas@ 6ero no ta.las. Se de&inen co(o en el sig%iente
e$e(6lo:
(ys>lN select '9 :Z )Q
)7
La /aria.le local '9 tiene a!ora el /alor ) y 6%ede %tili"arse en e96resiones:
(ys>lN select '9@ s>rt?'9A@ sin?'9A@ '9 E )7@ '9 N )7Q
ECCCCCCECCCCCCCCCCECCCCCCCCCCCCCCCCCCCECCCCCCCCCECCCCCCCCCE
W '9 W s>rt?'9A W sin?'9A W '9 E )7 W '9 N )7 W
ECCCCCCECCCCCCCCCCECCCCCCCCCCCCCCCCCCCECCCCCCCCCECCCCCCCCCE
W ) W ) W 7.5+)+47;5+5745;4 W )) W 7 W
ECCCCCCECCCCCCCCCCECCCCCCCCCCCCCCCCCCCECCCCCCCCCECCCCCCCCCE
) roP in set ?7.77 secA
(ys>lN
Las /aria.les locales 6er(iten al(acenar datos entre cons%ltas y@ en la 6rctica@ es reco(enda.le
%tili"arlas e9cl%si/a(ente con este &in@ 6or e$e(6lo:
(ys>lN select '!oraVingreso :Z noP?AQ
ECCCCCCCCCCCCCCCCCCCCCCCCE
W '!oraVingreso :Z noP?A W
ECCCCCCCCCCCCCCCCCCCCCCCCE
W ,7))C)7C)3 )0:,,:01 W
ECCCCCCCCCCCCCCCCCCCCCCCCE
) roP in set ?7.77 secA
(ys>lN select noP?A C '!oraVingresoQ
ECCCCCCCCCCCCCCCCCCCCCCCE
W noP?A C '!oraVingreso W
ECCCCCCCCCCCCCCCCCCCCCCCE
W ,7)))7)3)07,0, W
ECCCCCCCCCCCCCCCCCCCCCCCE
) roP in set ?7.77 secA
(ys>lN
))
.2.' %&$resiones
Fay >%e tener c%idado con el %so de las /aria.les locales 6or los (oti/os sig%ientes:
Se e/alan en el ser/idor al ser en/iadas 6or el cliente.
Se reali"an con/ersiones de ti6o i(6lcitas.
(ys>lN do 'ingreso :Z noP?AQ
8l co(ando do e/ala e96resiones sin (ostrar los res%ltados en 6antalla. Se 6%ede e/al%ar c%al>%ier
e96resi*n >%e ad(ite el co(ando select.
Las /aria.les no re>%ieren declaraci*n y@ 6or o(isi*n@ contienen el /alor N:LL >%e signi&ica Ja%sencia
de /alorK@ o.ser/ar en la sig%iente cons%lta los res%ltados de %tili"ar /alores n%los:
(ys>lN select 'y@
CN s>rt? 'y A@
CN 'y E )7@
CN 'y M ) Q
ECCCCCCECCCCCCCCCCCCECCCCCCCCCECCCCCCCCE
W 'y W s>rt? 'y A W 'y E )7 W 'y M ) W
ECCCCCCECCCCCCCCCCCCECCCCCCCCCECCCCCCCCE
W N:LL W N:LL W N:LL W N:LL W
ECCCCCCECCCCCCCCCCCCECCCCCCCCCECCCCCCCCE
) roP in set ?7.77 secA
(ys>lN
La ra"*n de este co(6orta(iento es >%e no es 6osi.le reali"ar ning%na o6eraci*n c%ando se desconoce
algn /alor. La entrada de /alores N:LL sie(6re signi&icar salida de /alores N:LL.
4.3 Proceso por lotes
MySQL 6%ede 6rocesar 6or lotes las sentencias contenidas en %n arc!i/o de te9to. Cada sentencia
de.er ter(inar en TQT ig%al >%e si la escri.ira(os en el cliente. La sinta9is es la sig%iente:
),
L (ys>l C% $%an C! ser/idor.(isitio.org C6 M de(o.s>l
8n este caso@ se reali"ar %na cone9i*n con el ser/idor@ nos 6edir la contraseDa del %s%ario U$%anI y@ si
sta es correcta@ e$ec%tar los co(andos incl%idos en el arc!i/o de(o.s>l@ %no a %no y 6or el (is(o
orden. I(6ri(ir los res%ltados ?o erroresA en la salida estndar ?o de errorA y ter(inar. De este (odo
e/itare(os la (olestia de 6rocesarlos %no 6or %no de &or(a interacti/a.
-tra &or(a de 6rocesar %n arc!i/o es (ediante el co(ando so%rce desde el indicador interacti/o de
MySQL:
(ys>lN so%rce de(o.s>l
8l arc!i/o de(o.s>l crea %na n%e/a .ase de datos.
8l %s%ario de.e tener 6er(isos 6ara crear .ases de datos si >%iere >%e sea 6rocesado el arc!i/o
de(o.s>l. Si el ad(inistrador crea la .ase de datos 6or nosotros@ ser necesario editarlo@ co(entando la
lnea donde se crea la .ase de datos con el s(.olo I[I al inicio:
[ create data.ase de(oQ
8s necesario 6rocesar el contenido del &ic!ero de(o.s>l tal co(o los transcri.i(os a>%@ con el &in de
6oder reali"ar los e$e(6los del resto del a6artado. Si se o.ser/a s% contenido@ 6osi.le(ente (%c!as
cosas se e96li>%en 6or s (is(as@ de c%al>%ier (anera@ sern e96licadas en este a6artado. Ta(.in
6%eden e$ec%tarse s%s *rdenes en el cliente directa(ente.
Contenido del &ic!ero de(o.s>l
dro6 data.ase de(oQ
create data.ase de(oQ
%se de(oQ
CC
CC 8str%ct%ra de la ta.la 6rod%ctos
CC
create ta.le 6rod%ctos ?
6arte /arc!ar?,7A@
ti6o /arc!ar?,7A @
es6eci&icacion /arc!ar?,7A @
6s%gerido &loat?3@,A@
cla/e int?0A "ero&ill not n%ll a%toVincre(ent@
)0
6ri(ary Gey ?cla/eA
AQ
insert into 6rod%ctos ?6arte@ti6o@es6eci&icacion@6s%geridoA /al%es
?TProcesadorT@T, <F"T@T0, .itsT@n%llA@
?TProcesadorT@T,.+ <F"T@T0, .itsT@01A@
?TProcesadorT@T).4 <F"T@T3+ .itsT@,71A@
?TProcesadorT@T0 <F"T@T3+ .itsT@137A@
?T=2MT@T),5MBT@T000 MF"T@)7A@
?T=2MT@T,13MBT@T+77 MF"T@01A@
?TDisco D%roT@T57 <BT@T4,77 r6(T@37A@
?TDisco D%roT@T),7 <BT@T4,77 r6(T@45A@
?TDisco D%roT@T,77 <BT@T4,77 r6(T@))7A@
?TDisco D%roT@T+7 <BT@T+,77 r6(T@n%llA@
?TMonitorT@T)7,+9543T@T41 F"T@57A@
?TMonitorT@T)7,+9543T@T37 F"T@34A
Q
CC
CC 8str%ct%ra de la ta.la T6ro/eedorT
CC
create ta.le 6ro/eedores ?
e(6resa /arc!ar?,7A not n%ll@
6ago set?TcrditoT@Te&ecti/oTA@
6ri(ary Gey ?e(6resaA
AQ
CC
CC \alores de la ta.la T6ro/eedorT
CC
insert into 6ro/eedores ?e(6resa@6agoA /al%es
?TTecnoCGT@TcrditoTA@
?TPatitoT@Te&ecti/oTA@
?TNacionalT@Tcrdito@e&ecti/oTA
Q
create ta.le ganancia?
)+
/enta en%(?TPor (ayorT@TPor (enorTA@
&actor deci(al?,@,A
AQ
insert into ganancia /al%es
?TPor (ayorT@).71A@
?TPor (enorT@).),A
Q
create ta.le 6recios ?
e(6resa /arc!ar?,7A not n%ll@
cla/e int?0A "ero&ill not n%ll@
6recio &loat?3@,A@
&oreign Gey ?e(6resaA re&erences 6ro/eedores@
&oreign Gey ?cla/eA re&erences 6rod%ctos
AQ
insert into 6recios /al%es
?TNacionalT@77)@07.5,A@
?TNacionalT@77,@0,.40A@
?TNacionalT@770@,7,.,1A@
?TNacionalT@771@;.43A@
?TNacionalT@773@0).1,A@
?TNacionalT@774@15.+)A@
?TNacionalT@7)7@3+.05A@
?TPatitoT@77)@07.+7A@
?TPatitoT@77,@00.30A@
?TPatitoT@770@);1.1;A@
?TPatitoT@771@;.45A@
?TPatitoT@773@0,.++A@
?TPatitoT@774@1;.;;A@
?TPatitoT@7)7@3,.7,A@
?TTecnoCGT@770@);5.0+A@
?TTecnoCGT@771@;.,4A@
?TTecnoCGT@773@0+.51A@
?TTecnoCGT@774@1;.;1A@
)1
?TTecnoCGT@7)7@3).,,A@
?TTecnoCGT@7),@3,.,;A
Q
Si se desea lle/ar %n registro de todas las o6eraciones de %na sesi*n@ se 6%ede %tili"ar la e96resi*n
sig%ienteQ de este (odo se g%ardarn todos los co(andos y s%s res%ltados en arc!i/oVregistro.t9t:
(ys>lN tee arc!i/oVregistro.t9t
Para cancelar la ca6t%ra@ .asta con teclear lo sig%iente:
(ys>lN notee
4.4 Usar base de datos
La sig%iente cons%lta in&or(a so.re la .ase de datos act%al(ente en %so.
(ys>lN select data.ase?AQ
ECCCCCCCCCCCCE
W data.ase?A W
ECCCCCCCCCCCCE
W N:LL W
ECCCCCCCCCCCCE
) roP in set ?7.77 secA
(ys>lN
8l ca(6o esta /aco 6or>%e no esta(os !aciendo %so de ning%na .ase de datos. Para /er las .ases de
datos e9istentes en el siste(a@ se de.e e&ect%ar la sig%iente cons%lta:
(ys>lN s!oP data.asesQ
ECCCCCCCCCCCCCCCCCCCCE
W Data.ase W
ECCCCCCCCCCCCCCCCCCCCE
W in&or(ationVsc!e(a W
)3
W (ys>l W
W de(o W
ECCCCCCCCCCCCCCCCCCCCE
0 roPs in set ?7.7, secA
(ys>lN
MySQL nos (%estra el listado de las .ases de datos de&inidas en el ser/idor. De.e a6arecer la .ase de
datos de(o >%e crea(os con el arc!i/o de(o.s>l. Para 6oder tra.a$ar con ella@ tene(os >%e a.rirla:
(ys>lN use de(oQ
8s 6osi.le reali"ar cons%ltas en %na .ase de datos sin %tili"ar el co(ando %se@ en ese caso@ todos los
no(.res de las ta.las de.en lle/ar el no(.re de la .ase de datos a >%e 6ertenecen de la &or(a:
de(o.6rod%ctos.
-tra 6osi.ilidad consiste en 6ro6orcionar el no(.re de la .ase de datos al iniciar %na sesi*n interacti/a
con (ys>l:
L (ys>l de(o C% $%an C6
La cons%lta de las ta.las >%e contiene la .ase de datos de(o se reali"a con la sentencia s!oP de la
sig%iente (anera:
(ys>lN s!oP ta.lesQ
ECCCCCCCCCCCCCCCCE
W Ta.lesVinVde(o W
ECCCCCCCCCCCCCCCCE
W ganancia W
W 6recios W
W 6rod%ctos W
W 6ro/eedores W
ECCCCCCCCCCCCCCCCE
+ roPs in set ?7.77 secA
)4
8l co(ando s!oP es til 6ara (ostrar in&or(aci*n so.re las .ases de datos@ ta.las@ /aria.les y otra
in&or(aci*n so.re el S<BD. Pode(os %tili"ar !el6 s!oP en el intr6rete de co(andos 6ara o.tener
todas las /ariantes de esta sentencia.
2si(is(o@ 6ode(os cons%ltar las col%(nas de cada %na de las ta.las:
(ys>lN descri.e 6rod%ctosQ
ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCCCCCCCCCCE
W #ield W Ty6e W N%ll W ]ey W De&a%lt W 89tra W
ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCCCCCCCCCCE
W 6arte W /arc!ar?,7A W S8S W W N:LL W W
W ti6o W /arc!ar?,7A W S8S W W N:LL W W
W es6eci&icacion W /arc!ar?,7A W S8S W W N:LL W W
W 6s%gerido W &loat?3@,A W S8S W W N:LL W W
W cla/e W int?0A %nsigned "ero&ill W N- W P=I W N:LL W a%toVincre(ent W
ECCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCCCCCCCCCCE
1 roPs in set ?7.7) secA
(ys>lN
Para crear %na n%e/a .ase de datos %sare(os la sentencia create data.ase:
(ys>lN create database 6r%e.aQ
Para eli(inar %na .ase de datos@ %sare(os la sentencia dro6 data.ase:
(ys>lN drop database 6r%e.aQ
MySQL es sensi.le al %so de (aysc%las y (insc%las@ tanto en la de&inici*n de .ases de datos@ co(o
de ta.las o col%(nas.
4.5 Prctica 1
Tie(6o esti(ado: ,7 (in.
=eali"ar los sig%ientes 6asos:
1. Cargar el scri6t practica1.sql a la .ase de datos demo >%e corres6onde al 6artici6ante@ este
)5
arc!i/o est %.icado en la car6eta practicas.
2. Conectarse a la .ase de datos demo >%e corres6onde.
3. 896lorar las ta.las generadas co(o consec%encia de la e$ec%ci*n del scri6t practica1.sql@ se
de.e !a.er generado las ta.las gente y ci%dad. Listar los registros.
4. <%ardar en %n arc!i/o lla(ado de(oH.t9t@ donde H es el n(ero >%e corres6onde al
6artici6ante@ todas las salidas generadas co(o consec%encia de la e$ec%ci*n de las sig%ientes
instr%cciones.
5. S8T '!oy Z C:==8NTVD2T8?AQ
. S8L8CT '!oyQ
!. S8L8CT '9:Z)7Q
". S8L8CT '9Q
#. S8L8CT '&ec!aV(in:ZMIN?&ec!aA@ '&ec!aV(a9:ZM2H?&ec!aA #=-M genteQ
1$. S8L8CT ^ #=-M gente OF8=8 &ec!aZ'&ec!aV(inQ
11. 2nali"ar el contenido del arc!i/o generado.
12. I(6le(entar serie H
n
Z ,n E )@ de tal (anera >%e arro$e los sig%ientes /alores ?0@ 1@ 4@ ;@ ))@
)0...@ etcA.
'. Creacin y "ani$ulacin de tablas
5.1 Crear tablas
:na /e" reali"ada la cone9i*n con el ser/idor MySQL y des6%s de a.rir %na .ase de datos@ 6ode(os
crear ta.las en ella de la sig%iente (anera:
(ys>lN create table 6ersonas ?
CN no(.re char?07A@
CN direccion char?+7A@
CN tele&ono char?)1A
CN AQ
Q%ery -]@ 7 roPs a&&ected ?7.)) secA
(ys>lN
8n este caso@ la sentencia create table constr%ye %na n%e/a ta.la en la .ase de datos en %so. La
ta.la contiene tres col%(nas@ nombre, direccin y telfono@ todas de ti6o carcter y de longit%des 07@ +7
y )1 res6ecti/a(ente. Si se intenta g%ardar en ellas /alores >%e so.re6asen esos l(ites@ sern
);
tr%ncados 6ara 6oderlos al(acenar. Por ese (oti/o@ es i(6ortante reser/ar es6acio s%&iciente 6ara cada
col%(na. Si se 6re/ >%e (%c!os registros oc%6arn s*lo %na &racci*n del es6acio reser/ado@ se 6%ede
%tili"ar el ti6o /arc!ar@ si(ilar a c!ar@ con la di&erencia de >%e el /alor oc%6ar %n es6acio (enor al
es6eci&icado si la cadena es (s corta >%e el (9i(o indicado@ a!orrando as es6acio de
al(acena(iento.
Las ta.las 6%eden eli(inarse con dro6 ta.le:
(ys>lN drop table 6ersonasQ
Q%ery -]@ 7 roPs a&&ected ?7.77 secA
(ys>lN
2lternati/a(ente@ se 6%ede %tili"ar la sinta9is sig%iente:
(ys>lN drop table if e%ists 6ersonasQ
2tri.%tos de col%(na
&tributo Significado
n%ll Se 6er(iten /alores n%los@ atri.%to 6or o(isi*n si
no se es6eci&ica lo contrario.
not n%ll No se 6er(iten /alores n%los.
de&a%lt /alor \alor 6or o(isi*n >%e se asigna a la col%(na.
a%toVincre(ent 8l /alor se asigna a%to(tica(ente
incre(entando en %no el (9i(o /alor registrado
!asta a!ora. Se a6lica s*lo a las col%(nas
(arcadas co(o cla/e 6ri(aria.
6ri(ary Gey SeDala al ca(6o co(o cla/e 6ri(aria@
i(6lcita(ente ta(.in lo declara co(o not n%ll.
\e(oslo con %n e$e(6lo:
(ys>lN create table 6ersonas ?
CN no(.re 'archar?+7A not n%ll@
CN direccion 'archar?17A n%ll@
CN edoVci/il char?)0A default TsolteroT@
CN n%(Vregistro int primar( ke( auto)increment
,7
CN AQ
Q%ery -]@ 7 roPs a&&ected ?7.71 secA
(ys>lN
8n este caso la ta.la contiene c%atro col%(nas@ de las c%ales direccion y edoVci/il 6er(iten /alores
n%los@ en edoVci/il est i(6lcito al no declarar lo contrario. La col%(na n%(Vregistro no ace6ta
/alores n%los 6or>%e est de&inida co(o cla/e 6ri(aria.
2%n>%e la creaci*n de %na cla/e 6ri(aria 6%ede declararse co(o atri.%to de col%(na@ es con/eniente
de&inirla co(o restricci*n de ta.la@ co(o se /er enseg%ida.
Ta(.in es 6osi.le indicar restricciones so.re la ta.la y no so.re col%(nas es6eci&icas:
(ys>lN create table 6ersonas ?
CN no(.re /arc!ar?+7A not n%ll@
CN naci(iento date not n%ll@
CN 6are$a /arc!ar?+7A@
CN 6ro/eedor int not n%ll@
CN
CN 6ri(ary Gey ?no(.re@naci(ientoA@
CN %ni>%e ?6are$aA@
CN &oreign Gey ?6ro/eedorA re&erences 6ro/eedores
CN AQ
Q%ery -]@ 7 roPs a&&ected ?7.)0 secA
(ys>lN
=estricciones de ta.la
*estricci+n Significado
6ri(ary Gey De&ine la o las col%(nas >%e ser/irn co(o cla/e
6ri(aria. Las col%(nas >%e &or(an 6arte de la
cla/e 6ri(aria de.en de ser not n%ll.
%ni>%e De&ine las col%(nas en las >%e no 6%eden
d%6licarse /alores. Sern las cla/es candidatas del
(odelo relacional.
&oreign Gey ?col%(naA re&erences ta.la
?col%(na,A
De&ine >%e los /alores de columna se 6er(itirn
s*lo si e9isten en tabla(columna2). 8s decir@
,)
columna !ace re&erencia a los registros de tabla@
esto aseg%ra >%e no se realice re&erencias a
registros >%e no e9isten.
Se de&inen tres restricciones so.re la ta.la des6%s de la de&inici*n de c%atro col%(nas:
La 6ri(era restricci*n se re&iere a la cla/e 6ri(aria@ co(6%esta 6or las col%(nas nombre y
nacimiento: no 6%ede !a.er dos 6ersonas >%e se lla(en ig%al y >%e !ayan nacido en la (is(a
&ec!a. La cla/e 6ri(aria 6er(ite identi&icar de (anera %n/oca cada registro de la ta.la.
La seg%nda restricci*n de&ine >%e la 6are$a de %na 6ersona de.e ser nica: dos 6ersonas no
6%eden tener la (is(a 6are$a. Todo intento de insertar %n n%e/o registro donde el no(.re de la
6are$a ya e9ista@ ser rec!a"ado. C%ando se restringe %na col%(na con uni,ue@ los /alores null
reci.en %n trato es6ecial@ 6%es se 6er(iten (lti6les /alores n%los.
La tercera restricci*n a&ecta a la col%(na proveedor@ s*lo 6%ede to(ar /alores >%e e9istan en la
cla/e 6ri(aria de la ta.la proveedores.
Las restricciones de ta.la 6%eden de&inirse con %n identi&icador til 6ara !acer re&erencias 6osteriores a
la restricci*n:
(ys>lN create table 6ersonas ?
CN no(.re /arc!ar?+7A not n%ll@
CN naci(iento date not n%ll@
CN 6are$a /arc!ar?+7A@
CN 6ro/eedor int not n%ll@
CN
CN constraint cla/e 6ri(ary Gey ?no(.re@naci(ientoA@
CN constraint (onoga(o %ni>%e ?6are$aA@
CN constraint tra.a$aVen &oreign Gey ?6ro/eedorA re&erences 6ro/eedores
CN AQ
Q%ery -]@ 7 roPs a&&ected ?7.05 secA
(ys>lN
ke( - inde%
La de&inici*n de ndices 6%ede !acerse ta(.in en el (o(ento de creaci*n de la ta.la@ (ediante la
6ala.ra cla/e Gey ?o inde9A@ a la >%e de.ere(os 6ro6orcionar el no(.re >%e /a(os a asignar a esta
cla/e y las col%(nas >%e la &or(an@ entre 6arntesis. 89isten (odi&icadores o6cionales so.re el ndice
,,
>%e nos 6er(iten es6eci&icar si se trata de %n ndice nico o (lti6le ?segn 6%edan e9istir o no /arios
/alores ig%ales del ndice en la ta.laA.
8n /ersiones recientes de MySQL e9isten otros ti6os de ndices ?es6aciales@ de te9to co(6leto@ etc.A
6ara ti6os de datos concretos y >%e o&recen 6restaciones adicionales.
5.2 ipo de datos
MySQL c%enta con %n rico con$%nto de ti6os de datos 6ara las col%(nas@ >%e es necesario conocer 6ara
elegir (e$or c*(o de&inir las ta.las. Los ti6os de datos se 6%eden clasi&icar en tres gr%6os:
N%(ricos
Cadenas de caracteres
#ec!as y !oras
8l /alor null es %n caso es6ecial de dato@ ya >%e al signi&icar ausencia de valor se a6lica a todos los
ti6os de col%(na. Los sig%ientes s(.olos se %tili"an en la de&inici*n y descri6ci*n de los ti6os de
datos en MySQL:
M C 8l anc!o de la col%(na en n(ero de caracteres.
D C N(ero de deci(ales >%e !ay >%e (ostrar.
L C Longit%d o ta(aDo real de %na cadena.
_ ` C Lo >%e se escri.a entre ellos es o6cional.
'.2.1 Ti$os de datos nu"(ricos
Los ti6os de datos n%(ricos co(6renden dos categoras@ los enteros y los n(eros con 6%nto &lotante.
./meros enteros
La 6rinci6al di&erencia entre cada %no de los ti6os de enteros es s% ta(aDo@ >%e /a desde ) .yte de
al(acena(iento !asta los 5 .ytes. Las col%(nas de ti6o entero 6%eden reci.ir dos atri.%tos adicionales@
>%e de.en es6eci&icarse in(ediata(ente des6%s del no(.re del ti6o:
unsigned. Indica >%e el entero no 6odr al(acenar /alores negati/os. 8s res6onsa.ilidad del
%s%ario /eri&icar@ en este caso@ >%e los res%ltados de las restas no sean negati/os@ 6or>%e
MySQL los con/ierte en 6ositi/os.
0erofill. Indica >%e la col%(na@ al ser (ostrada@ rellenar con ceros a la i">%ierda los es6acios
/acos. 8sto de ac%erdo al /alor es6eci&icado 6or M en la declaraci*n del ti6o. :na col%(na con
el atri.%to "ero&ill es al (is(o tie(6o %nsigned a%n>%e no se es6eci&i>%e.
1jemplo
(ys>lN create table n%(eros ?
CN 9 int?+A "ero&ill not null@
,0
CN y int?1A unsigned
CN AQ
Q%ery -]@ 7 roPs a&&ected ?7.1+ secA
(ys>lN
8l co(ando anterior crea %na ta.la con dos col%(nas. 2l (ostrarse la col%(na 9 oc%6ar %n es6acio de
+ dgitos.
Tanto "ero&ill co(o %nsigned de.en escri.irse sie(6re antes >%e c%al>%ier otro atri.%to de col%(na.
2ipos enteros
2ipo 1spacio de almacenamiento Significado
tinyint_?MA` ) .yte 8ntero (%y 6e>%eDo
s(allint_?MA` , .ytes 8ntero 6e>%eDo
(edi%(int_?MA` 0 .ytes 8ntero (ediano
int_?MA` + .ytes 8ntero
.igint_?MA` 5 .ytes 8ntero grande
./meros con punto flotante
MySQL c%enta con los ti6os &loat y do%.le@ de + y 5 .ytes de al(acena(iento. 2de(s incl%ye el ti6o
deci(al@ >%e se al(acena co(o %na cadena de caracteres y no en &or(ato .inario.
N(eros de 6%nto &lotante
2ipo 1spacio de almacenamiento Significado
&loat + .ytes Si(6le 6recisi*n
do%.le 5 .ytes Do.le 6recisi*n
deci(al M E , .ytes Cadena de caracteres
re6resentando %n n(ero
&lotante
'.2.2 Cadenas de caracteres
Cadenas de caracteres
,+
2ipo 1,ui'alente 2ama3o m4%imo 1spacio de
almacenamiento
c!ar_?MA` M .ytes M .ytes
/arc!ar_?MA` M .ytes LE) .ytes
tinyte9t tiny.lo. ,
5
a ) .ytes LE) .ytes
te9t .lo. ,
)3
a) . ytes LE, .ytes
(edi%(te9t (edi%(.lo. ,
,+
a) .ytes LE0 .ytes
longte9t long.lo. ,
0,
a) .ytes LE+ .ytes
en%(?I/)I@I/,I@. . . A 31101 /alores ) o , .ytes
set?I/)I@I/,I@. . . A 3+ /alores ) a 5 .ytes
Si o.ser/a(os la ta.la@ /e(os >%e el nico ti6o de dato >%e sie(6re %tili"a el ta(aDo es6eci&icado 6or
M es el ti6o c!ar. Por este (oti/o@ se o&rece el ti6o /arc!ar >%e oc%6a s*lo el es6acio re>%erido 6or el
/alor de la col%(na.
1jemplo
create table 6ersona?
co(entario char?,17A@
recado 'archar?,17A
AQ
La col%(na co(entario oc%6ar ,17 .ytes de es6acio de al(acena(iento@ sin i(6ortar el /alor
al(acenado. Por el contrario@ la col%(na recado oc%6ar s*lo el es6acio necesario segn el /alor
asignadoQ 6or e$e(6lo@ la cadena JInstalar MySQLK tiene )+ .ytes de longit%d@ y el ca(6o recado
oc%6ara )1 .ytes 6ara al(acenarla.
Los ti6os te9t y .lo. son e>%i/alentes@ 6ero te9t res6eta las (aysc%las@ (insc%las y caracteres
acent%ados en la ordenaci*n.
8$e(6lo del %so de los ti6os en%(erados o en%(
create table 6ersona?
edoVci/il enum?TsolteroT@TcasadoT@T/i%doT@Tdi/orciadoTA
AQ
,1
La col%(na edo_civil de la ta.la en la sentencia anterior@ solo 6odr al(acenar los /alores soltero,
casado, viudo, divorciado@ >%e son es6eci&icados 6or el ti6o enum. La col%(na oc%6ar el es6acio
de %n .yte@ ya >%e los /alores en%( son re6resentados interna(ente 6or n(eros.
'.2.3 )ec*as y *oras
#ec!as y !oras
Ti6o 8s6acio de al(acena(iento =ango
date 0 .ytes I)777C7)C7)I al I;;;;C),C0)I
ti(e 0 .ytes IC505:1;:1;I a I505:1;:1;I
dateti(e 5 .ytes I)777C7)C7) 77:77:77I a I;;;;C
),C0) ,0:1;:1;I
ti(esta(6_?MA` + .ytes );477)7)777777 al aDo ,704
year_?MA` ) .ytes );7) a ,)11
5.3 !odi"icar ablas
'.3.1 !+re+ar y eli"inar colu"nas
2lterar la estr%ct%ra de %na ta.la es %na tarea (s &rec%ente de lo >%e %no 6%ede i(aginar en %n
6rinci6io. La sentencia alter ta.le 6er(ite %na a(6lia ga(a de &or(as de (odi&icar %na ta.la. La
sig%iente sentencia nos rec%erda %n 6oco a la estr%ct%ra de la sentencia create ta.le@ en donde
(odi&ica(os la ta.la 6ersonal creada en la secci*n anterior.
(ys>lN alter table 6ersonas add ?
CN (ascota char?07A default T6errroT@
CN 6asatie(6o char ?,7A not null
CN AQ
Sie(6re es 6osi.le cons%ltar la estr%ct%ra de %na ta.la con el co(ando describe tabla.
Des6%s de e$ec%tar la sentencia anterior@ a6arecen dos n%e/as col%(nas en la ta.la. Si >%ere(os
agregar %na sola col%(na@ 6ode(os %sar la sinta9is sig%iente:
(ys>lN alter table 6ersonas add ca6ital int not null after no(.reQ
8ste &or(ato de alter ta.le 6er(ite@ ade(s@ insertar las col%(nas antes ?.e&oreA o des6%s ?a&terA de
,3
%na col%(na en c%esti*n.
Las col%(nas no deseadas 6%eden eli(inarse con la o6ci*n dro6.
(ys>lN alter table 6ersonas drop 6asatie(6oQ
'.3.2 Modi,icar colu"nas
La (odi&icaci*n de %na col%(na con la o6ci*n modif( es 6arecida a /ol/er a de&inirla.
(ys>lN alter table 6ersonas modif(
CN (ascota char ?)+A default TgatoTQ
Des6%s de la sentencia anterior@ los atri.%tos y ti6o de la col%(na !an ca(.iado 6or los es6eci&icados.
Lo >%e no se 6%ede ca(.iar con esta sinta9is es el no(.re de la col%(na. Para ello@ se de.e %tili"ar la
o6ci*n change:
(ys>lN alter table 6ersonas change no(.re no(.res char?,7AQ
La col%(na >%e se lla(a.a no(.re ca(.ia a no(.res.
#inal(ente@ 6ode(os ca(.iar de no(.re la ta.la:
(ys>lN alter table 6ersonas rename genteQ
8l co(ando rename table viejo_nombre to nuevo_nombre es %na &or(a alternati/a de ca(.iar el
no(.re a %na ta.la.
(ys>lN rename table gente to 6ersonasQ
,4
5.4 #tras opciones
'..1 Co$iar tablas
2%n>%e no e9iste %n co(ando e96lcito 6ara co6iar ta.las de %na .ase de datos a otra@ es 6osi.le
%tili"ar el co(ando rename table 6ara este 6ro6*sitoQ .asta con es6eci&icar la .ase de datos a la >%e
6ertenece %na ta.la:
(ys>lN rename table .aseV%no.ta.la to .aseVdos.ta.laQ
Ta(.in es 6osi.le crear %na ta.la n%e/a con el contenido de otra ya e9istente ?co6iando los datosA:
(ys>lN create table n%e/aVta.la select 5 from otraVta.laQ
La sig%iente sentencia es e>%i/alente@ 6ero no co6ia los datos de la ta.la origen:
(ys>lN create table n%e/aVta.la like otraVta.laQ
'..2 Tablas te"$orales
MySQL 6er(ite la creaci*n de ta.las te(6orales@ /isi.les e9cl%si/a(ente en la sesi*n a.ierta@ y
g%ardar datos entre cons%ltas. La creaci*n de %na ta.la te(6oral s*lo re>%iere la %tili"aci*n de la
6ala.ra temporary en c%al>%ier &or(ato del co(ando create table. La %tilidad de las ta.las te(6orales
se li(ita a cons%ltas co(6le$as >%e de.en generar res%ltados inter(edios >%e de.e(os cons%ltar ?!acer
T$oinT con ellasA /arias /eces o en cons%ltas se6aradas. Interna(ente@ MySQL genera ta(.in ta.las
te(6orales 6ara resol/er deter(inadas cons%ltas:
(ys>lN create temporar( table n%e/aVta.la ...
-. Consultas
Co(o ya !e(os e96licado@ las cons%ltas so.re la .ase de datos se e$ec%tan (ediante sentencias
S8L8CT introd%cidas en el 6ro6io 6rogra(a cliente y los res%ltados se 6resentan en &or(a de ta.la.
$.1 La base de datos demo
8n esta secci*n %tili"are(os la .ase de datos demo >%e !e(os creado con el co(ando so%rce demo.sql.
,5
2s >%e@ antes de est%diar las cons%ltas en MySQL@ re/isare(os .re/e(ente la estr%ct%ra de esta .ase
de datos@ >%e consta de las sig%ientes ta.las:
(ys>lN show ta.lesQ
ECCCCCCCCCCCCCCCCE
W Ta.lesVinVde(o W
ECCCCCCCCCCCCCCCCE
W ganancia W
W 6recios W
W 6rod%ctos W
W 6ro/eedores W
ECCCCCCCCCCCCCCCCE
Las c%atro ta.las re6resentan@ de (anera &icticia@ la .ase de datos de %n distri.%idor de e>%i6os de
6rocesa(iento. 8stn diseDadas 6ara ser/ir de e$e(6lo a los casos 6resentados en este ca6t%lo@ 6or lo
>%e no necesaria(ente sern tiles en la /ida real.
8n n%estro e$e(6lo i(aginario re6resenta(os la sig%iente sit%aci*n.
N%estro /endedor tiene %na relaci*n de 6ro/eedores >%e /enden s%s 6rod%ctos a crdito@ en
e&ecti/o o a(.os. Las co(6ras a crdito 6agan intereses@ 6ero son tiles 6or>%e no sie(6re es
6osi.le 6agar en e&ecti/o. Se %tili"a %na col%(na de ti6o con$%nto 6ara 6ago@ >%e 6%ede to(ar
los /alores IcrditoI@ Ie&ecti/oI o a(.os:
create table 6ro/eedores ?
e(6resa 'archar?,7A not null@
6ago set?TcrditoT@Te&ecti/oTA@
primar( ke( ?e(6resaA
AQ
Los 6rod%ctos >%e se distri.%yen son 6artes de e>%i6o de c*(6%to. Para la (ayora de los
6rod%ctos en el (ercado@ los &a.ricantes s%gieren %n 6recio de /enta al 6.lico >%e@ a%n>%e no
es o.ligatorio@ los cons%(idores no estn dis6%estos a 6agar (s. Las cla/es de los 6rod%ctos
son asignadas 6ara control interno con %n n(ero consec%ti/o. Con estas es6eci&icaciones@ la
ta.la productos se de&ine de la (anera sig%iente:
create table 6rod%ctos ?
6arte 'archar?,7A@
ti6o 'archar?,7A @
,;
es6eci&icaci*n 'archar ?,7A @
6s%gerido float?3@,A@
cla/e int?0A 0erofill not null auto)increment@
primar( ke( ?cla/eA
AQ
La e(6resa de&ine %na 6oltica 6ara las ganancias (ni(as >%e se de.en o.tener en /entas: el
1b al 6or (ayor y el ),b al 6or (enor. 8stos /alores se al(acenan en la ta.la ganancias@
donde se decidi* incl%ir %na col%(na de no(.re &actor@ con el n(ero 6or el >%e se (%lti6lica
el 6recio de co(6ra 6ara o.tener el 6recio de /enta. Los ti6os de /enta UPor (ayorI y UPor
(enorI se de&inen con %n ti6o de datos en%(:
create table ganancia?
/enta enum?IPor (ayorI@IPor (enorIA@
&actor decimal ?,@,A
AQ
La lista de 6recios se de&ine a 6artir de la e(6resa 6ro/eedor y el 6rod%cto@ asignndole %n
6recio. Por ese (oti/o@ las col%(nas e(6resa y cla/e se de&inen co(o foreign ke(.
create table 6recios ?
e(6resa 'archar?,7A not null@
cla/e int?0A "ero&ill not null@
6recio float?3@,A@
foreign ke( ?e(6resaA references 6ro/eedores@
foreign ke( ?cla/eA references 6rod%ctos
AQ
$.2 Consultar in"ormacin
MySQL o&rece %n con$%nto (%y a(6lio de &%nciones a%9iliares ?tanto estndares co(o 6ro6iasA >%e
nos 6%eden ay%dar (%c!o en deter(inados (o(entos@ de$ando 6arte del tra.a$o de (ani6%lar los
res%ltados al 6ro6io gestor. De.ido al r6ido rit(o en el desarrollo de este S<BD@ es (%y con/eniente
07
cons%ltar sie(6re la doc%(entaci*n de n%estra /ersi*n 6ara conocer s%s 6osi.ilidades concretas.
Mostrare(os los as6ectos destaca.les@ &acilidades o li(itaciones >%e o&rece MySQL res6ecto al
Leng%a$e SQL.
-.2.1 )unciones au&iliares
Las &%nciones a%9iliares >%e 6ode(os %tili"ar en n%estras cons%ltas ?tanto en la 6royecci*n de las
col%(nas co(o en condiciones en s% selecci*nA se 6%eden clasi&icar segn el ti6o de datos con el >%e
tra.a$an.
(ys>lN select concat?6arte@T T@ti6oA as 6rod%cto@
CN 6s%gerido as T6recio s%geridoT@
CN 6s%gerido E )7 as 6recioVconVen/io
CN from 6rod%ctosQ
ECCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCE
W 6rod%cto W 6recio s%gerido W 6recioVconVen/io W
ECCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCE
W Procesador , <F" W N:LL W N:LL W
W Procesador ,.+ <F" W 01.77 W +1.77 W
W Procesador ).4 <F" W ,71.77 W ,)1.77 W
W Procesador 0 <F" W 137.77 W 147.77 W
W =2M ),5MB W )7.77 W ,7.77 W
W =2M ,13MB W 01.77 W +1.77 W
W Disco D%ro 57 <B W 37.77 W 47.77 W
W Disco D%ro ),7 <B W 45.77 W 55.77 W
W Disco D%ro ,77 <B W ))7.77 W ),7.77 W
W Disco D%ro +7 <B W N:LL W N:LL W
W Monitor )7,+9543 W 57.77 W ;7.77 W
W Monitor )7,+9543 W 34.77 W 44.77 W
ECCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCE
), roPs in set ?7.0) secA
2lg%nos e$e(6los de las &%nciones (s %sadas:
6peradores l+gicos
Co(6araci*n. 26arte de los estndares Z@ cZ@ M@ N@ IS N:LL@ IS N-T N:LL@ B8TO88N@ IN@
0)
destacan C-2L8SC8@ INT8=\2L@ L82ST@ <=82T8ST 6ara tra.a$ar con listas de /alores.
(ys>lN select ^ from 6rod%ctos where 6s%gerido is not nullQ
(ys>lN select ^ from 6rod%ctos where 6s%gerido between 37 and 077Q
(ys>lN select ^ from 6rod%ctos where cla/e in ?77)@ 771@ 7))AQ
-tros 8$e(6los:
Listar los 6rod%ctos >%e sean JDisco D%roK
Listar los 6rod%ctos donde el 6recio s%gerido sea (ayor a 47.
Listar los 6rod%ctos con s%s 6recios del 6ro/eedor JTecnoCGK.
7ontrol del flujo de ejecuci+n
C2S8 .. OF8N .. TF8N .. 8LS8 .. 8ND: Si(ilar a la estr%ct%ra >%e creara(os (ediante
c%al>%ier leng%a$e de 6rogra(aci*n:
(ys>lN S18172 7&S1 9:1. )N7 2:1. Ttr%eT 18S1 T&alseT 1.;Q
ECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE
W C2S8 OF8N )N7 TF8N Ttr%eT 8LS8 T&alseT 8ND W
ECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE
W tr%e W
ECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE
) roP in set ?7.77 secA
-tro e$e(6lo:
(ys>lN select ?case when 6s%gerido is null
CN then 7.77 else 6s%gerido endA as 6s%gerido
CN from 6rod%ctosQ
ECCCCCCCCCCCE
W 6s%gerido W
ECCCCCCCCCCCE
W 7.77 W
W 01.77 W
W ,71.77 W
W 137.77 W
0,
W )7.77 W
W 01.77 W
W 37.77 W
W 45.77 W
W ))7.77 W
W 7.77 W
W 57.77 W
W 34.77 W
ECCCCCCCCCCCE
), roPs in set ?7.77 secA
I#?e96r)@e96r,@e96r0A: T6ica estr%ct%ra condicional@ si la e96r) es cierta@ de/%el/e la e96r,@ en
caso contrario@ la e96r0:
(ys>lN S18172 I<?S2*7=>?TtestT@Ttest)TA@TnoT@TyesTAQ
ECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE
W I#?ST=CMP?TtestT@Ttest)TA@TnoT@TyesTA W
ECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE
W no W
ECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE
) roP in set ?7.77 secA
<unciones para trabajar con cadenas de caracteres ?s+lo algunos ejemplos)
C-NC2T@ INST= ?encontrar en %na cadenaA@ S:BST=IN<@ LC2S8B=C2S8@ L8N<TF@
=8PL2C8@ T=IM@ entre otras@ son &%nciones si(ilares a las >%e 6ode(os encontrar en
leng%a$es de 6rogra(aci*n 6ara (ani6%lar cadenas de caracteres.
Q:-T8: deli(ita %na cadena de te9to correcta(ente 6ara e/itar 6ro.le(as al %sarla en
sentencias SQL. La cadena res%ltante estar deli(itada 6or co(illas si(6les. Las co(illas@ el
/alor 2SCII N:L y otros 6otencial(ente con&licti/os sern de/%eltos 6recedidos del carcter TRT.
8NC-D8BD8C-D8@ C=SPT@ C-MP=8SSB:NC-MP=8SS@ MD1@ etc. Son &%nciones >%e nos
6%eden ay%dar (%c!o en el al(acena(iento de datos sensi.les co(o contraseDas@ etc.
<unciones num@ricas
Los o6eradores arit(ticos clsicos 6ara reali"ar todo ti6o de o6eraciones@ s%(a@ resta@ di/isi*n@
00
6rod%cto@ di/isi*n entera@ etc.
#%nciones (ate(ticas de todo ti6o@ trigono(tricas@ logart(icas@ etc.
<unciones para trabajar con fechas ( horas
-.tenci*n de &ec!as en c%al>%ier &or(ato: D2T8V#-=M2T@ D2T8@ N-O@ C:==D2T8@ etc.
Mani6%laci*n y clc%los con &ec!as: 2DDD2T8@ 2DDTIM8@ C-N\8=TVTd@ D2T8VDI##@
etc.
$.3 !anipulacin de "ilas
Para la (ani6%laci*n de &ilas dis6one(os de las sentencias SQL INS8=T@ :PD2T8 y D8L8T8.
Para agregar %n registro@ MySQL %tili"a la instr%cci*n INS8=T. C%ando se insertan datos es i(6ortante
recordar los no(.res y ti6os de datos de las col%(nas de la ta.la.
8$e(6lo:
(ys>lN insert into 6ro/eedores 'alues?TC\2T@Tcrdito@e&ecti/oTAQ
(ys>lN insert into 6ro/eedores 'alues?TC-MP:C8NT=-T@Te&ecti/oTAQ
-tros e$e(6los:
Insertar 0 6ro/eedores con 6or lo (enos 1 6rod%ctos y s%s res6ecti/os 6recios.
Para eli(inar %n registro@ MySQL %tili"a la instr%ccion D8L8T8. 8sta instr%ccion es 6arecida a la
instr%ccion S8L8CT@ con la sal/edad de >%e co(o se eli(ina el registro co(6leto no es necesario
es6eci&icar ning%na col%(na. Tan solo necesita(os indicar el no(.re de la ta.la y la condicion. Por
e$e(6lo@ 6ara eli(inar el registro de la ta.la productos:
8$e(6lo:
(ys>lN delete from 6ro/eedores where e(6resaZTC-MP:C8NT=-TQ
Sa se !a es6licado co(o agregar registros %tili"ando la instr%ccion INS8=T@ co(o eli(inarlos
%tili"ando D8L8T8 y co(o rec%6erarlos %tili"ando S8L8CT. Todo lo >%e nos >%eda 6or a6render es
co(o (odi&icar los registros e9istentes.
8$e(6lo:
(ys>lN update 6ro/eedores set 6ago Z Tcrdito@e&ecti/oT where e(6resa ZTTecnoCGTQ
-tros e$e(6los:
Corregir el 6recio s%gerido 6ara los 6rod%ctos Procesador de ,<F"@ Disco D%ro de 57<B y
0+
(onitor de 41F" con las sig%ientes cantidades res6ecti/a(ente: )77@ 57 y ;7.
8n alg%nos casos@ MySQL nos 6ro6orciona e9tensiones o (odi&icadores >%e nos 6%eden ay%dar (%c!o
en deter(inadas sit%aciones.
INS8=T _D8L2S8D`. C%ando la sentencia INS8=T 6%ede tardar (%c!o en de/ol/er el
res%ltado ?ta.las (%y grandes o con (%c!os ndices >%e de.en recalc%larse al insertar %na
n%e/a &ilaA 6%ede ser interesante aDadir la 6ala.ra cla/e D8L2S8D 6ara >%e MySQL nos
de/%el/a el control y realice la inserci*n en seg%ndo 6lano.
INS8=T __L-OVP=I-=ITS` W _FI<FVP=I-=ITS``. 8n ta.las (%y oc%6adas@ donde (%c!os
clientes reali"an cons%ltas constante(ente@ %na inserci*n lenta 6%ede .lo>%ear al resto de
clientes d%rante %n tie(6o. Mediante estos (odi&icadores 6ode(os /ariar este co(6orta(iento.
INS8=T _I<N-=8`. 8ste (odi&icador con/ierte los errores de inserci*n en a/isos. Por
e$e(6lo@ si intenta(os insertar %na &ila >%e d%6lica %na cla/e 6ri(aria e9istente@ el S<BD nos
de/ol/er %n a/iso ?y no insertar la n%e/a &ilaA@ 6ero n%estro 6rogra(a cliente 6odr contin%ar
con s% co(etido si el res%ltado de la inserci*n no era i(6ortante 6ara s% correcta e$ec%ci*n.
:PD2T8 _L-OVP=I-=ITS` _I<N-=8`. Se co(6ortan de ig%al (odo >%e en la sentencia
INS8=T.
D8L8T8 _Q:IC]`. Borra elBlos registros sin act%ali"ar los ndices.
T=:NC2T8. 8s %na &or(a (%y r6ida de .orrar todos los registros de %na ta.la@ si no
necesita(os sa.er el n(ero de registros >%e !a .orrado. D8L8T8 #=-M Mta.laN reali"a el
(is(o co(etido@ 6ero de/%el/e el n(ero de registros .orrados.
L2STVINS8=TVID?A. De/%el/e el lti(o identi&icador asignado a %na col%(na de ti6o
2:T-VINC=8M8NT des6%s de %na sentencia INS8=T.
$.4 Prctica 2
2iempo estimadoA 01 (in.
1. Conectarse a la .ase de datos de(o >%e le corres6onda
2. <enerar %n arc!i/o practica2_demo.sql con las instr%cciones >%e se generen en los sig%ientes
6asos.
3. Crear la ta.la pelicula con los sig%ientes ca(6os
7ampo 2ipo
Id INT a%toVincre(ent
tit%lo \2=CF2=?3+A
director \2=CF2=?),5A
actor \2=CF2=?),5A
01
4. Mostrar la ta.la creada y descri.irla ?co(ando descri.eA.
5. Insertar los sig%ientes registros
2Btulo ;irector &ctor
Blade =%nner =idley Scott Farrison #ord
2lien =idley Scott Sigo%rney Oea/er
Doce (onos Terry <illia( Br%ce Oillis
Contact =o.ert de(ecGis Jodie #oster
Tron Ste/en Lis.erger Je&& Bridges
La g%erra de las gala9ias <eorge L%cas Farrison #ord
. Listar 6elc%la?sA de !"idley #cott$
!. Listar tt%los de las 6elc%las de !"idley #cott$@ ordenados al&a.tica(ente
". Ca(.iar el tt%lo de la 6elc%la !#tar %ars$ 6or !&a 'uerra de las 'ala(ias$
#. 8li(inar las 6elc%las de !)arrison *ord$
1$. Crear la ta.la 6ersona con los ca(6os id ?8nterno no n%loA@ no(.re ?/arc!ar de )3 no n%loA y
a6ellidos ?/arc!ar de 3+ no n%lo y co(o de&a%lt cadena /acaA
11. Modi&icar ta.la 6ersona@ al ca(6o no(.re ca(.ir a /arc!ar de 0, no n%lo@ agregar la col%(na
edad ti6o entero no n%lo.
12. =eno(.rar ta.la 6ersona a indi/id%o.
13. 2gregar col%(a so6orte a la ta.la 6elic%la con en%(eraci*n ?en%(A T\FST y TD\DT.
14. Insertar dos registros (as a la ta.la 6elic%la@ agregando ade(s de los ca(6os e9istentes@ el
ti6o de so6orte de la 6elc%la@ ade(s act%ali"ar los registros e9istentes con %n ti6o de so6orte.
15. 2gregar col%(na categoria a la ta.la 6elic%la con el con$%nto ?setA TcienciaC&icci*nT@ TterrorT@ y
Tt!rillerT
1. Insertar dos 6elc%las (as >%e re6resenten el %so de con$%ntos
$.5 Prctica 3
2iempo estimadoA 17 (in.
1. 8n .ase a la sig%iente salida@ genera la instr%cci*n SQL
ECCCCCCCCCCCCECCCCCCCE
W 6arte W total W
ECCCCCCCCCCCCECCCCCCCE
03
W Disco D%ro W + W
W Monitor W , W
W Procesador W + W
W =2M W , W
ECCCCCCCCCCCCECCCCCCCE
+ roPs in set ?7.77 secA
2. -.tener el 6rod%cto (as caro@ as co(o el 6ro/eedor >%e lo s%rte.
3. Listar todas los 6ro/eedores con s% 6rod%cto (as caro.
4. -.tener %n 6ro(edio de los 6recios >%e (ane$a cada 6ro/eedor.
5. Listar todos los 6ro/eedores con los 6rod%ctos >%e 6ro/een y s%s 6recios@ ordenados 6or
6ro/eedor@ 6rod%cto y s% 6recio.
.. !d"inistracin de MySQL
Las tareas ad(inistrati/as co(o la instalaci*n@ gesti*n de %s%arios@ co6ias de seg%ridad@ resta%raciones@
entre otras@ son tareas inel%di.les en c%al>%ier organi"aci*n. Las 6olticas@ los rec%rsos y 6re&erencias
de los ad(inistradores generan %na gran /ariedad de estilos y (ecanis(os 6ara lle/ar a ca.o estas
tareas@ 6or lo >%e no es 6osi.le !a.lar de (todos co(6leta(ente estandari"ados en estas reas.
8n este a6artado se conte(6lan las o6ciones de %so co(n 6ara la ad(inistraci*n de %n ser/idor
MySQL. 89isten tantas alternati/as >%e no es 6osi.le incl%irlas todas en %n c%rso. Por tal (oti/o@ en
este ca6t%lo se tratan alg%nos te(as de i(6ortancia 6ara el ad(inistrador@ desde %na 6ers6ecti/a
general@ >%e 6er(iten o.tener %na /isi*n glo.al de las 6osi.ilidades 6rcticas de las !erra(ientas
ad(inistrati/as.
8ste ca6t%lo se inicia con %na .re/e reseDa del 6roceso de instalaci*n de MySQL. 8n la act%alidad es
6osi.le reali"ar la instalaci*n a 6artir de .inarios e(6a>%etados >%e &acilitan enor(e(ente el 6roceso.
La ad(inistraci*n de %s%arios se trata con algo (s de detalle@ incl%yendo %na .re/e descri6ci*n de las
ta.las del directorio de datos. Para los te(as de co6ias de seg%ridad y resta%raci*n se (%estran los
co(andos y %tilidades de (ayor %so en la 6rctica o(itiendo alg%nos detalles tcnicos 6oco %s%ales.
La o6ti(i"aci*n se trata de (anera (%y general@ e96oniendo los te(as .sicos >%e en la 6rctica son
6asados 6or alto.
#inal(ente@ se descri.e .re/e(ente c*(o reali"ar la re6licaci*n de datos en %n ser/idor escla/o.
%.1 Instalacin de !&S'L
La instalaci*n de MySQL no re6resenta (ayores 6ro.le(as@ ya >%e (%c!as distri.%ciones incl%yen
6a>%etes con los >%e reali"ar la instalaci*n y con&ig%raci*n .sica. Sin e(.argo@ a>% /ere(os la
instalaci*n de MySQL %tili"ando el c*digo &%ente >%e se 6%ede o.tener en PPP.(ys>l.co(. Ca.e
destacar >%e el %so de %na /ersi*n de MySQL co(6ilada tiene la /enta$a de >%e@ 6ro.a.le(ente@ se
ada6tar (%c!o (e$or al entorno del ser/idor donde se e$ec%tar@ 6ro6orcionando as %n (e$or
rendi(iento. Por contra@ i(6licar (s tra.a$o en caso de >%e s%r$an errores en la /ersi*n y tenga(os
>%e act%ali"arla. Las instr%cciones >%e se descri.en en este a6artado se .asan en la doc%(entaci*n
04
incl%ida en la distri.%ci*n.
8n 6ri(er l%gar@ de.e(os aseg%rarnos de >%e conta(os con las li.reras y %tilidades necesarias 6ara
co(6ilar los &ic!eros &%ente. Princi6al(ente la lista de /eri&icaci*n de.e incl%ir los &ic!eros sig%ientes:
Co(6ilador gcc
Li.reras li.gc
8l 6roceso de instalaci*n incl%ye los sig%ientes 6asos:
Desco(6ri(ir los arc!i/os &%ente
cd B%srBlocalBsrc
tar 9"/& (ys>lC\8=SI-N.tar.g"
cd (ys>lC\8=SI-N
Con&ig%rar la /ersi*n de MySQL >%e /a(os a o.tener. 8l scri6t Tcon&ig%reT ad(ite (%c!os
6ar(etros >%e de.ere(os e9a(inar (ediante la o6ci*n TCC!el6T. Segn los es>%e(as de ta.la
>%e necesite(os o e9tensiones (%y concretas >%e de.a(os %tili"ar@ de.ere(os e9a(inar con
c%idado s%s o6ciones. 8n s% /ersi*n (s si(6le lo e$ec%tara(os de la sig%iente (anera:
.Bcon&ig%re e6re&i9ZB%srBlocalB(ys>l
Co(6ilar. Procedere(os a co(6ilar si no !a !a.ido 6ro.le(as con la con&ig%raci*n. 8l
6ar(etro C6re&i9 es6eci&ica la r%ta del siste(a de &ic!eros donde ser instalado.
(aGe
Instalar el siste(a el ser/idor ya co(6ilado@ (ediante la sig%iente instr%cci*n:
(aGe install
Crear la .ase de datos inicial del ser/idor@ la >%e al(acenar los %s%arios y 6ri/ilegios. 8sta
.ase de datos es i(6rescindi.le 6ara >%e los %s%arios se 6%edan conectar al ser/idor.
scri6tsB(ys>lVistallVd.
Crear %n n%e/o %s%ario y s% gr%6o@ 6ara >%e el ser/icio se e$ec%te en %n entorno de 6ri/ilegios
05
restringido en el siste(a o6erati/o. 8n ningn caso se reco(ienda >%e el %s%ario >%e e$ec%te el
ser/icio (ys>ld sea root.
gro%6add (ys>l
%seradd Cg (ys>l (ys>l
Todos los arc!i/os de.en ser 6ro6iedad de root ?(ys>l no de.e 6oder (odi&icarse a s (is(oA y
del gr%6o (ys>l. 8l directorio de datos ser del %s%ario (ys>l 6ara >%e 6%eda tra.a$ar con las
.ases de datos@ &ic!eros de registro@ etc.
c!oPn C= root B%srBlocalB(ys>l
c!gr6 C= (ys>l B%srBlocalB(ys>l
c!oPn C= (ys>l B%srBlocalB(ys>lB/ar
Crear el arc!i/o de con&ig%raci*n. La distri.%ci*n incl%ye /arios arc!i/os de con&ig%raci*n >%e
sir/en co(o 6lantilla 6ara ada6tarlo a n%estras necesidades. 8n este caso@ %tili"a(os la
con&ig%raci*n (edia co(o 6lantilla. -6cional(ente 6ode(os editar el arc!i/o BetcB(y.cn&
c6 s%66ortC&ilesB(yC(edi%(.cn& BetcB(y.cn&
Lan"ar el ser/idor
B%srBlocalB(ys>lB.inB(ys>lVsa&e f
8n este estado@ el ser/idor no 6%ede ser/ir an de S<BD. Por de&ecto@ tendre(os creado %n
%s%ario TrootT sin contraseDa >%e 6odr acceder tanto desde el e>%i6o local co(o re(ota(ente.
8l sig%iente 6aso ser asignar %na contraseDa a este %s%ario y re6asar los %s%arios y 6ri/ilegios
de&inidos. Para asignar la contraseDa@ de.ere(os !acer lo sig%iente:
(ys>lad(in C% root 6assPord Jn%e/a6assPdK
(ys>lad(in C% root C! !ostVna(e 6assPord Jn%e/a6assPdK
Pode(os 6ro.ar el &%nciona(iento del S<BD conectando con el cliente T(ys>lT:
(ys>l C% root C6
0;
\ea(os a!ora alg%nas caractersticas del ser/idor >%e aca.a(os de instalar:
m(s,ld. 8l 6ri(er (todo es lan"arlo directa(ente@ se le 6%eden es6eci&icar las o6ciones >%e el
ad(inistrador desee.
m(s,ld)safe. 8s %n scri6t >%e e$ec%ta (ys>ld garanti"ando %na con&ig%raci*n seg%ra. 8s
(%c!o (s reco(enda.le >%e e$ec%tar (ys>ld directa(ente.
m(s,l)ser'er. 8s %n g%i*n >%e reali"a dos tareas: iniciar y detener el ser/idor (ys>ld con los
6ar(etros start y sto6 res6ecti/a(ente. :tili"a (ys>ldVsa&e 6ara lan"ar el ser/idor (ys>ld. No
es co(n encontrarlo con ese no(.re@ ya >%e general(ente se co6ia co(o el arc!i/o
BetcBinit.dB(ys>l
m(s,l)multi. Per(ite la e$ec%ci*n de (lti6les ser/idores de &or(a si(%ltanea.
Para detener el ser/idor .sica(ente tene(os dos (todos:
-etc-init.d-m(s,l stop. 8s el (ecanis(o estndar en los siste(as ti6o :NIH. 2%n>%e los
directorios 6%eden ca(.iar.
C m(s,ladmin Du root Dp shutdown. 8s la %tilidad 6ara reali"ar tareas ad(inistrati/as en %n
ser/idor MySQL@ en este caso le 6asa(os el 6ar(etro Ts!%tdoPnT 6ara detener el ser/icio.
Para >%e los (ensa$es del ser/idor a6are"can en es6aDol@ se de.e e$ec%tar con el 6ar(etro
+lan'ua'e:
L (ys>ld elang%ageZs6anis!
-tra o6ci*n es agregar en el arc!i/o BetcB(y.cn& %na lnea en la secci*n _(ys>ld`
_(ys>ld`
lang%age Z B%srBs!areB(ys>lBs6anis!
%.2 Usuarios & privile(ios
8l acceso al ser/idor MySQL est controlado 6or %s%arios y 6ri/ilegios. Los %s%arios del ser/idor
MySQL no tienen ning%na corres6ondencia con los %s%arios del siste(a o6erati/o. 2%n>%e en la
6rctica es co(n >%e algn ad(inistrador de MySQL asigne los (is(os no(.res >%e los %s%arios
tienen en el siste(a@ son (ecanis(os total(ente inde6endientes y s%ele ser aconse$a.le en general.
8l %s%ario ad(inistrador del siste(a MySQL se lla(a root. Ig%al >%e el s%6er%s%ario de los siste(as
ti6o :NIH.
+7
2de(s del %s%ario root@ las instalaciones n%e/as de MySQL incl%yen el %s%ario an*ni(o@ >%e tiene
6er(isos so.re la .ase de datos test. Si >%ere(os@ ta(.in 6ode(os restringirlo asignndole %na
contraseDa. 8l %s%ario an*ni(o de MySQL se re6resenta 6or %na cadena /aca. \e(os otra &or(a de
asignar contraseDas a %n %s%ario@ desde el cliente de (ys>l y co(o %s%ario root:
(ys>lN set 6assPord &or TT'Tlocal!ostT Z 6assPord?Tn%e/o6assPdTAQ
La ad(inistraci*n de 6ri/ilegios y %s%arios en MySQL se reali"a a tra/s de las sentencias:
E*&.2. -torga 6ri/ilegios a %n %s%ario@ en caso de no e9istir@ se crear el %s%ario.
*1F6G1. 8li(ina los 6ri/ilegios de %n %s%ario e9istente.
S12 >&SS96*;. 2signa %na contraseDa.
;*6> HS1*. 8li(ina %n %s%ario.
..2.1 La sentencia /0!1T
La sinta9is si(6li&icada de grant consta de tres secciones. No 6%ede o(itirse ning%na@ y es i(6ortante
el orden de las (is(as:
grant lista de 6ri/ilegios
on .ase de datos.ta.la
to %s%ario
1jemplo
Creaci*n de %n n%e/o %s%ario al >%e se otorga alg%nos 6ri/ilegios
(ys>lN grant updateI insertI select
CN on de(o.6recios
CN to /isitante'local!ost Q
8n la 6ri(era lnea se es6eci&ican los 6ri/ilegios >%e sern otorgados@ en este caso se 6er(ite
act%ali"ar ?updateA@ insertar ?insertA y cons%ltar ?selectA. La seg%nda lnea es6eci&ica >%e los
6ri/ilegios se a6lican a la ta.la 6recios de la .ase de datos demo. 8n la lti(a lnea se
enc%entra el no(.re del %s%ario y el e>%i6o desde el >%e se /a a 6er(itir la cone9i*n.
8l co(ando grant crea la c%enta si no e9iste y@ si e9iste@ agrega los 6ri/ilegios es6eci&icados. 8s 6osi.le
asignar %na contraseDa a la c%enta al (is(o tie(6o >%e se crea y se le otorgan 6ri/ilegios:
(ys>lN grant updateI insertI select
CN on de(o.6recios
+)
CN to /isitante'local!ost identi&ied .y Tn%e/o6assPdTQ
8n la (is(a sentencia es 6osi.le ta(.in otorgar 6er(isos a (s de %n %s%ario y asignarles@ o no@
contraseDa:
(ys>lN grant updateI insertI select
CN on de(o.6recios
CN to /isitante'local!ost@
CN yo'local!ost identified b( Tn%e/o6assPdT@
CN t%'e>%i6o.re(oto.co(Q
..2.2 %s$eci,icacin de lu+ares ori+en de la cone&in
MySQL 6ro6orciona (ecanis(os 6ara 6er(itir >%e el %s%ario realice s% cone9i*n desde di&erentes
e>%i6os dentro de %na red es6ec&ica@ s*lo desde %n e>%i6o@ o nica(ente desde el 6ro6io ser/idor.
(ys>lN grant updateI insertI select
CN on de(o.6recios
CN to /isitante'Tb.e(6resa.co(TQ
8l carcter b se %tili"a de la (is(a &or(a >%e en el co(ando liGe: s%stit%ye a c%al>%ier cadena de
caracteres. 8n este caso@ se 6er(itira el acceso del %s%ario T/isitanteT ?con contraseDa@ si la t%/iese
de&inidaA desde c%al>%ier e>%i6o del do(inio Te(6resa.co(T. -.sr/ese >%e es necesario entreco(illar
el no(.re del e>%i6o origen con el &in de >%e sea ace6tado 6or MySQL.
8ntonces@ 6ara 6er(itir la entrada desde c%al>%ier e>%i6o en Internet@ escri.ira(os:
CN to /isitante'TbT
-.tendra(os el (is(o res%ltado o(itiendo el no(.re del e>%i6o origen y escri.iendo si(6le(ente el
no(.re del %s%ario:
CN to /isitante
Los an&itriones /lidos ta(.in se 6%eden es6eci&icar con s%s direcciones IP.
+,
to /isitante');,.)35.),5.)7
to /isitante'T);,.)35.),5.bT
Los caracteres I bI y IVI no se 6er(iten en los no(.res de los %s%arios.
..2.3 %s$eci,icacin de bases de datos y tablas
Des6%s de anali"ar las o6ciones re&erentes a los l%gares de cone9i*n 6er(itidos@ /ea(os a!ora c*(o
6ode(os li(itar los 6ri/ilegios a .ases de datos@ ta.las y col%(nas.
8n el sig%iente e$e(6lo otorga(os 6ri/ilegios so.re todas las ta.las de la .ase de datos demo.
(ys>lN grant all
CN on de(o.^
CN to T/isitanteT'Tlocal!ostTQ
Pode(os o.tener el (is(o res%ltado de esta &or(a:
(ys>lN use demoQ
(ys>lN grant all
CN on ^
CN to T/isitanteT'Tlocal!ostTQ
De ig%al (odo@ al es6eci&icar s*lo el no(.re de %na ta.la se inter6retar >%e 6ertenece a la .ase de
datos en %so:
(ys>lN use demoQ
(ys>lN grant all
CN on 6recios
CN to T/isitanteT'Tlocal!ostTQ
-6ciones 6ara la cla%s%la on del co(ando grant
6pci+n Significado
^.^ Todas las .ases de datos y todas las ta.las
.ase.^ Todas las ta.las de la .ase de datos es6eci&icada
+0
ta.la Ta.la es6eci&icada de la .ase de datos en %so
^ Todas las ta.las de la .ase de datos en %so
..2. %s$eci,icacin de colu"nas
2 contin%aci*n 6resenta(os %n e$e(6lo donde se es6eci&ican las col%(nas so.re las >%e se otorgan
6ri/ilegios con el co(ando grant:
(ys>lN grant update?6recio@e(6resaA
CN on de(o.6recios
CN to /isitante'local!ostQ
Pode(os es6eci&icar 6ri/ilegios di&erentes 6ara cada col%(na o gr%6os de col%(nas:
(ys>lN grant update?6recioA@ select ?6recio@ e(6resaA
CN on de(o.6recios
CN to /isitante'local!ostQ
..2.' Ti$os de $rivile+ios
MySQL 6ro6orciona %na gran /ariedad de ti6os de 6ri/ilegios.
Pri/ilegios relacionados con ta.las: alterI createI deleteI dropI inde%I insertI selectI update
2lg%nos 6ri/ilegios ad(inistrati/os: &ile@ 6roccess@ s%6er reload@ re6lication client@ grant o6tion@
s!%tdoPn
2lg%nos 6ri/ilegios 6ara &ines di/ersos: lock tablesI show databasesI create temporar(
tables.
8l 6ri/ilegio all otorga todos los 6ri/ilegios e9ce6t%ando el 6ri/ilegio grant option. S el 6ri/ilegio
usage no otorga ning%no@ lo c%al es til c%ando se desea@ 6or e$e(6lo@ si(6le(ente ca(.iar la
contraseDa:
grant usage
on ^.^
to /isitante'local!ost identified b( TsecretoTQ
++
Ti6os de 6ri/ilegios en MySQL
2ipo de pri'ilegio 6peraci+n ,ue permite
all Jpri'ilegesK -torga todos los 6ri/ilegios e9ce6to grant option
usage No otorga ningn 6ri/ilegio
alter Pri/ilegio 6ara alterar la estr%ct%ra de %na ta.la
create Per(ite el %so de create table
delete Per(ite el %so de delete
drop Per(ite el %so de drop table
inde% Per(ite el %so de inde% y drop inde%
insert Per(ite el %so de insert
select Per(ite el %so de select
update Per(ite el %so de update
file Per(ite le %so de select . . . into outfile y load
data infile
process Per(ite el %so de show full procces list
super Per(ite la e$ec%ci*n de co(andos de s%6er/isi*n
reload Per(ite el %so de flush
replication client Per(ite 6reg%ntar la locali"aci*n de (aestro y
escla/o
replication sla'e Per(ite leer los binlo' del (aestro
grant option Per(ite el %so de grant y re'oke
shutdown Per(ite dar de .a$a al ser/idor
lock tables Per(ite el %so de lock tables
show tables Per(ite el %so de show tables
create temporar( tables Per(ite el %so de create temporar( table
8n entornos grandes@ es &rec%ente encontrarse en la necesidad de delegar el tra.a$o de ad(inistrar %n
ser/idor de .ases de datos 6ara >%e otros %s%arios@ ade(s del ad(inistrador@ 6%edan res6onsa.ili"arse
de otorgar 6ri/ilegios so.re %na .ase de datos 6artic%lar. 8sto se 6%ede !acer en MySQL con el
6ri/ilegio grant option:
(ys>lN grant allI grant option
CN on de(o.^
CN to o6erador'local!ostQ
+1
8l (is(o res%ltado se 6%ede o.tener con la sig%iente sinta9is alternati/a:
(ys>lN grant all
CN on de(o.^
CN to o6erador'local!ost
CN with grant optionQ
De este (odo el %s%ario operador 6odr dis6oner de todos los 6ri/ilegios so.re la .ase de datos demo@
incl%ido el de controlar el acceso a otros %s%arios.
..2.- O$ciones de encri$tacin
MySQL 6%ede esta.lecer cone9iones seg%ras encri6tndolas (ediante el 6rotocolo SSL^Q de esta
(anera@ los datos >%e se trans(iten ?tanto la cons%lta@ en %n sentido@ co(o el res%ltado@ en el otroA
entre el cliente y el ser/idor estarn 6rotegidos contra intr%sos. Para es6eci&icar >%e %n %s%ario de.e
conectarse o.ligatoria(ente con este 6rotocolo@ se %tili"a la cl%s%la re>%ire:
(ys>lN grant all
CN on ^.^
CN to /isitante'local!ost
CN re,uire sslQ
Las cone9iones encri6tadas o&recen 6rotecci*n contra el ro.o de in&or(aci*n@ 6ero s%6onen %na carga
adicional 6ara el ser/icio@ >%e de.e desencri6tar la 6etici*n del cliente y encri6tar la res6%esta ?ade(s
de %n 6roceso (s largo de negociaci*n al conectarA@ 6or ello@ (er(an el rendi(iento del S<BD.
..2.. Li"ites de uso
Los rec%rsos &sicos del ser/idor sie(6re son li(itados: si se conectan (%c!os %s%arios al (is(o
tie(6o al ser/idor y reali"an cons%ltas o (ani6%laciones de datos co(6le$as@ es 6ro.a.le >%e 6%eda
decaer el rendi(iento nota.le(ente. :na 6osi.le sol%ci*n a este 6ro.le(a es li(itar a los %s%arios el
tra.a$o >%e 6%eden 6edir al ser/idor con tres 6ar(etros:
M9i(o n(ero de cone9iones 6or !ora.
M9i(o n(ero de cons%ltas 6or !ora.
M9i(o n(ero de act%ali"aciones 6or !ora.
La sinta9is de estas li(itaciones es co(o se (%estra a contin%aci*n:
(ys>lN grant all
+3
CN on ^.^
CN to
CN with =&L)76.172I6.S)>1*):6H* 0
CN =&L)MH1*I1S)>1*):6H* 077
CN =&L)H>;&21S)>1*):6H* 07Q
..2.2 %li"inar $rivile+ios
8l co(ando re'oke 6er(ite eli(inar 6ri/ilegios otorgados con grant a los %s%arios. \ea(os %n
e$e(6lo re6resentati/o:
re'oke all
on ^.^
from /isitante'local!ostQ
2l e$ec%tar este co(ando se le retiran al %s%ario visitante todos s%s 6ri/ilegios so.re todas las .ases de
datos@ c%ando se conecta desde local,ost.
8l co(ando anterior no retira todos los 6ri/ilegios del %s%ario visitante@ s*lo se los retira c%ando se
conecta desde local,ost. Si el %s%ario se conecta desde otra localidad ?y tena 6er(iso 6ara !acerloA s%s
6ri/ilegios 6er(anecen intactos.
..2.3 %li"inar usuarios
2ntes de 6roceder a la eli(inaci*n de %n %s%ario@ es necesario aseg%rarse de >%e se le !an >%itado
6ri(ero todos s%s 6ri/ilegios. :na /e" aseg%rado este detalle@ se 6rocede a eli(inarlo (ediante el
co(ando drop user:
(ys>lN drop user /isitanteQ
..2.14 La base de datos de $rivile+ios5 "ys6l
MySQL al(acena la in&or(aci*n so.re los %s%arios y s%s 6ri/ilegios en %na .ase de datos co(o
c%al>%ier otra@ c%yo no(.re es (ys>l. Si e96lora(os s% estr%ct%ra@ entendere(os la (anera co(o
MySQL al(acena la in&or(aci*n de s%s %s%arios y 6ri/ilegios:
m(s,l C% root C6
(ys>lN use m(s,lQ
+4
(ys>lN show tablesQ
ECCCCCCCCCCCCCCCCCCCCCCCCCCCE
W Ta.lesVinV(ys>l W
ECCCCCCCCCCCCCCCCCCCCCCCCCCCE
W col%(nsV6ri/ W
W d. W
W e/ent W
W &%nc W
W generalVlog W
W !el6Vcategory W
W !el6VGeyPord W
W !el6Vrelation W
W !el6Vto6ic W
W !ost W
W nd.V.inlogVinde9 W
W 6l%gin W
W 6roc W
W 6rocsV6ri/ W
W ser/ers W
W sloPVlog W
W ta.lesV6ri/ W
W ti(eV"one W
W ti(eV"oneVlea6Vsecond W
W ti(eV"oneVna(e W
W ti(eV"oneVtransition W
W ti(eV"oneVtransitionVty6e W
W %ser W
ECCCCCCCCCCCCCCCCCCCCCCCCCCCE
,0 roPs in set ?7.77 secA
(ys>lN show columns from %serQ
ECCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCE
W #ield W Ty6e W N%ll W ]ey W De&a%lt W 89tra W
+5
ECCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCE
W Fost W c!ar?37A W N- W P=I W W W
W :ser W c!ar?)3A W N- W P=I W W W
W PassPord W c!ar?+)A W N- W W W W
W SelectV6ri/ W en%(?TNT@TSTA W N- W W N W W
W InsertV6ri/ W en%(?TNT@TSTA W N- W W N W W
W :6dateV6ri/ W en%(?TNT@TSTA W N- W W N W W
W DeleteV6ri/ W en%(?TNT@TSTA W N- W W N W W
W CreateV6ri/ W en%(?TNT@TSTA W N- W W N W W
W Dro6V6ri/ W en%(?TNT@TSTA W N- W W N W W
W =eloadV6ri/ W en%(?TNT@TSTA W N- W W N W W
W S!%tdoPnV6ri/ W en%(?TNT@TSTA W N- W W N W W
W ProcessV6ri/ W en%(?TNT@TSTA W N- W W N W W
W #ileV6ri/ W en%(?TNT@TSTA W N- W W N W W
W <rantV6ri/ W en%(?TNT@TSTA W N- W W N W W
W =e&erencesV6ri/ W en%(?TNT@TSTA W N- W W N W W
W Inde9V6ri/ W en%(?TNT@TSTA W N- W W N W W
W 2lterV6ri/ W en%(?TNT@TSTA W N- W W N W W
W S!oPVd.V6ri/ W en%(?TNT@TSTA W N- W W N W W
W S%6erV6ri/ W en%(?TNT@TSTA W N- W W N W W
W CreateVt(6Vta.leV6ri/ W en%(?TNT@TSTA W N- W W N W W
W LocGVta.lesV6ri/ W en%(?TNT@TSTA W N- W W N W W
W 89ec%teV6ri/ W en%(?TNT@TSTA W N- W W N W W
W =e6lVsla/eV6ri/ W en%(?TNT@TSTA W N- W W N W W
W =e6lVclientV6ri/ W en%(?TNT@TSTA W N- W W N W W
W CreateV/iePV6ri/ W en%(?TNT@TSTA W N- W W N W W
W S!oPV/iePV6ri/ W en%(?TNT@TSTA W N- W W N W W
W CreateVro%tineV6ri/ W en%(?TNT@TSTA W N- W W N W W
W 2lterVro%tineV6ri/ W en%(?TNT@TSTA W N- W W N W W
W CreateV%serV6ri/ W en%(?TNT@TSTA W N- W W N W W
W 8/entV6ri/ W en%(?TNT@TSTA W N- W W N W W
W TriggerV6ri/ W en%(?TNT@TSTA W N- W W N W W
W sslVty6e W en%(?TT@T2NST@TH17;T@TSP8CI#I8DTA W N- W W W W
+;
W sslVci6!er W .lo. W N- W W N:LL W W
W 917;Viss%er W .lo. W N- W W N:LL W W
W 917;Vs%.$ect W .lo. W N- W W N:LL W W
W (a9V>%estions W int?))A %nsigned W N- W W 7 W W
W (a9V%6dates W int?))A %nsigned W N- W W 7 W W
W (a9Vconnections W int?))A %nsigned W N- W W 7 W W
W (a9V%serVconnections W int?))A %nsigned W N- W W 7 W W
ECCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCE
0; roPs in set ?7.77 secA
(ys>lN show columns from d.Q
ECCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCE
W #ield W Ty6e W N%ll W ]ey W De&a%lt W 89tra W
ECCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCE
W Fost W c!ar?37A W N- W P=I W W W
W D. W c!ar?3+A W N- W P=I W W W
W :ser W c!ar?)3A W N- W P=I W W W
W SelectV6ri/ W en%(?TNT@TSTA W N- W W N W W
W InsertV6ri/ W en%(?TNT@TSTA W N- W W N W W
W :6dateV6ri/ W en%(?TNT@TSTA W N- W W N W W
W DeleteV6ri/ W en%(?TNT@TSTA W N- W W N W W
W CreateV6ri/ W en%(?TNT@TSTA W N- W W N W W
W Dro6V6ri/ W en%(?TNT@TSTA W N- W W N W W
W <rantV6ri/ W en%(?TNT@TSTA W N- W W N W W
W =e&erencesV6ri/ W en%(?TNT@TSTA W N- W W N W W
W Inde9V6ri/ W en%(?TNT@TSTA W N- W W N W W
W 2lterV6ri/ W en%(?TNT@TSTA W N- W W N W W
W CreateVt(6Vta.leV6ri/ W en%(?TNT@TSTA W N- W W N W W
W LocGVta.lesV6ri/ W en%(?TNT@TSTA W N- W W N W W
W CreateV/iePV6ri/ W en%(?TNT@TSTA W N- W W N W W
W S!oPV/iePV6ri/ W en%(?TNT@TSTA W N- W W N W W
W CreateVro%tineV6ri/ W en%(?TNT@TSTA W N- W W N W W
W 2lterVro%tineV6ri/ W en%(?TNT@TSTA W N- W W N W W
W 89ec%teV6ri/ W en%(?TNT@TSTA W N- W W N W W
17
W 8/entV6ri/ W en%(?TNT@TSTA W N- W W N W W
W TriggerV6ri/ W en%(?TNT@TSTA W N- W W N W W
ECCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCCCECCCCCCECCCCCECCCCCCCCCECCCCCCCE
,, roPs in set ?7.77 secA
(ys>lN show columns from ta.lesV6ri/Q
8s 6osi.le reali"ar (odi&icaciones directa(ente so.re estas ta.las y o.tener los (is(os res%ltados >%e
si %tili"ra(os los co(andos grantI re'okeI set password o drop user:
(ys>lN update user
CN set PassPord Z password?Tn%e/o6assPdTA
CN where :ser ZT/isitanteT and Fost Z Tlocal!ostTQ
(ys>lN flush pri'ilegesQ
8l co(ando flush pri'ileges solicita a MySQL >%e /%el/a a leer las ta.las de 6ri/ilegios. 8n el
(o(ento de e$ec%tarse@ el ser/idor lee la in&or(aci*n de estas ta.las so.re 6ri/ilegios. Pero si se !an
alterado las ta.las (an%al(ente@ no se enterar de los ca(.ios !asta >%e %tilice(os el co(ando flush
pri'ileges.
Ta.las de la .ase de datos mysql
2abla 7ontenido
%ser C%entas de %s%ario y s%s 6ri/ilegios glo.ales
d. Pri/ilegios so.re .ases de datos
ta.lesV6ri/ Pri/ilegios so.re ta.las
col%(nsV6ri/ Pri/ilegios so.re col%(nas
!ost Pri/ilegios de otros e>%i6os an&itriones so.re
.ases de datos
No es 6osi.le eli(inar (ediante %n solo co(ando re/oGe todos los 6ri/ilegios de %n %s%ario.
1jemplo
Se otorgan derec!os a %n %s%ario con dos co(andos grant.
-.ser/ando el contenido de la .ase de datos de 6ri/ilegios@ 6ode(os entender el co(6orta(iento de
los co(andos grant y re/oGe. Pri(ero asigna(os 6ri/ilegios 6ara %sar el co(ando select al %s%ario
/isitante con dos co(andos grant: el 6ri(ero de ellos le 6er(ite el ingreso desde el ser/idor
n%estraVorg.org y el seg%ndo le otorga el (is(o ti6o de 6ri/ilegio@ 6ero desde c%al>%ier e>%i6o en
Internet.
1)
(ys>lN grant select
CN on ^.^
CN to /isitante'n%estraVorg.orgQ
Q%ery -]@ 7 roPs a&&ected ?7.77 secA
(ys>lN grant select
CN on ^.^
CN to /isitante'TbTQ
Q%ery -]@ 7 roPs a&&ected ?7.77 secA
Cons%ltando la ta.la user de la .ase de datos de 6ri/ilegios@ 6ode(os o.ser/ar los /alores ISI en la
col%(na del privile'io select.
(ys>lN select %ser@!ost@selectV6ri/ from %ser
CN where %serZT/isitanteTQ
ECCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCE
W %ser W !ost W selectV6ri/ W
ECCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCE
W /isitante W b W S W
W /isitante W n%estraVorg.org W S W
ECCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCE
, roPs in set ?7.77 secA
2!ora solicita(os eli(inar el privile'io select de todas las .ases de datos y de todos los e>%i6os en
Internet.
(ys>lN re'oke all
CN on ^.^
CN from /isitante'TbTQ
Q%ery -]@ 7 roPs a&&ected ?7.77 secA
1,
(ys>lN select %ser@!ost@selectV6ri/ from %ser
CN where %serZT/isitanteTQ
ECCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCE
W %ser W !ost W selectV6ri/ W
ECCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCE
W /isitante W b W N W
W /isitante W n%estraVorg.org W S W
ECCCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCECCCCCCCCCCCCCE
, roPs in set ?7.77 secA
8n la ta.la %ser o.ser/a(os >%e@ e&ecti/a(ente@ se !a eli(inado el 6ri/ilegio 6ara /isitante'TbT 6ero
no 6ara T/isitante'n%estraVorg.orgT. MySQL considera >%e son direcciones di&erentes y res6eta los
6ri/ilegios otorgados a %no c%ando se (odi&ica otro.
%.3 Prctica 4
2iempo estimado: )!r
1. Todas las instr%cciones creadas@ g%ardarlas en %n arc!i/o de no(.re 6ractica+.s>l
2. Ca(.iar 6assPord de root
3. Crear .ase de datos de(o,
4. Crear dos ta.las a s% criterio@ e$e(6lo ta.la)@ ta.la,
5. Crear los sig%ientes %s%arios y 6ri/ilegios
Hsuario >ri'ilegios 6bjeto 6rigen 7one%i+n
%s%ario) Todos los 6ri/ilegios ta.la) Local!ost@ direcci*n IP
de %n co(6aDero
%s%ario, Todos los 6ri/ilegios ta.la, Local!ost@ direcci*n IP
de %n co(6aDero
%s%ario) Select@ Insert@ :6date ta.la, Local!ost@ direcci*n IP
de %n co(6aDero
%s%ario, Select@ :6date ta.la) Local!ost@ direcci*n IP
de %n co(6aDero
%s%ario0 Todos los 6ri/ilegios ta.la)@ ta.la, C%al>%ier origen de
cone9i*n
. 8n .ase a las ta.las@ %s%arios y 6ri/ilegios esta.lecidos@ !acer las 6r%e.as corres6ondientes de
(anera local@ as co(o desde la direcci*n IP re(ota de&inida. Tra.a$ar en con$%nto con %n
10
co(6aDero.
%.4 Copias de se(uridad
Ningn siste(a es 6er&ecto ni est a sal/o de errores !%(anos@ cortes en el s%(inistro de la corriente
elctrica@ des6er&ectos en el !ardPare o errores de so&tPareQ as >%e %na la.or (s >%e reco(enda.le
del ad(inistrador del ser/idor de .ases de datos es reali"ar co6ias de seg%ridad y diseDar %n 6lan de
contingencia. Se de.en !acer ensayos del 6lan 6ara aseg%rar s% .%en &%nciona(iento y@ si se desc%.ren
ano(alas@ reali"ar los a$%stes necesarios.
No e9iste %na receta %ni/ersal >%e nos indi>%e c*(o lle/ar n%estras co6ias de seg%ridad de datos. Cada
ad(inistrador de.e diseDar el de s% siste(a de ac%erdo a s%s necesidades@ rec%rsos@ riesgos y el /alor
de la in&or(aci*n. MySQL o&rece /arias alternati/as de co6ia de seg%ridad de la in&or(aci*n. La
6ri(era >%e 6ode(os (encionar consiste si(6le(ente en co6iar los arc!i/os de datos. 8&ecti/a(ente@
es %na o6ci*n /lida y sencilla.
8n 6ri(era instancia son necesarios dos re>%isitos 6ara lle/arla a ca.o:
Conocer la %.icaci*n y estr%ct%ra del directorio de datos.
Parar el ser/icio MySQL (ientras se reali"a la co6ia.
8n c%anto a la %.icaci*n y estr%ct%ra del directorio@ recorde(os >%e la distri.%ci*n de MySQL %.ica el
directorio de datos en B%srBlocalB(ys>lB/ar@ las distri.%ciones <N:BLin%9 .asadas en 6a>%etes co(o
D8B o =PM %.ican@ 6or lo general@ los datos en B/arBli.B(ys>l.
Si 6or algn (oti/o no encontra(os el directorio de datos@ 6ode(os cons%ltarlo a MySQL. 8l
co(ando s!oP /aria.les nos (%estra todas las /aria.les dis6oni.les@ .asta reali"ar %n &iltro con la
cla%s%la liGe:
(ys>lN show 'ariables like TdatadirTQ
ECCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCE
W \aria.leVna(e W \al%e W
ECCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCE
W datadir W B/arBli.B(ys>lB W
ECCCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCE
) roP in set ?7.7) secA
:na /e" %.icados los arc!i/os@ detene(os la e$ec%ci*n del ser/idor: %n (odo sencillo de aseg%rarnos
de >%e la .ase de datos no ser (odi&icada (ientras ter(ina(os la co6ia:
L (ys>lad(in C% root C6 s!%tdoPn
#inal(ente@ co6ia(os el directorio co(6leto con todas las .ases de datos:
1+
L cp Cr B/arBli.B(ys>lB Balg%nVdirB
Por s%6%esto 6ode(os elegir otras &or(as de co6iarlo o co(6ri(irlo@ de ac%erdo a n%estras
6re&erencias y necesidades.
L tar c"& (ys>lC.acG%6.tar.g" B/arBli.B(ys>l
Si >%ere(os co6iar s*lo %na .ase de datos@ co6ia(os el directorio con el (is(o no(.re de la .ase de
datos:
L cp Cr B/arBli.B(ys>lBde(oB Balg%nVdirBres6aldoVde(oB
Ta(.in es 6osi.le !acer co6ia de seg%ridad de %na sola ta.la.
L cp Cr B/arBli.B(ys>lBde(oB6rod%ctos.^ B alg%nVdirB.acG%6Vde(oB
Co(o 6ode(os o.ser/ar@ la organi"aci*n de la .ase de datos en MySQL es(%y si(6le:
Todas las .ases de datos se al(acenan en %n directorio@ lla(ado el directorio de datos?datadirA.
Cada .ase de datos se al(acena co(o %n s%.directorio del directorio de datos.
Cada ta.la se al(acena en %n arc!i/o@ aco(6aDada de otros arc!i/os a%9iliares con el (is(o
no(.re y di&erente e9tensi*n.
8l 6ro.le(a de este (ecanis(o es >%e de.e(os detener el ser/icio de .ases de datos (ientras
reali"a(os el res6aldo.
...1 "ys6l*otco$y
:n (ecanis(o >%e 6er(ite reali"ar la co6ia de los arc!i/os del ser/idor sin necesidad de detener el
ser/icio es el scri6t T(ys>l!otco6yT. 8l scri6t est escrito en Perl y .lo>%ea las ta.las (ientras reali"a el
res6aldo 6ara e/itar s% (odi&icaci*n. Se %sa de la sig%iente (anera:
L m(s,lhotcop( de(o Balg%nVdirectorio
8n este caso@ crear %n directorio Balg%nVdirectorioBde(o con todos los arc!i/os de la .ase de datos.
8l co(ando (ys>l!otco6y 6%ede reci.ir s*lo el no(.re de %na .ase de datos co(o 6ar(etro:
11
L m(s,lhotcop( de(o
8n este caso@ crear %n directorio B/arBli.B(ys>lBde(oVco6y.
8ste (todo no &%nciona 6ara ta.las con el (ecanis(o de al(acena(iento ti6o InnoDB.
...2 "ys6ldu"$
Las dos o6ciones anteriores re6resentan co6ias .inarias de la .ase de datos. 8l co(ando (ys>ld%(6@
en ca(.io@ reali"a %n /olcado de las .ases de datos 6ero trad%cindolas a SQLQ es decir@ entrega %n
arc!i/o de te9to con todos los co(andos necesarios 6ara /ol/er a reconstr%ir las .ases de datos@ s%s
ta.las y s%s datos. 8s el (todo (s til 6ara co6iar o distri.%ir %na .ase de datos >%e de.er
al(acenarse en otros ser/idores.
L m(s,ldump de(o N de(o.s>l
8l co(ando (ys>ld%(6 o&rece (%ltit%d de 6ar(etros 6ara (odi&icar s% co(6orta(iento o el ti6o de
/olcado generado: 6or de&ecto@ genera sentencias SQL@ 6ero 6%ede generar &ic!eros de datos ti6o CS\
% otros &or(atos. Ta(.in 6ode(os es6eci&icarle >%e !aga el /olcado de todas las .ases de datos o >%e
s*lo /%el>%e los datos y no la creaci*n de las ta.las@ etc.
Las 6ri(eras lneas del arc!i/o de(o.s>l segn el e$e(6lo anterior tendran el sig%iente as6ecto:
CC MySQL d%(6 )7.)0 Distri. 1.).15@ &or de.ianClin%9Cgn% ?i353A
CC
CC Fost: local!ost Data.ase: de(o
CC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CC Ser/er /ersion 1.).15C)%.%nt%)
CC
CC Ta.le str%ct%re &or ta.le ggananciag
CC
D=-P T2BL8 I# 8HISTS ggananciagQ
B^c+7)7) S8T 'sa/edVcsVclient Z ''c!aracterVsetVclient ^BQ
B^c+7)7) S8T c!aracterVsetVclient Z %t&5 ^BQ
C=82T8 T2BL8 ggananciag ?
g/entag en%(?TPor (ayorT@TPor (enorTA D8#2:LT N:LL@
13
g&actorg deci(al?,@,A D8#2:LT N:LL
A 8N<IN8ZMyIS2M D8#2:LT CF2=S8TZlatin)Q
B^c+7)7) S8T c!aracterVsetVclient Z 'sa/edVcsVclient ^BQ
CC
CC D%(6ing data &or ta.le ggananciag
CC
L-C] T2BL8S ggananciag O=IT8Q
B^c+7777 2LT8= T2BL8 ggananciag DIS2BL8 ]8SS ^BQ
INS8=T INT- ggananciag \2L:8S ?TPor (ayorT@T7.;;TA@?TPor (enorT@T7.;;TAQ
B^c+7777 2LT8= T2BL8 ggananciag 8N2BL8 ]8SS ^BQ
:NL-C] T2BL8SQ
La /enta$a de %tili"ar (ys>ld%(6 es >%e 6er(ite >%e los arc!i/os 6%edan ser ledos ?y (odi&icadosA en
%n si(6le editor de te9tos@ y 6%eden ser %tili"ados 6ara (igrar la in&or(aci*n a otro S<BD >%e so6orte
SQL. 2de(s so6orta todos los ti6os de ta.las. La des/enta$a es >%e s% 6rocesa(iento es lento y los
arc!i/os >%e se o.tienen son (%y grandes.
...3 0estaurar a $artir de res$aldos
8n algn (o(ento@ sea 6or el (oti/o >%e sea@ necesitare(os reali"ar la resta%raci*n de n%estras .ases
de datos.
Si tene(os %na co6ia .inaria del directorio de datos@ .astar con co6iarla al directorio original y
reiniciar el ser/idor:
[ m(s,ladmin C% root C6 s!%tdoPn
[ cp Balg%nVdirBres6aldoC(ys>lB^ B/arBli.B(ys>l
[ chown C= (ys>l.(ys>l B/arBli.B(ys>l
[ m(s,l)safe
8s i(6ortante resta%rar ta(.in el d%eDo y el gr%6o de los arc!i/os de datos@ 6ara tener los accesos
correcta(ente esta.lecidos. 8n este e$e(6lo se ado6ta el s%6%esto >%e el %s%ario (ys>l es el >%e
e$ec%ta el ser/idor (ys>ld.
La resta%raci*n de %n arc!i/o SQL o.tenido con (ys>ld%(6@ se reali"a desde el cliente (ys>l@ la .ase
de datos de.e e9istir@ ya >%e el arc!i/o de(o.s>l no la crea 6or de&ecto.
14
L m(s,l de(o C% root C6 M de(o.s>l
%.5 )eparacin de tablas
8n deter(inadas circ%nstancias de %so (%y &rec%ente@ co(o la inserci*n y .orrado (asi/os de datos@
coincidiendo con .lo>%eos del siste(a o llenado del es6acio en disco % otras circ%nstancias@ es 6osi.le
>%e %na ta.la o alg%nos de s%s ndices se corro(6an.
Pode(os cons%ltar el estado de integridad de %na ta.la con el co(ando check table@ >%e reali"a
alg%nas /eri&icaciones so.re la ta.la en .%sca de errores y nos entrega %n in&or(e con las sig%ientes
col%(nas de in&or(aci*n:
(ys>lN check table 6reciosQ
ECCCCCCCCCCCCCCECCCCCCCECCCCCCCCCCECCCCCCCCCCE
W Ta.le W -6 W MsgVty6e W MsgVte9t W
ECCCCCCCCCCCCCCECCCCCCCECCCCCCCCCCECCCCCCCCCCE
W de(o.6recios W c!ecG W stat%s W -] W
ECCCCCCCCCCCCCCECCCCCCCECCCCCCCCCCECCCCCCCCCCE
) roP in set ?7.7) secA
La col%(na -6 descri.e la o6eraci*n >%e se reali"a so.re la ta.la. Para el co(ando check table esta
col%(na sie(6re tiene el /alor c,ec- 6or>%e sa es la o6eraci*n >%e se reali"a. La col%(na .s'_type
6%de contener %no de los /alores status, error, info, o /arnin'. S la col%(na .s'_te(t es el te9to >%e
re6orta de alg%na sit%aci*n encontrada en la ta.la.
8s 6osi.le >%e la in&or(aci*n entregada incl%ya /arias &ilas con di/ersos (ensa$es@ 6ero el lti(o
(ensa$e sie(6re de.e ser el (ensa$e -] de ti6o stat%s.
8n otras ocasiones c!ecG ta.le no reali"ar la /eri&icaci*n de ta.la@ en s% l%gar entregar co(o
res%ltado el (ensa$e Ta.le is already %6 to date@ >%e signi&ica >%e el gestor de la ta.la indica >%e no
!ay necesidad de re/isarla.
MySQL no 6er(ite reali"ar cons%ltas so.re %na ta.la daDada y en/iar %n (ensa$e de error sin
des6legar res%ltados 6arciales:
(ys>lN select ^ from 6reciosQ
8==-= )7)3: No 6%edo a.rir arc!i/o: I6recios.MSDI. ?8rror: )+1A
Para o.tener in&or(aci*n del signi&icado del error )+1@ %sare(os la %tilidad en lnea de co(andos
6error:
15
L perror )+1
)+1 Z Ta.le Pas (arGed as cras!ed and s!o%ld .e re6aired
Des6%s de %n (ensa$e co(o el anterior@ es el (o(ento de reali"ar %na /eri&icaci*n de la integridad de
la ta.la 6ara o.tener el re6orte.
(ys>lN check table 6recios e%tendedQ
ECCCCCCCCCCCCCECCCCCCECCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE
W
Ta.le W -6 W MsgVty6e W MsgVte9t W
ECCCCCCCCCCCCCECCCCCCECCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE
Wde(o.6recios Wc!ecG W error WSi"e o& data&ile is:+17 S!o%ld .e:+1, W
Wde(o.6recios Wc!ecG W error W Corr%6t
W
ECCCCCCCCCCCCCECCCCCCECCCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE
, roPs in set ?7.77 secA
8n este caso locali"a(os dos errores en la ta.la. La o6ci*n e%tended es %no de los cinco ni/eles de
co(6ro.aci*n >%e se 6%eden solicitar 6ara /eri&icar %na ta.la.
Ti6os de /eri&icaci*n
2ipo Significado
,uick No re/isa las &ilas en .%sca de re&erencias
incorrectas.
fast Sola(ente /eri&ica las ta.las >%e no &%eron
cerradas adec%ada(ente.
changed \eri&ica s*lo las ta.las (odi&icadas desde la
lti(a /eri&icaci*n o >%e no se !an cerrado
a6ro6iada(ente.
medium =e/isa las &ilas 6ara /eri&icar >%e los ligados
.orrados son correctos@ /eri&ica las s%(as de
co(6ro.aci*n de las &ilas.
e%tended =eali"a %na .s>%eda co(6leta en todas las cla/es
de cada col%(na. <aranti"a el )77b de la
integridad de la ta.la.
La sentencia re6air ta.le reali"a la re6araci*n de ta.las ti6o =(IS&= corr%6tas:
1;
(ys>lN repair table 6reciosQ
ECCCCCCCCCCCCCECCCCCCECCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE
W
Ta.le W -6 W MsgVty6eW MsgVte9t
W
ECCCCCCCCCCCCCECCCCCCECCCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE
Wde(o.6recios Wre6airW in&o W Orong .ytesec: 7C)4C) at )35QSGi66ed W
Wde(o.6recios Wre6airW Parning W N%(.er o& roPs c!anged &ro( ,7 to 4 W
Wde(o.6recios Wre6airW stat%s W -]
W
ECCCCCCCCCCCCCECCCCCCCECCCCCCCCECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE
0 roPs in set ?7.7+ secA
8l seg%ndo (ensa$e in&or(a de la 6rdida de )0 &ilas d%rante el 6roceso de re6araci*n. 8sto signi&ica@
co(o es nat%ral@ >%e el co(ando re6air ta.le es til s*lo en casos de e9tre(a necesidad@ ya >%e no
garanti"a la rec%6eraci*n total de la in&or(aci*n. 8n la 6rctica@ sie(6re es (e$or reali"ar la
resta%raci*n de la in&or(aci*n %tili"ando las co6ias de seg%ridad. 8n caso de desastre@ se de.e conocer
el (oti/o >%e origina la corr%6ci*n de las ta.las y to(ar las (edidas adec%adas 6ara e/itarlo. 8n lo >%e
res6ecta a la esta.ilidad de MySQL@ se 6%ede con&iar en >%e (%y 6ro.a.le(ente n%nca ser necesario
%tili"ar el co(ando re6air ta.le.
8l co(ando o6ti(i"e ta.le 6%ede ta(.in reali"ar alg%nas correcciones so.re %na ta.la.
%.$ Prctica 5
2iempo estimado: )1 (in.
1. =es6aldar .ase de datos demo en arc!i/o demo_bac-up.sql con m(s,ldump
2. Crear n%e/a .ase de datos demo_restore
3. =esta%rar .ase de datos en .ase al arc!i/o demo_bac-up.sql so.re .ase de datos demo_restore
4. Co(6ro.ar res%ltados
%.% )eplicacin
La re6licaci*n es la co6ia sincroni"ada entre dos ser/idores de .ases de datos de &or(a >%e c%al>%iera
de los dos 6%ede entregar los (is(os res%ltados a s%s clientes.
MySQL incl%ye la 6osi.ilidad de re6licaci*n con las sig%ientes caractersticas:
#%nciona con el es>%e(a (aestroCescla/o: e9iste %n ser/idor (aestro >%e lle/a el control
central y %no o /arios ser/idores escla/os >%e se (antienen sincroni"ados con el ser/idor
37
(aestro.
La r6lica se reali"a (ediante %n registro de los ca(.ios reali"ados en la .ase de datos: no se
reali"an las co6ias de las .ases de datos 6ara (antenerlas sincroni"adas@ en s% l%gar se in&or(a
de las o6eraciones reali"adas en el ser/idor (aestro ?insert@ delete @ %6date ...A 6ara >%e las
realicen a s% /e" los ser/idores escla/os.
No es 6osi.le reali"ar ca(.ios en los ser/idores escla/os@ son e9cl%si/a(ente 6ara cons%ltas.
8ste sencillo es>%e(a 6er(ite la creaci*n de re6licas sin (ayores co(6licaciones o.teniendo los
sig%ientes .ene&icios:
Se distri.%ye la carga de tra.a$o.
8l siste(a es red%ndante@ 6or lo >%e en caso de desastre !ay (enos 6ro.a.ilidades de 6erder los
datos.
8s 6osi.le reali"ar los res6aldos de %n escla/o sin interr%(6ir el tra.a$o del ser/idor (aestro.
....1 7re$aracin $revia
8l e>%i6o (aestro de.e tener acceso 6or red. 2ntes de reali"ar la con&ig%raci*n de los ser/idores
(aestro y escla/o es necesario reali"ar las sig%ientes tareas:
2seg%rarse de >%e en a(.os est instalada la (is(a /ersi*n de MySQL.
2seg%rarse de >%e ning%no de los ser/idores atender 6eticiones d%rante el 6roceso de
con&ig%raci*n.
2seg%rarse de >%e las .ases de datos del ser/idor (aestro !an sido co6iadas (an%al(ente en el
ser/idor escla/o@ de (anera >%e en a(.os se enc%entre e9acta(ente la (is(a in&or(aci*n.
2seg%rarse de >%e a(.os atienden cone9iones /a TCPBIP. Por seg%ridad@ esta o6ci*n est
desacti/ada 6or o(isi*n. Para acti/arla se de.e co(entar la lnea s-ip_net/or-in' en el arc!i/o
de con&ig%raci*n 0etc0my.cnf
....2 Con,i+uracin del servidor "aestro
8n el ser/idor (aestro crea(os %na c%enta de %s%ario con 6er(isos de re6licaci*n 6ara a%tori"ar@ en el
ser/idor (aestro@ al n%e/o %s%ario 6ara reali"ar r6licas:
(ys>lN grant replication sla'e
CN on ^.^
CN to re6licador'escla/o.e(6resa.co( identified b( TsecretoTQ
=e6licador es el no(.re del n%e/o %s%ario.
8scla/o.e(6resa.co( es la direcci*n del ser/idor escla/o.
TSecretoT es la contraseDa.
3)
8l ser/idor (aestro lle/ar %n arc!i/o de registro T.inlogT donde se registrarn todas las solicit%des de
act%ali"aci*n >%e se realicen en las .ases de datos. Para acti/ar la creaci*n de este arc!i/o de.e(os
editar el arc!i/o BetcB(y.cn& y agregar las sig%ientes lneas en la secci*n _(ys>ld`:
_(ys>ld`
logC.in
ser/erCid Z )
8l ser/idor (aestro de.e identi&icarse con %n id@ en este caso ser el n(ero ). a contin%aci*n@
reinicia(os el ser/idor:
BetcBinit.dB(ys>l restart
#inal(ente@ cons%lta(os el no(.re del arc!i/o T.inlogT y la 6osici*n de co(6ensaci*n ?estos datos son
necesarios 6ara con&ig%rar el escla/oA:
(ys>lN s!oP (aster stat%sQ
ECCCCCCCCCCCCCCCCCECCCCCCCCCCECCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCE W
#ile W Position W BinlogVdoVd. W BinlogVignoreVd. W
ECCCCCCCCCCCCCCCCCECCCCCCCCCCECCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCE
W (aestroC.in.77) W 43 W W W
ECCCCCCCCCCCCCCCCCECCCCCCCCCCECCCCCCCCCCCCCCECCCCCCCCCCCCCCCCCCE
....3 Con,i+uracin del servidor esclavo
8n el ser/idor escla/o@ edita(os el arc!i/o 0etc0my.cnf y agrega(os@ al ig%al >%e en el (aestro@ la
acti/aci*n del arc!i/o T.inlogT y %n identi&icador del ser/idor ?>%e de.e ser distinto del identi&icador del
ser/idor (aestroA:
_(ys>ld`
logC.in
ser/erCid Z ,
=einicia(os el ser/idor escla/o:
3,
[ BetcBinit.dB(ys>l restart
Con&ig%ra(os los datos del (aestro en el ser/idor escla/o:
(ys>lN c!ange (aster to
CN (asterV!ost Z T(aestro.e(6resa.co(T@
CN (asterV%ser Z Tre6licadorT@
CN (asterV6assPord Z TsecretoT@
CN (asterVlogV&ile Z T(aestroClog.77)T@
CN (asterVlogV6os Z 43Q
8l lti(o 6aso es iniciar el ser/idor escla/o:
(ys>lN start sla/eQ
S ya tendre(os el ser/idor escla/o &%ncionando.
%.* Importacin & e+portacin de datos
8n (%c!as ocasiones es necesario (o/er datos de %na a6licaci*n a otra@ 6ara ello son necesarios
&or(atos estndares >%e 6%edan ser escritos 6or la a6licaci*n origen y ledos 6or la a6licaci*n destino.
8l (s si(6le de esos &or(atos es el te9to 6lano@ donde cada arc!i/o es %na ta.la@ cada &ila es %n
registro y los /alores de los ca(6os se se6aran 6or ta.%ladores.
MySQL 6%ede leer este ti6o de arc!i/os@ incl%yendo /alores n%los re6resentados 6or IRNI?N
(aysc%laA.
:tili"ando el cliente mysql@ 6ode(os introd%cir los datos del arc!i/o local proveedores.t(t en la ta.la
proveedores:
(ys>lN load data local infile T6ro/eedores.t9tT
CN into table 6ro/eedoresQ
Si se o(ite la 6ala.ra local@ MySQL .%scar el arc!i/o en el ser/idor y no en el cliente.
8n %n arc!i/o se 6%eden entreco(illar los ca(6os@ %tili"ar co(as 6ara se6ararlos y ter(inar las lneas
con los caracteres IRrRnI ?co(o en los arc!i/os OindoPsA. 8l co(ando load data tiene dos cla%s%las
o6cionales@ &ields@ en el >%e se es6eci&ican estos 6ar(etros.
30
(ys>lN load data local infile T6roo/eedores.t9tT
CN into table 6ro/eedores
CN fields terminated b( T@T
CN enclosed b( TKT
CN lines terminated b( TRrRnTQ
La o6ci*n enclosed .y 6%ede tener la &or(a o6tionaly enclosed .y@ en caso de >%e los ca(6os
n%(ricos no sean deli(itados.
2de(s 6%eden o(itirse las 6ri(eras lineas del arc!i/o si contienen in&or(aci*n de enca.e"ados:
(ys>lN load data local infile T6ro/eedores.t9tT
CN into table 6ro/eedores
CN ignore ) linesQ
..2.1 "ys6li"$ort
La %tilidad m(s,limport >%e se incl%ye en la distri.%ci*n 6%ede reali"ar el (is(o tra.a$o >%e load
data. 8stos son alg%nos de s%s 6ar(etros:
m(s,limport C% %s%ario C6 CClocal .asededatos arc!i/o.t9t
La o6ci*n ++local indica >%e el arc!i/o se enc%entra local(ente o en el clienteQ otro as6ecto i(6ortante
es >%e el no(.re del arc!i/o ?arc,ivo.t(tA@ este de.e coincidir con el no(.re de la ta.la donde se
insertarn los datos@ de lo contrario m(s,limport arro$a %n error indicando >%e no locali"a la ta.la con
dic!o no(.re del arc!i/o.
8stos son alg%nos de los arg%(entos de m(s,limport 6ara reali"ar las tareas e>%i/alentes a la
sentencia load data:
CC&ieldsCter(inatedC.yZ
CC&ieldsCenclosedC.yZ
CC&ieldsCo6tionallyCenclosedC.yZ
CC&ieldsCesca6edC.yZ
CClinesCter(inatedC.yZ
La &or(a (s si(6le 6ara e96ortar datos es redireccionando la salida del cliente (ys>l. 8l 6ar(etro Ce
3+
6er(ite e$ec%tar %n co(ando en (odo de 6rocesa(iento 6or lotes. MySQL detecta si la salida es en
6antalla o est redireccionada a %n arc!i/o y elige la 6resentaci*n adec%ada: con enca.e"ados y lneas
de se6araci*n 6ara la salida en 6antalla@ y sin enca.e"ados y con ta.%ladores 6ara %n arc!i/o:
L m(s,l de(o Ce Jselect ^ &ro( 6ro/eedoresK N 6ro/eedores.t9t
La sentencia select ta(.in c%enta con %na o6ci*n 6ara reali"ar la tarea in/ersa de la sentencia load
data:
(ys>lN select ^
CN into outfile JB.acG%6B6ro/eedores.t9tK
CN fields termitated b( T@T
CN optionall( enclosed b( TKT
CN lines termitates b( TRnT
CN from 6ro/eedoresQ
..2.2 "ys6ldu"$
La %tilidad (ys>ld%(6 reali"a el /olcado de .ases de datos y 6%ede %tili"arse 6ara trans6ortar datos de
%na .ase a otra >%e ta(.in entienda SQL. Sin e(.argo@ el arc!i/o de.e ser editado antes de %tili"arse@
ya >%e alg%nas o6ciones son e9cl%si/as de MySQL. Por lo general@ .asta con eli(inar el ti6o de ta.la
>%e se es6eci&ica al &inal de %n co(ando create ta.le.
8l sig%iente co(ando reali"a el /aciado co(6leto de la .ase de datos de(o:
L m(s,ldump de(o N de(o.s>l
8n alg%nos casos@ los co(andos insert son s%&icientes y no necesita(os las de&iniciones de las ta.las.
8l sig%iente co(ando reali"a %n /aciado de la ta.la proveedores de la .ase de datos demo &iltrando la
salida con el co(ando 'rep de :NIH >%e selecciona s*lo las lneas >%e contienen la 6ala.ra INS8=T.
De este (odo@ el arc!i/o pro'eedoresDinsert.t%t contiene e9cl%si/a(ente co(andos insert:
L m(s,ldump de(o 6ro/eedores W gre6 INS8=T N 6ro/eedoresCinsert.t9t
31
2. Clientes /r8,icos
*.1 P,pm&admin
php=(&dmin es %na !erra(ienta escrita en PFP con la intenci*n de (ane$ar la ad(inistraci*n de
MySQL a tra/s de 6ginas Pe.@ %tili"ando Internet. 2ct%al(ente 6%ede crear y eli(inar Bases de
Datos@ crear@ eli(inar y alterar ta.las@ .orrar@ editar y aDadir ca(6os@ e$ec%tar c%al>%ier sentencia SQL@
ad(inistrar cla/es en ca(6os@ ad(inistrar 6ri/ilegios@ e96ortar datos en /arios &or(atos y est
dis6oni.le en 3, idio(as. Se enc%entra dis6oni.le .a$o la licencia <PL.
8ste 6royecto se enc%entra /igente desde el aDo );;5@ siendo el (e$or e/al%ado en la co(%nidad de
descargas de So%rce#orge.net co(o la descarga del (es de dicie(.re del ,77,. Co(o esta !erra(ienta
corre en (>%inas con Ser/idores Oe.s y So6orte de PFP y MySQL@ la tecnologa %tili"ada !a ido
/ariando d%rante s% desarrollo.
*.2 !&S'L -dministrator
MySQL 2d(inistrator es %na !erra(ienta >%e 6er(ite reali"ar tareas de ad(inistraci*n en %n .ase de
datos MySQL.
(ys>lCad(inistrator 6er(ite@ entre otras cosas:
8ncender y 6arar el S<BD.
<estionar el &ic!ero de con&ig%raci*n BetcB(y.cn& de &or(a gr&ica.
<estionar %s%arios y 6ri/ilegios.
Monitori"ar el %so del gestor >%e se est !aciendo del (is(o@ el n(ero de cone9iones@
cons%ltas si(%ltneas y todo ti6o de in&or(aci*n estadstica.
Cons%ltar los &ic!eros de registro ?logA del ser/idor.
<estionar co6ias de seg%ridad.
<estionar la re6licaci*n de .ases de datos.
Crear y .orrar .ases de datos ?SCF8M2A.
3. 0esu"en
MySQL es %n S<BD relacional de &cil %so y alto rendi(iento@ dos caractersticas (%y /aliosas 6ara
%n desarrollador de siste(as: s% &acilidad de %so 6er(ite la creaci*n de .ases de datos con ra6ide" y sin
(%c!as co(6licaciones@ y s% alto rendi(iento lo !ace s%(a(ente atracti/o 6ara a6licaciones
co(erciales i(6ortantes o 6ortales Pe. de (%c!o tr&ico. Si a ello le aDadi(os la dis6oni.ilidad de
c*digo y s% licencia d%al@ se co(6rende >%e MySQL sea atracti/o y accesi.le 6ara todo el (%ndo.
8stos atri.%tos tienen s%s costes: (antenerlo con %n alto rendi(iento !ace algo (s lento s% desarrollo@
6or lo >%e no es el (s a/an"ado en c%anto a 6restaciones y co(6ati.ilidad con estndares. MySQL
carece de caractersticas >%e (%c!os otros S<BD 6oseen. Pero no se de.e ol/idar >%e est en contin%o
desarrollo@ 6or lo >%e &%t%ras /ersiones incl%irn n%e/as caractersticas. Por s%6%esto@ 6ara MySQL es
33
(s i(6ortante la e&iciencia >%e incl%ir 6restaciones s*lo 6or co(6etir o satis&acer a alg%nos %s%arios.
34

Вам также может понравиться