You are on page 1of 6

Creartabla

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.

You might also like