Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccion Sqlite Linux
Introduccion Sqlite Linux
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
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>
Ahotalastablasdentrodeestabasededatosbase.dbylascolumnas:
sqlite>.tables Datos sqlite>.schemaDatos CREATETABLEDatos(idint(9)primarykey,apellidochars(30),nombrechars(30), dniinst(12),observacioneschars(255)); sqlite>
Locualunavezingresadononosdaerror,loquesignificaquesaliobien,cosaqueconfirmamos conelcomando.schema[tabla]:
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
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
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
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
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
Elresultadoeslabsquedadecualquiercadenadetextoqueiniciecon'A'ysigaconotrasletras dentrodelacolumnaApellido.Probemosconotravariante:
sqlite>selectNombre,ApellidofromDatoswhereApellidolike'%za%'; Silvina|Esparza Sabina|AguiarEsparza
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;