Académique Documents
Professionnel Documents
Culture Documents
Crearlabasededatoseslapartemsfcil,peroenestemomentola
basededatosestvaca,comoloindicaelcomandoSHOWTABLES:
mysql>SHOWTABLES;
Emptyset(0.00sec)
Laparteuntantocomplicadaesdecidirlaestructuraquedebetener
nuestrabasededatos:qutablassenecesitanyqucolumnasestarnen
cadatabla.
Enprincipio,necesitamosunatablaquecontengaunregistroparacada
unadenuestrasmascotas.stapuedeserunatablallamadamascotas,y
debecontenerporlomenoselnombredecadaunodenuestrosanimalitos.
Yaqueelnombreensnoesmuyinteresante,latabladebecontener
algunaotrainformacin.Porejemplo,simsdeunapersonaennuestra
familiatieneunamascota,esprobablequetengamosqueguardarla
informacinacercadequieneseldueodecadamascota.Asmismo,
tambinserainteresantecontarconalgunainformacinmsdescriptiva
talcomolaespecie,yelsexodecadamascota.
Yquesucedeconlaedad?.Estopuedesertambindeinters,perono
esunabuenaideaalmacenarestedatoenlabasededatos.Laedad
cambiaconformepasaeltiempo,locualsignificaquedebemosde
actualizarlosregistrosfrecuentemente.Envezdeesto,esunamejor
ideaguardarunvalorfijo,talcomolafechadenacimiento.Entonces,
cuandonecesitemoslaedad,lapodemoscalcularcomoladiferenciaentre
lafechaactualylafechadenacimiento.MySQLproporcionafunciones
parahaceroperacionesentrefechas,asquenohayningnproblema.
Alalmacenarlafechadenacimientoenlugardelaedadtenemosalgunas
otrasventajas:
Podemosusarlabasededatosparatareastalescomogenerar
recordatoriosparacadacumpleaosprximodenuestrasmascotas.Podemos
calcularlaedadenrelacinaotrasfechasquelafechaactual.Por
ejemplo,sialmacenamoslafechaenquemurinuestramascotaenlabase
dedatos,esfcilcalcularqueedadtenanuestroanimalitocuando
falleci.Esprobablequeestemospensandoenotrotipodeinformacin
queseraigualmentetilenlatabla"mascotas",peroparanosotros
sersuficienteporahoracontarconinformacindenombre,propietario,
especie,nacimientoyfallecimiento.
UsaremoslasentenciaCREATETABLEparaindicarcomoestarnconformados
losregistrosdenuestrasmascotas.
mysql>CREATETABLEmascotas(
>nombreVARCHAR(20),propietarioVARCHAR(20),
>especieVARCHAR(20),sexoCHAR(1),nacimientoDATE,
>fallecimentoDATE);
QueryOK,0rowsaffected(0.02sec)
mysql>
VARCHAResunabuenaeleccinparaloscamposnombre,propietario,y
especie,yaquelosvaloresquealmacenarnsondelongitudvariable.No
esnecesarioquelalongituddeestascolumnassealamisma,nitampoco
queseade20.Sepuedeespecificarcualquierlongitudentre1y255,lo
queseconsideremsadecuado.Siresultaquelaeleccindelalongitud
deloscamposquehemoshechonoresultadecuada,MySQLproporcionauna
sentenciaALTERTABLEquenospuedeayudarasolventaresteproblema.
Elcamposexopuedeserrepresentadoenunavariedaddeformas,por
ejemplo,"m"y"f",otalvez"masculino"y"femenino",aunqueresulta
mssimplelaprimeraopcin.
ElusodeltipodedatoDATEparaloscamposnacimientoyfallecimento
debederesultarobvio.
Ahoraquehemoscreadolatabla,lasentenciaSHOWTABLESdebeproducir
algocomo:
mysql>SHOWTABLES;
++
|Tables_in_zoologico|
++
|mascotas|
++
1rowinset(0.00sec)
mysql>
Paraverificarquelatablafucreadacomonosotrosesperabamos,
usaremoslasentenciaDESCRIBE:
mysql>DESCRIBEmascotas;
+++++++
|Field|Type|Null|Key|Default|Extra|
+++++++
|nombre|varchar(20)|YES||NULL||
|propietario|varchar(20)|YES||NULL||
|especie|varchar(20)|YES||NULL||
|sexo|char(1)|YES||NULL||
|nacimiento|date|YES||NULL||
|fallecimento|date|YES||NULL||
+++++++
6rowsinset(0.01sec)
mysql>
PodemoshacerusodelasentenciaDESCRIBEencualquiermomento,por
ejempo,siolvidamoslosnombreseltipodelascolumnasenlatabla.
Cargardatosenunatabla
Despusdehabercreadolatabla,ahorapodemosincorporaralgunosdatos
enella,paralocualharemosusodelassentenciasINSERTyLOADDATA.
Supongamosquelosregistrosdenuestrasmascotaspuedenserdescritos
porlosdatosmostradosenlasiguientetabla.
Nombre
Propietario
Especie
Sexo
Nacimiento
Fallecimento
Fluffy
Arnoldo
Gato
19990204
Mau
Juan
Gato
19980317
Buffy
Arnoldo
Perro
19990513
FanFan
Benito
Perro
20000827
Kaiser
Diana
Perro
19980831
19970729
Chispa
Omar
Ave
19980911
Wicho
Toms
Ave
20000209
Skim
Benito
Serpiente
20010429
DebemosobservarqueMySQLesperarecibirfechasenelformatoYYYYMM
DD,quepuedeserdiferentealoquenosotrosestamosacostumbrados.
Yaqueestamosiniciandoconunatablavaca,lamaneramsfcilde
poblarlaescrearunarchivodetextoquecontengaunregistroporlnea
paracadaunodenuestrosanimalitosparaqueposteriormentecarguemos
elcontenidodelarchivoenlatablanicamenteconunasentencia.
Portanto,debemosdecrearunarchivodetexto"mascotas.txt"que
contengaunregistroporlneaconvaloresseparadosportabuladores,
cuidandoqueelordendelascolumnasseaelmismoqueutilizamosenla
sentenciaCREATETABLE.Paravaloresquenoconozcamospodemosusar
valoresnulos(NULL).Pararepresentarestosvaloresennuestroarchivo
debemosusar\N.
Elarchivomascotas.txt
Paracargarelcontenidodelarchivoenlatablamascotas,usaremosel
siguientecomando:
mysql>LOADDATALOCALINFILE"mascotas.txt"INTOTABLEmascotas;
LasentenciaLOADDATAnospermiteespecificarculeselseparadorde
columnas,yelseparadorderegistros,pordefaulteltabuladoresel
separadordecolumnas(campos),yelsaltodelneaeselseparadorde
registros,queenestecasosonsuficientesparaquelasentenciaLOAD
DATAleacorrectamenteelarchivo"mascotas.txt".
Siloquedeseamosesaadirunregistroalavez,entoncesdebemos
hacerusodelasentenciaINSERT.Enlamaneramssimple,debemos
proporcionarunvalorparacadacolumnaenelordenenelcualfueron
listadosenlasentenciaCREATETABLE.Supongamosquenuestrahermana
DianacompraunnuevohamsternombradoPelusa.Podemosusarlasentencia
INSERTparaagregarsuregistroennuestrabasededatos.
mysql>INSERTINTOmascotas
>VALUES('Pelusa','Diana','Hamster','f','20000330',NULL);
Notarquelosvaloresdecadenasyfechasdebenestarencerradosentre
comillas.Tambin,conlasentenciaINSERTpodemosinsertarelvalor
NULLdirectamentepararepresentarunvalornulo,unvalorqueno
conocemos.Enestecasonoseusa\Ncomoenelcasodelasentencia
LOADDATA.
Deesteejemplo,debemossercapacesdeverqueesunpocomslatarea
quesetienequerealizarsiinicialmentecargamoslosregistroscon
variassentenciasINSERTenlugardeunanicasentenciaLOADDATA.
Recuperarinformacindeunatabla
LasentenciaSELECTesusadaparaobtenerlainformacinguardadaenuna
tabla.Laformageneraldeestasentenciaes:
SELECTLaInformacinQueDeseamosFROMDeQueTablaWHERECondicinASatisfacer
Aqu,LaInformacinQueDeseamoseslainformacinquequeremosver.Esta
puedeserunalistadecolumnas,oun*paraindicar"todaslas
columnas".DeQueTablaindicaelnombredelatabladelacualvamosa
obtenerlosdatos.LaclasulaWHEREesopcional.Siestpresente,la
CondicinASatisfacerespecificalascondicionesquelosregistrosdeben
satisfacerparaquepuedansermostrados.
Seleccionandotodoslosdatos
LamaneramssimpledelasentenciaSELECTescuandoserecuperantodos
losdatosdeunatabla:
mysql>SELECT*FROMmascotas;
+++++++
|nombre|propietario|especie|sexo|nacimiento|fallecimiento|
+++++++
|Fluffy|Arnoldo|Gato|f|19990204|NULL|
|Mau|Juan|Gato|m|19980317|NULL|
|Buffy|Arnoldo|Perro|f|19990513|NULL|
|FanFan|Benito|Perro|m|20000827|NULL|
|Kaiser|Diana|Perro|m|19980831|19970729|
|Chispa|Omar|Ave|f|19980911|NULL|
|Wicho|Toms|Ave|NULL|20000209|NULL|
|Skim|Benito|Serpiente|m|20010429|NULL|
|Pelusa|Diana|Hamster|f|20000330|NULL|
+++++++
9rowsinset(0.00sec)
EstaformadelSELECTestilsideseamosverlosdatoscompletosdela
tabla,porejemplo,paraasegurarnosdequeestntodoslosregistros
despusdelacargadeunarchivo.
Porejemplo,enestecasoqueestamostratando,alconsultarlos
registrosdelatabla,nosdamoscuentadequehayunerrorenel
archivodedatos(mascotas.txt):parecequeKaiserhanacidodespusde
quehafallecido!.AlrevisarunpocoelpedigreedeKaiserencontramos
quelafechacorrectadenacimientoeselao1989,no1998.
Hayporlomenosunpardemanerasdesolucionaresteproblema:
Editarelarchivo"mascotas.txt"paracorregirelerror,eliminarlos
datosdelatablamascotasconlasentenciaDELETE,ycargarlosdatos
nuevamenteconelcomandoLOADDATA:
mysql>DELETEFROMmascotas;
mysql>LOADDATALOCALINFILE"mascotas.txt"INTOTABLEmascotas;
Sinembargo,sihacemosesto,debemosingresarlosdatosdePelusa,la
mascotadenuestrahermanaDiana.
Lasegundaopcinconsisteencorregirsloelregistroerrneoconuna
sentenciaUPDATE:
mysql>UPDATEmascotasSETnacimiento="19890831"
WHEREnombre="Kaiser";
Comosemostranteriormente,esmuyfcilrecuperarlosdatosdeuna
tablacompleta.Perotpicamentenodeseamoshaceresto,particularmente
cuandolastablassondemasiadograndes.Envezdeello,estaremosms
interesadosenresponderpreguntasparticulares,encuyocasodebemos
especificaralgunasrestriccionesparalainformacinquedeseamosver.
Ordenarregistros
Sedebenotarenlosejemplosanterioresquelasfilasregresadasson
mostradassinningnordenenparticular.Sinembargo,frecuentementees
msfcilexaminarlasalidadeunaconsultacuandolasfilasson
ordenadasenalgunaformatil.Paraordenarlosresultados,tenemosque
usarunaclusulaORDERBY.
Aquaparecenalgunosdatosordenadosporfechadenacimiento:
mysql>SELECTnombre,nacimientoFROMmascotasORDERBYnacimiento;
+++
|nombre|nacimiento|
+++
|Kaiser|19890831|
|Mau|19980317|
|Chispa|19980911|
|Fluffy|19990204|
|Buffy|19990513|
|Wicho|20000209|
|Pelusa|20000330|
|FanFan|20000827|
|Skim|20010429|
+++
9rowsinset(0.00sec)
Enlascolumnasdetipocaracter,elordenamientoesejecutado
normalmentedeformanosensitiva,esdecir,nohaydiferenciaentre
maysculasyminsculas.Sinembargo,sepuedeforzarunordenamiento
sensitivoalusareloperadorBINARY.
Paraordenarenordeninverso,debemosagregarlapalabraclaveDESCal
nombredelacolumnaqueestamosusandoenelordenamiento:
mysql>SELECTnombre,nacimientoFROMmascotasORDERBY
>nacimientoDESC;
+++
|nombre|nacimiento|
+++
|Skim|20010429|
|FanFan|20000827|
|Pelusa|20000330|
|Wicho|20000209|
|Buffy|19990513|
|Fluffy|19990204|
|Chispa|19980911|
|Mau|19980317|
|Kaiser|19890831|
+++
9rowsinset(0.00sec)
Podemosordenarmltiplescolumnas.Porejemplo,paraordenarportipo
deanimal,yponeraliniciolosanimalitosmspequeosdeedad,
usaremoslasiguienteconsulta:
mysql>SELECTnombre,especie,nacimientoFROMmascotas
>ORDERBYespecie,nacimientoDESC;
++++
|nombre|especie|nacimiento|
++++
|Wicho|Ave|20000209|
|Chispa|Ave|19980911|
|Fluffy|Gato|19990204|
|Mau|Gato|19980317|
|Pelusa|Hamster|20000330|
|FanFan|Perro|20000827|
|Buffy|Perro|19990513|
|Kaiser|Perro|19890831|
|Skim|Serpiente|20010429|
++++
9rowsinset(0.00sec)
NotarquelapalabraclaveDESCaplicasloalacolumnanombradaquele
precede.