Está en la página 1de 9

PruebasdeSqliteenunsistemaLinux guiaparainiciarse

1.Generalidades SqliteesunabasededatosmuysimilaralaconocidaAccessdelmundoWindowsperoadiferencia de esta posee una serie de ventajas que la hacen interesante de aplicar. Para comenzar es multiplataformaycumpleconlosestndares(ensumayora)SQL92porloquesusintaxisyforma deusocasinoposeecurvadeaprendizajealosconocedoresdeSQLysusMySql,porqueadems como este ultimo (implementacin de mysql en php) sqlite tambin esta contemplada en el tratamientodinmicodephpprofusamente. Sqlitesepuedeusarenmodoventanadecomandos(Shell)oembebidoenaplicacionesdecodigo (casicualquierlenguajedeprogramacindirectamenteoindirectamente)porejemploc,c++,bash etc.EnaplicacionessepuedeutilizarconOpenOfficemediantelaaplicacindelosdriversODBC adecuados.Sqliteesunmotorquetrabajaembebidoconlaaplicacinquelouse(enelservidor,en programasescritospornosotros,etc)yotradesusventajaseslaportabilidad. Sqliteesidealparatrabajarconvolmenesmedianosopequeosdeinformacin,demaneragily eficiente.Aunquesusdiseadoresaducenqueesposiblemanejarbasesdedatosde2terabytessin mayoresinconvenientes. CuandounMysqlnosquedagrandelasolucinidealdecdigoabierto,libreygratuitoesSqlite. Estesedescargadesusitioeninternethttp://www.sqlite.org. Recordemosqueparainstalarsqliteesnecesarioestarcorriendoelservidorlocaldelamquina (Localhost)tantoenlinuxcomoenwindows,pueshaysqliteparaestesistemaoperativotambin,y cuyainstalacinesmassencillaporqueesunejecutablequesedescargadelamismapaginaqueel anterior. UnadelasventajasdeSqliteesquepermitetrabajarendosmodalidades:cargaenmemoriaoen disco,pudiendopasarlabasedeunoaotroestadoconunpardecomandos.Lamodalidaddecargar enmemoriabrindarapidezadicional 2. Instalacionenelshelldelinux Laoperacinessencilla,unavezubicadoelarchivoenelsitiodedescargas(ennuestrocasoes sqlite3.3.8.tar.gz)lodescomprimimosynosquedalacarpetasqlite3.3.8All dentrousandolos privilegiosderootlocreamoseinstalamossegnestasecuenciaquereproducimosacontinuacin: porejemplo:
tarxzfsqlite.tar.gz;#descomprimimosenunacarpeta mkdirbld;#creamosundirectoriodentrode sqliteparatrabajar cdbld;#cargamoseldirectoriocreado ../sqlite/configure;#corremoselscriptparaconfigurar

Sqliteanuestrosistema make;#creamoslainstalacion makeinstall;#lainstalamosenelsistema.

Estainstalacincolocaraelmotordelabasededatosdentrodeloscomandosdelbash(ventanao shell)quenospermitirllamarlainvocando(enmicaso)
[edwin@localhost~]$sqlite3 SQLiteversion3.3.8 Enter".help"forinstructions sqlite>

Demostrandoquelabasecorreyestaprontaarecibirnuestrasinstrucciones. 3. Manejandoalgunasgeneralidades UnadelaprimerascosasquesuelenenloqueceraquienesvenimosdeMySqleselusodelos comandosconelpuntodelante=.helpEstoqueesunatrivialidadesrazon parainfinidadde erroresalinicio,pesalnoincluirestepuntosuelensaltarerroresyloprimeroquepensamoses endondeestalafalla? Asiqueparaloscomandosprincipalesnoolvidemoselpuntodelante.Paralassentenciasdeusode labaselasintaxisessimilaraladesqlyMysqlsinmayorescomplicaciones,incluyendoel;al finaldecadasentencia.SinolohacemoselSqlitenosdiraaligualquemysqlque....>falta cerrarla. 4. Ejemplodeentrada Paraentrarycuriosearescomovimosanteriormente.Paraaccederalmendeayudasdebescolocar .helpyparasaliralpromptdelsistema.exit:
[edwin@localhostpruebas_sqlite]$sqlite3 SQLiteversion3.3.8 Enter".help"forinstructions sqlite>.help .databasesListnamesandfilesofattacheddatabases .dump?TABLE?...DumpthedatabaseinanSQLtextformat .echoON|OFFTurncommandechoonoroff .exitExitthisprogram .explainON|OFFTurnoutputmodesuitableforEXPLAINonoroff. .header(s)ON|OFFTurndisplayofheadersonoroff .helpShowthismessage .importFILETABLEImportdatafromFILEintoTABLE .indicesTABLEShownamesofallindicesonTABLE .loadFILE?ENTRY?Loadanextensionlibrary .modeMODE?TABLE?SetoutputmodewhereMODEisoneof: csvCommaseparatedvalues columnLeftalignedcolumns.(See.width) htmlHTML<table>code insertSQLinsertstatementsforTABLE lineOnevalueperline listValuesdelimitedby.separatorstring tabsTabseparatedvalues tclTCLlistelements

.nullvalueSTRINGPrintSTRINGinplaceofNULLvalues .outputFILENAMESendoutputtoFILENAME .outputstdoutSendoutputtothescreen .promptMAINCONTINUEReplacethestandardprompts .quitExitthisprogram .readFILENAMEExecuteSQLinFILENAME .schema?TABLE?ShowtheCREATEstatements .separatorSTRINGChangeseparatorusedbyoutputmodeand.import .showShowthecurrentvaluesforvarioussettings .tables?PATTERN?ListnamesoftablesmatchingaLIKEpattern .timeoutMSTryopeninglockedtablesforMSmilliseconds .widthNUMNUM...Setcolumnwidthsfor"column"mode sqlite>

aqu hemosllamadoalaayudaynoshadadoelmen explicativo.Veamosahoracomolistarlas basesdedatosexistentes,tablasycolumnas.Undetalleimportanteesquedebemosestarenel directoriodetrabajoquecontengalasbasescuandoabramoselshell(ventanadecomandos)en nuestrocasoelclasicoBashinvocandolabasededatoscomosqlite3base.db:


sqlite>.database seqnamefile 0main/home/edwin/pruebas_sqlite/base.db sqlite>

Ahotalastablasdentrodeestabasededatosbase.dbylascolumnas:
sqlite>.tables Datos sqlite>.schemaDatos CREATETABLEDatos(idint(9)primarykey,apellidochars(30),nombrechars(30), dniinst(12),observacioneschars(255)); sqlite>

5. Creamoslaprimarabasededatos Parahacerlosimplementeescribimosenlaventanadecomandoselnombredelabasequevamosa crear,siexisteestaseabriraparaquetrabajemosenella.Porejemploescribimossqlite3base.db quenotenemosaun.Secrearalabaseyluegoprocederemosacargarlastablasylascolumnas medianteestecomando CREATETABLE[nombredelatabla](columna1,columna2,columna etc);ComoenestecasoquehemoscreadolatablaDatos:


sqlite>CREATETABLEDatos( ...>idint(3)notnull, ...>Apellidochar(30)notnull, ...>Nombrechar(30)notnull, ...>Documentoschar(30)notnull, ...>Observacioneschat(60)notnull, ...>primarykey(id));

Locualunavezingresadononosdaerror,loquesignificaquesaliobien,cosaqueconfirmamos conelcomando.schema[tabla]:

sqlite>.schemaDatos CREATETABLEDatos( idint(3)notnull, Apellidochar(30)notnull, Nombrechar(30)notnull, Documentoschar(30)notnull, Observacioneschat(60)notnull, primarykey(id));

PodriamoshabercreadolatablaDatosdevariasmaneras,sinindicareltipodedatos(int=integer onumerosenteros)caracteristicas(notnullquesignificaquedebensercompletadas)olaclave primaria que es quien creael autoincremento cuandose cargan nuevas filas dedatos. Pero es costumbreadquiridahacerlodeestamanera,pormasqueposteriormentesepuedanmodificar. Paraeliminarunatablaqueestemalonosagradeseusalasentenciadroptable,enesteejemplo teniamosdostablasDatosyOtra:
sqlite>droptableOtra; sqlite>.tables Datos

LasalidaindicaquesoloquedaDatos.Otrafueeliminada. 6. Cargamoslasprimerasfilasdedatos Parahacerlousamoslaconocidasentenciainsertinto[Tabla](campos)values('valores')como vemosenestemodelo:


sqlite> insert into Datos (id,Apellido, Nombre, Documentos, Observaciones) values('1','Aguiar','Edwin','Si,tiene','Ningunaquedestacar'); sqlite>select*fromDatos; 1|Aguiar|Edwin|Si,tiene|Ningunaquedestacar

Cargamoslaprimerafilaycomprobamosconselect*fromenlatablaDatoslasalida.Como vemosdabienyseguimoscargandoalgunosregistrosmas,Comoesnotoriolasintaxisdesqly mysqlfacilitalascosasparalosqueingresenalsqlite.Yparalsonovatosquepruebanporprimera vezessencillodecomprenderyaqueestelenguajeesmuyracionalyclaro.Despuesdeunratode cargardatostenemosquelabaseyaestaunpocomasamplia:


sqlite>select*fromDatos; 1|Aguiar|Edwin|Si,tiene|Ningunaquedestacar 2|Esparza|Silvina|Tambienposee|Esposa 3|AguiarEsparza|Sabina|recienobtenido|hjadesietemeses

Estasalidaesunpocohorrenda,paralosquevenimosdeotrasbasesyestamosacostumbradosa unapresentacinmejor,ensqliteestaeslaqueproveepordefectoperosepuedemejorarconlos comandos.modeMODE[TABLE]deestamanera:


sqlite>.modetabsDatos

sqlite>select*fromDatos; 1AguiarEdwinSi,tieneNingunaquedestacar 2EsparzaSilvinaTambienposeeEsposa 3AguiarEsparzaSabinarecienobtenidohjadesietemeses

Conlocualhamejoradounpoco.Existenvariosmodosdeconfigurarestasalida,descriptosen .helpElanchodecolumnastambinespredeterminadopor.widthNUMNUM... Unacosaquepuedesermuy tileslaposibilidaddehacerDUMPdelastablas(crearunarchivo sql)queluegoseaimportable:


BEGINTRANSACTION; CREATETABLEDatos( idint(3)notnull, Apellidochar(30)notnull, Nombrechar(30)notnull, Documentoschar(30)notnull, Observacioneschat(60)notnull, primarykey(id)); INSERT INTO "Datos" VALUES(1, 'Aguiar', 'Edwin', 'Si, tiene', 'Ninguna que destacar'); INSERTINTO"Datos"VALUES(2,'Esparza','Silvina','Tambienposee','Esposa'); INSERT INTO "Datos" VALUES(3, 'Aguiar Esparza', 'Sabina', 'recien obtenido', 'Hija,bebede7meses'); COMMIT;

7.ModificaciondeDatos Unodelosproblemasalahorademanejarbasesdedatosesquesuelesernecesariocambiarlos. Para eso usamos la sentencia UPDATE [tabla] SET columna=dato nuevo WHERE columna=datoviejo;Porejemplodeestamanera:
sqlite>updateDatossetNombre="Marcelo"whereNombre="Edwin"; sqlite>select*fromDatos; 1AguiarMarceloSi,tieneNingunaquedestacar 2EsparzaSilvinaTambienposeeEsposa 3AguiarEsparzaSabinarecienobtenidohjadesietemeses

Fijensequeenelregistro3hayunafaltadeortografayadems nonosagradoelcambiode nombre,lodeberemoshacerendospasos,pararesumirsolopresentaremoselsegundo:


sqlite> update Datos set Observaciones="Hija, bebe de 7 meses" where Observaciones="hjadesietemeses"; sqlite>select*fromDatos; 1AguiarEdwinSi,tieneNingunaquedestacar 2EsparzaSilvinaTambienposeeEsposa 3AguiarEsparzaSabinarecienobtenidoHija,bebede7meses

TambinsesueleusarlasentenciaReplaceenestoscasos. 8. Eliminarregistros LaeliminacinderegistrosseefectaconlasentenciaDelete,lacualaligualquetodashayque usarconalgunasprecaucionesporquenohayvueltaatrs.Unavezeliminadoelregistrosolose

puedevolveracargarmanualmente.Paraelejemplocargamosundatoqueluegoeliminaremos:
sqlite>insertintoDatos(id,Apellido,Nombre,Documentos,Observaciones)values ('4','Perez','Juan','notiene','ninguna'); sqlite>select*fromDatos; 1|Aguiar|Edwin|Si,tiene|Ningunaquedestacar 2|Esparza|Silvina|Tambienposee|Esposa 3|AguiarEsparza|Sabina|recienobtenido|Hija,bebede7meses 4|Perez|Juan|notiene|ninguna

Yahoraprocederemosaeliminaresteregistro:
sqlite>deletefromDatoswhereid="4"; sqlite>select*fromDatos; 1|Aguiar|Edwin|Si,tiene|Ningunaquedestacar 2|Esparza|Silvina|Tambienposee|Esposa 3|AguiarEsparza|Sabina|recienobtenido|Hija,bebede7meses

Elregistro4(id=4)fueeliminado,aqu usamoselnumerodeidperosepuedeutilizarcualquier indicadorcomoNombre,Apellido,DocumentosuObservaciones. 9.Buscandolosdatos Para los usuarios de sql o mysql esta sintaxis es muy conocida, pero aqu trataremos las generalidadesparaquienesaunnolamanejan.Laexpresinuniversaldebsquedaes select y admitemuchasopcionesquehacendesuusounasentenciamuypoderosa. Lamassimpleesselect*from[tabla];endondeelasteriscoesuncomodinqueindicatodaslas columnasdeesatabla,peropuedeusarseindicandounaespecifica:selectApellidofromDatos;y sololistaraeltotaldedatosdelacolumnaApellidoscomovemosenesteejemplo:
sqlite>selectApellidofromDatos; Aguiar Esparza AguiarEsparza sqlite>

Unaformadebsquedaesordenarlosresultadosporalgncriterio(orderby),enesteejemplo porelalfabticodelacolumnaNombre:
sqlite>select*fromDatosorderbyNombre; 1|Aguiar|Edwin|Si,tiene|Ningunaquedestacar 3|AguiarEsparza|Sabina|recienobtenido|Hija,bebede7meses 2|Esparza|Silvina|Tambienposee|Esposa

Uncriteriosimilarseejecutacuandoutilizamosgroupbyqueagruparesultadosenrazndela expresinqueusemosparaestasentencia. Unejemplo: SELECT*FROM(SELECT*FROM [tabla]GROUPBY[columna] Parabsquedadevalores(mximo,mnimo,promediosocontar)lasentenciaeslasiguiente:

SELECT[exp](tablaocomodin)FROM[Tabla];porejemplo
sqlite>selectmax(id)fromDatos; 3 sqlite>selectCOUNT(*)fromDatos; 3

Comoamboscasossolohay3registrosnumericos(id)elresultadoessimilar,peroenunocuentay enotrohallaelmaximo,veamosotrasexpresiones:
sqlite>selectsum(id)fromDatos; 6 sqlite>selectmin(id)fromDatos; 1

Ensum(id)sumalatotalidaddelosvaloresidyenmin(id)elvalormnimodeid.Hayotrasformas deseleccinderesultadoseinclusivesubquerys(consultasdentrodeconsultas).Yporsupuestouna formadecalcularelaverageopromediodelasumadeunacolumna:


sqlite>selectavg(id)fromDatos; 2.0

Sitenemosuntotalsumatoriode6divididolos3registroselresultadoobvioes2.finalmentehay combinaciones:
sqlite>selectsum(id)/avg(id)fromDatos; 3.0 sqlite>selectsum(id)+avg(id)/min(id)fromDatos; 8.0

10.Masconsultas EstablecerelnumeroderespuestaacotadosporLIMIT:
sqlite>select*fromDatoslimit2; 1|Aguiar|Edwin|Si,tiene|Ningunaquedestacar 2|Esparza|Silvina|Tambienposee|Esposa sqlite>select*fromDatoslimit40; 1|Aguiar|Edwin|Si,tiene|Ningunaquedestacar 2|Esparza|Silvina|Tambienposee|Esposa 3|AguiarEsparza|Sabina|recienobtenido|Hija,bebede7meses

ellimitesmejorutilizadocuandohayunacondicinwhere,porejemploselect[columna]from [tabla]where[columa]=[condicin]LIMITx;dondexeslacantidadderesultadosqueesperamos tenerenpantalla. Sepuedenordenarlasformasdepresentacinenpantallaporuncriteriodeordendescendenteo ascendenteusandoselect[columnaocomodn]from[tabla]ORDERBY[columna]DESC;o ASCparaorganizarlasalidasegnlacolumnaquedeseemos.


sqlite>selectNombre,ApellidofromDatosorderbyApellidodesc;

Silvina|Esparza Sabina|AguiarEsparza Edwin|Aguiar sqlite>selectNombre,ApellidofromDatosorderbyApellidoasc; Edwin|Aguiar Sabina|AguiarEsparza Silvina|Esparza

consultasporaproximacionesdecadenasdetexto:like Sindudaunainteresanteposibilidadesladeobtenerresultadosporaproximacin.Supongamosque lonicoquetenemosesunapellidoopartedeel(lomismoseaplicaacualquiercadenadetextos)


sqlite>selectNombre,ApellidofromdatoswhereApellidolike'A%'; Edwin|Aguiar Sabina|AguiarEsparza

Elresultadoeslabsquedadecualquiercadenadetextoqueiniciecon'A'ysigaconotrasletras dentrodelacolumnaApellido.Probemosconotravariante:
sqlite>selectNombre,ApellidofromDatoswhereApellidolike'%za%'; Silvina|Esparza Sabina|AguiarEsparza

aqu buscamosunacadenadetextodentrodeApellidoquetenga'za'enelmediooencualquier lugar.Elcomodn'%'indicalaposibilidaddemasletrasanterioresoposterioressegnsecoloque. Likeseaplicaacualquiercolumnaincluyendonumricaseinteraccionaconlasdemssegnla complejaycrecienteconstruccindesentenciasquenosanimemosacrear. Sinosinteresahallarunrangodecadenasdetextodentrodeunacolumnaenparticularpodemos usarINdelasiguienteforma:


sqlite> select * from Datos where ('Silvina','Carlos','Sabina','Eduardo'); 2|Esparza|Silvina|Tambienposee|Esposa 3|AguiarEsparza|Sabina|recienobtenido|Hija,bebede7meses Nombre in

TodoloquecumplalacondicionINdentrodelosparntesisescolocadoalasalidadepantalla,lo quenoesexoneradoyloscondicionantesquenoexisten(CarlosyEduardo)tampoco.Tambin podemoshaceralainversamedianteoperadorescomo!=(distintode):


sqlite>select*fromDatoswhereNombre!='Edwin'; 2|Esparza|Silvina|Tambienposee|Esposa 3|AguiarEsparza|Sabina|recienobtenido|Hija,bebede7meses

Deigualmanerafuncionan=yconnmeros><<=>=etc. 11.Ysideseamosconsultarmasdeunatablaalmismotiempo?

Noseriainusualquenecesitaremoscotejardatosentredostablas.Lasintaxisessimple: SELECT [columna1],[columna2],[columna_etc(*)] FROM [Tabla1], [TABLA2]WHERE[condicion][columnatabla1]=[columnatabla1] (*)Delamismatabla1porsupuestoydelatabla2quedeseamosaparezcanenlasalida de pantalla.Parececomplicado?Veamosunejemploconcreto.TenemosunatablallamadaConsultas y otra Consultor; cada una de ellas posee columnas que se denominan id, nombre y numero_consultor,respuesta.Laecuacinseria:
selectid,nombreFROMConsulta,Consultorwhereid=numero_consultor;

Noagradezcan,haganlaprueba. HastaaqullegamosconesteprimeracercamientodeSQLITE,lasintaxisesladeSQLporloque salvoalgunasescasasdiferencias(comoelpuntoantesdeloscomandosespecficosdeestemotor debasededatos)pudiendoconsultarindistintamenteunmanualdesqlosqliteparaelcaso.Este tutorialnoseagotaenloexpuesto,aunquedamuchomaspordetallar,peroloharemosenotra oportunidad. Cualquiersugerencia,criticaocomentarioanuestromailelobservadordelsur@gmail.com EdwinAguiar Diciembrede2006

También podría gustarte