Manual de referencia de MySQL 5 - documentation.help · Fuentes de información acerca de MySQL...

2528
Manual de referencia de MySQL 5.0 Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com . El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a [email protected] . Copyright 1997-2006 MySQL AB Esta documentación NO se distribuye bajo una licencia GPL. El uso de esta documentación está sujeta a los siguientes términos: Puede Usted crear una copia impresa de esta documentación únicamente para su uso personal. La conversión a otros formatos está permitida siempre y cuando el contenido no se vea alterado ni editado de ninguna manera. No está permitida la publicación ni la distribución de esta documentación bajo ninguna forma ni en ningún medio, excepto si distribuye la documentación en una manera similar a la que utiliza MySQL para difundirla (esto es, electrónicamente para ser bajada con el software) o en un CD-ROM o medio similar, siempre y cuando la documentación se difunda junto con el software en el mismo medio. Para cualquier otra utilización, como por ejemplo cualquier difusión de copias escritas, o el uso de esta documentación, en su totalidad o parcialmente, en otra publicación, se debe obtener una autorización escrita previa por parte de un representante autorizado de MySQL AB. MySQL AB se reserva cualquier derecho y todos los derechos sobre esta documentación, aunque no esté aquí expresamente acordado. Si desea obtener más información o si está interesado en realizar una traducción, diríjase por favor por correo electrónico a <[email protected] > . Resumen Documento generado el: 07-09-2006 Tabla de contenidos

Transcript of Manual de referencia de MySQL 5 - documentation.help · Fuentes de información acerca de MySQL...

  • ManualdereferenciadeMySQL5.0ÉstaesunatraduccióndelmanualdereferenciadeMySQL,quepuedeencontrarseendev.mysql.com.ElmanualdereferenciaoriginaldeMySQLestáescritoeninglés,yestatraducciónnonecesariamenteestátanactualizadacomolaversiónoriginal.Paracualquiersugerenciasobrelatraducciónyparaseñalarerroresdecualquiertipo,[email protected].

    Copyright1997-2006MySQLAB

    EstadocumentaciónNOsedistribuyebajounalicenciaGPL.Elusodeestadocumentaciónestásujetaalossiguientestérminos:PuedeUstedcrearunacopiaimpresadeestadocumentaciónúnicamenteparasuusopersonal.Laconversiónaotrosformatosestápermitidasiempreycuandoelcontenidonoseveaalteradonieditadodeningunamanera.Noestápermitidalapublicaciónniladistribucióndeestadocumentaciónbajoningunaformanienningúnmedio,exceptosidistribuyeladocumentaciónenunamanerasimilaralaqueutilizaMySQLparadifundirla(estoes,electrónicamenteparaserbajadaconelsoftware)oenunCD-ROMomediosimilar,siempreycuandoladocumentaciónsedifundajuntoconelsoftwareenelmismomedio.Paracualquierotrautilización,comoporejemplocualquierdifusióndecopiasescritas,oelusodeestadocumentación,ensutotalidadoparcialmente,enotrapublicación,sedebeobtenerunaautorizaciónescritapreviaporpartedeunrepresentanteautorizadodeMySQLAB.MySQLABsereservacualquierderechoytodoslosderechossobreestadocumentación,aunquenoestéaquíexpresamenteacordado.

    Sideseaobtenermásinformaciónosiestáinteresadoenrealizarunatraducción,diríjaseporfavorporcorreoelectrónicoa.

    Resumen

    Documentogeneradoel:07-09-2006

    Tabladecontenidos

    http://dev.mysql.com/doc/mysql/enmailto:[email protected]:[email protected]

  • Prefacio

  • 1.Informacióngeneral1.1.Sobreestemanual1.2.Convencionesutilizadasenestemanual1.3.PanorámicadeMySQLAB1.4.PanorámicadelsistemadegestióndebasededatosMySQL

    1.4.1.HistoriadeMySQL1.4.2.LasprincipalescaracterísticasdeMySQL1.4.3.EstabilidaddeMySQL1.4.4.DimensionesmáximasdelastablasMySQL1.4.5.Conformidadconelefecto2000

    1.5.MapadedesarrollodeMySQL1.5.1.ElservidorMySQLincrustado(embedded)1.5.2.QuéhaydenuevoenMySQL5.0

    1.6.FuentesdeinformaciónacercadeMySQL1.6.1.ListasdecorreodeMySQL1.6.2.SoporteporIRC(InternetRelayChat)delacomunidadMySQL1.6.3.SoporteporpartedelacomunidadenlosforosdeMySQL

    1.7.CumplimientodelosestándaresporpartedeMySQL1.7.1.EstándaresutilizadosporMySQL1.7.2.SeleccióndemodosSQL1.7.3.EjecutarMySQLenmodoANSI1.7.4.ExtensionesMySQLalestándarSQL1.7.5.DiferenciasenMySQLdelestándarSQL1.7.6.CómotrataMySQLlasrestricciones(Constraints)

  • 2.InstalarMySQL2.1.Cuestionesgeneralessobrelainstalación

    2.1.1.SistemasoperativosqueMySQLsoporta2.1.2.EscogerladistribuciónMySQLainstalar2.1.3.CómoobtenerMySQL2.1.4.ComprobarlaintegridaddepaquetesconsumasdeverificaciónMD5oGnuPG2.1.5.Conformacióndelainstalación

    2.2.InstalaciónMySQLestándarconunadistribuciónbinaria2.3.InstalarMySQLenWindows

    2.3.1.RequisitosdeWindows2.3.2.Eleccióndeunpaquetedeinstalación2.3.3.InstalacióndeMySQLconuninstaladorautomático2.3.4.UsarelasistentedeinstalacióndeMySQL2.3.5.Utilizacióndelasistentedeconfiguración2.3.6.InstalarMySQLpartiendodeunarchivoZipNoinstall2.3.7.Descomprimirelficherodeinstalación2.3.8.Creacióndeunficherodeopciones2.3.9.SeleccionaruntipodeservidorMySQL2.3.10.Arrancarelservidorlaprimeravez2.3.11.ArrancarMySQLdesdelarayadecomandosdeWindows2.3.12.ArrancarMySQLcomounserviciodeWindows2.3.13.ComprobarlainstalacióndeMySQLInstallation2.3.14.ResolucióndeproblemasenlainstalacióndeMySQLbajoWindows2.3.15.AumentarlaversióndeMySQLenWindows2.3.16.ComparaciónentreMySQLenWindowsyMySQLenUnix

    2.4.InstalarMySQLenLinux2.5.InstalarMySQLenMacOSX2.6.InstalarMySQLsobreNetWare2.7.InstalacióndeMySQLenotrossistemassimilaresaUnix2.8.InstalacióndeMySQLusandounadistribucióndecódigofuente

    2.8.1.Panorámicadelainstalacióndecódigofuente2.8.2.Opcionestípicasdeconfigure2.8.3.Instalardesdeelárboldecódigofuentededesarrollo2.8.4.ProblemasenlacompilacióndeMySQL2.8.5.NotassobreMIT-pthreads2.8.6.InstalarMySQLdesdeelcódigofuenteenWindows

  • 2.8.7.CompilarlosclientesdeMySQLenWindows2.9.Puestaenmarchaycomprobacióndespuésdelainstalación

    2.9.1.PasosaseguirdespuésdelainstalaciónenWindows2.9.2.PasosaseguirdespuésdelainstalaciónenUnix2.9.3.HacerseguraslascuentasinicialesdeMySQL

    2.10.AumentarlaversióndeMySQL2.10.1.Aumentarlaversiónde4.1a5.02.10.2.Aumentarlaversióndelastablasdeprivilegios2.10.3.CopiarbasesdedatosMySQLaotramáquina

    2.11.BajarlaversióndeMySQL2.11.1.Volveralaversión4.1

    2.12.Notasespecíficassobresistemasoperativos2.12.1.NotassobreLinux2.12.2.NotassobreMacOSX2.12.3.NotassobreSolaris2.12.4.NotassobreBSD2.12.5.NotassobreotrosUnix2.12.6.NotassobreOS/2

    2.13.NotassobrelainstalacióndePerl2.13.1.InstalacióndePerlenUnix2.13.2.InstalarActiveStatePerlenWindows2.13.3.ProblemasenlautilizacióndelainterfazPerlDBI/DBD

  • 3.Curso(tutorial)deMySQL3.1.Conectarsealydesconectarsedelservidor3.2.Entrarconsultas3.3.Crearyutilizarunabasededatos

    3.3.1.Crearyseleccionarunabasededatos3.3.2.Crearunatabla3.3.3.Cargardatosenunatabla3.3.4.Extraerinformacióndeunatabla

    3.4.Obtenerinformaciónsobrebasesdedatosytablas3.5.Usarmysqlenmodobatch3.6.Ejemplosdeconsultascomunes

    3.6.1.Elvalormáximodeunacolumna3.6.2.Elregistroquetieneelvalormáximodedeterminadacolumna3.6.3.Máximodecolumnaporgrupo3.6.4.Losregistrosdeungrupoquetienenelmáximovalorenalgunacolumna3.6.5.Utilizacióndevariablesdeusuario3.6.6.Usarclavesforáneas(foreignkeys)3.6.7.Buscarusandodosclaves3.6.8.Calcularvisitasdiarias3.6.9.UtilizacióndeAUTO_INCREMENT

    3.7.ConsultasdelproyectoMellizos(Twin)3.7.1.Encontrartodoslosmellizosnorepartidos3.7.2.Mostrarunatabladeestadodemellizos

    3.8.UsarMySQLconApache

  • 4.UsarlosprogramasMySQL4.1.PanorámicadeprogramasMySQL4.2.InvocarprogramasMySQL4.3.Especificaropcionesdeprograma

    4.3.1.Usaropcionesenlarayadecomando4.3.2.Usarficherosdeopciones4.3.3.Usarvariablesdeentornoparaespecificaropciones4.3.4.Utilizacióndeopcionesparaestablecervariablesdeprograma

  • 5.Administracióndebasesdedatos5.1.ElservidorMySQLyscriptsdearranquedelservidor

    5.1.1.Panorámicadelosprogramasscriptsylasutilidadesdelladodelservidor(server-side)5.1.2.ElservidorextendidodeMySQLmysqld-max5.1.3.Elscriptdearranquedelservidormysqld_safe5.1.4.Elscriptmysql.serverparaelarranquedelservidor5.1.5.Elprogramamysqld_multiparagestionarmúltiplesservidoresMySQL

    5.2.ElgestordeinstanciasdeMySQL5.2.1.ArrancarelservidorMySQLconelgestordeinstanciasMySQL5.2.2.ConexiónalgestordeinstanciasdeMySQLycreacióndecuentasdeusuario5.2.3.OpcionesdeloscomandosdelgestordeinstanciasMySQL5.2.4.FicherosdeconfiguracióndelgestordeinstanciasdeMySQL5.2.5.LoscomandosquereconoceelgestordeinstanciasdeMySQL

    5.3.ConfiguracióndelservidorMySQL5.3.1.Opcionesdelcomandomysqld5.3.2.ElmodoSQLdelservidor5.3.3.Variablesdesistemadelservidor5.3.4.Variablesdeestadodelservidor

    5.4.ElprocesodecierredelservidorMySQL5.5.Cuestionesdeseguridadgeneral

    5.5.1.Guíadeseguridadgeneral5.5.2.HacerqueMySQLseasegurocontraataques5.5.3.Opcionesdearranqueparamysqldrelacionadasconlaseguridad5.5.4.CuestionesrelacionadasconlaseguridadyLOADDATALOCAL

    5.6.ElsistemadeprivilegiosdeaccesodeMySQL5.6.1.Quéhaceelsistemadeprivilegios5.6.2.Cómofuncionaelsistemadeprivilegios5.6.3.PrivilegiosdelosqueproveeMySQL5.6.4.ConectarsealservidorMySQL5.6.5.Controldeacceso,nivel1:Comprobacióndelaconexión5.6.6.Controldeacceso,nivel2:comprobacióndesolicitudes5.6.7.Cuándotienenefectoloscamiosdeprivilegios5.6.8.CausasdeerroresAccessdenied5.6.9.HashingdecontraseñasenMySQL4.1

  • 5.7.GestióndelacuentadeusuarioMySQL5.7.1.NombresdeusuarioycontraseñasdeMySQL5.7.2.AñadirnuevascuentasdeusuarioaMySQL5.7.3.EliminarcuentasdeusuariodeMySQL5.7.4.Limitarrecursosdecuentas5.7.5.Asignarcontraseñasacuentas5.7.6.Guardarunacontraseñadeformasegura5.7.7.Usarconexionesseguras

    5.8.Prevencióndedesastresyrecuperaciones5.8.1.Copiasdeseguridaddebasesdedatos5.8.2.Ejemplodeestrategiadecopiasdeseguridadyrecuperación5.8.3.Mantenimientodetablasyrecuperacióndeunfallocatastrófico(crash)5.8.4.Organizarunprogramademantenimientodetablas5.8.5.Obtenerinformaciónacercadeunatabla

    5.9.UsointernacionalylocalizacióndeMySQL5.9.1.Elconjuntodecaracteresutilizadoparadatosyordenación5.9.2.Escogerelidiomadelosmensajesdeerror5.9.3.Añadirunconjuntodecaracteresnuevo5.9.4.Losvectoresdedefinicióndecaracteres5.9.5.Soporteparacolacióndecadenasdecaracteres5.9.6.Soportedecaracteresmulti-byte5.9.7.Problemasconconjuntosdecaracteres5.9.8.SoportedezonashorariasenelservidorMySQL

    5.10.Losficherosderegistro(log)deMySQL5.10.1.Elregistrodeerrroes(ErrorLog)5.10.2.Elregistrogeneraldeconsultas5.10.3.Elregistrobinario(BinaryLog)5.10.4.Elregistrodeconsultaslentas(SlowQueryLog)5.10.5.Mantenimientodeficherosderegistro(log)

    5.11.EjecutarmásdeunservidorMySQLenlamismamáquina5.11.1.EjecutarvariosservidoresenWindows5.11.2.EjecutarvariosservidoresenUnix5.11.3.Utilizacióndeprogramasclienteenunentornodemúltiplesservidores

    5.12.LacachédeconsultasdeMySQL5.12.1.Cómooperalacachédeconsultas5.12.2.OpcionesdeSELECTparalacachédeconsultas5.12.3.Configuracióndelacachédeconsultas

  • 5.12.4.Estadoymantenimientodelacachédeconsultas

  • 6.ReplicaciónenMySQL6.1.Introducciónalareplicación6.2.Panorámicadelaimplementacióndelareplicación6.3.Detallesdelaimplementacióndelareplicación

    6.3.1.Estadosdelossubprocesosdelmaestrodereplicación6.3.2.EstadosdeprocesoE/S(I/O)delesclavodereplicación6.3.3.EstadosdelflujoSQLdeunesclavodereplicación6.3.4.Ficherosdereplicación,retardadosydeestado

    6.4.Cómomontarlareplicación6.5.CompatibilidadentreversionesdeMySQLconrespectoalareplicación6.6.Aumentarlaversióndelareplicación

    6.6.1.Aumentarlaversióndelareplicacióna5.06.7.Característicasdelareplicaciónyproblemasconocidos6.8.Opcionesdearranquedereplicación6.9.Preguntasyrespuestassobrereplicación6.10.Resolucióndeproblemasdereplicación6.11.Reportarbugsdereplicación

  • 7.OptimizacióndeMySQL7.1.Panorámicasobreoptimización

    7.1.1.LimitacionesysolucionesdecompromisoeneldiseñodeMySQL7.1.2.Diseñaraplicacionespensandoenlaportabilidad7.1.3.ParaquéhemosusadoMySQL7.1.4.Elpaquetedepruebasderendimiento(benchmarks)deMySQL7.1.5.Usarpruebasderendimiento(benchmarks)propios

    7.2.OptimizarsentenciasSELECTyotrasconsultas7.2.1.SintaxisdeEXPLAIN(ObtenerinformaciónacercadeunSELECT)7.2.2.Estimarelrenidimientodeunaconsulta7.2.3.VelocidaddelasconsultasSELECT7.2.4.OptimizacióndelascláusulasWHEREporpartedeMySQL7.2.5.Optimizaciónderango7.2.6.IndexMergeOptimization7.2.7.CómooptimizaMySQLISNULL7.2.8.CómoMySQLoptimizaDISTINCT7.2.9.CómooptimizaMySQLlosLEFTJOINyRIGHTJOIN7.2.10.CómooptimizaMySQLORDERBY7.2.11.CómooptimizaMySQLlosGROUPBY7.2.12.CómooptimizaMySQLlascláusulasLIMIT7.2.13.Cómoevitarlecturascompletasdetablas7.2.14.VelocidaddelasentenciaINSERT7.2.15.VelocidaddelassentenciasUPDATE7.2.16.VelocidaddesentenciasDELETE7.2.17.Otrosconsejossobreoptimización

    7.3.Temasrelacionadosconelbloqueo7.3.1.Métodosdebloqueo7.3.2.Cuestionesrelacionadasconelbloqueo(locking)detablas

    7.4.Optimizarlaestructuradeunabasededatos7.4.1.Eleccionesdediseño7.4.2.Hagasusdatoslomáspequeñosposibles7.4.3.Índicesdecolumna7.4.4.Índicesdemúltiplescolumnas7.4.5.CómoutilizaMySQLlosíndices7.4.6.LacachédeclavesdeMyISAM7.4.7.CómocuentaMySQLlastablasabiertas7.4.8.CómoabreycierratablasMySQL

  • 7.4.9.Desventajasdecrearmuchastablasenlamismabasededatos7.5.OptimizacióndelservidorMySQL

    7.5.1.Factoresdesistemayafinamientosdeparámetrosdearranque7.5.2.Afinarparámetrosdelservidor7.5.3.Vigilarelrendimientodeloptimizadordeconsultas7.5.4.EfectosdelacompilaciónydelenlaceenlavelocidaddeMySQL7.5.5.CómoutilizaMySQLlamemoria7.5.6.CómousaMySQLlasDNS

    7.6.Cuestionesrelacionadasconeldisco7.6.1.Utilizarenlacessimbólicos

  • 8.ProgramasclienteyutilidadesMySQL8.1.Panorámicadescriptsyutilidadesdelladodelcliente8.2.myisampack,elgeneradordetablascomprimidasdesólolecturadeMySQL8.3.Laherramientaintérpretedecomandosmysql

    8.3.1.Comandosmysql8.3.2.EjecutarsentenciasSQLdesdeunficherodetexto8.3.3.Sugerenciasacercademysql

    8.4.AdministrarunservidorMySQLconmysqladmin8.5.Lautilidadmysqlbinlogpararegistrosbinarios8.6.Elprogramamysqlcheckparamanteneryreparartablas8.7.Elprogramadecopiadeseguridaddebasededatosmysqldump8.8.Elprogramadecopiasdeseguridaddebasededatosmysqlhotcopy8.9.Elprogramaparaimportardatosmysqlimport8.10.Mostrarbasesdedatos,tablasycolumnasconmysqlshow8.11.perror,explicacióndecódigosdeerror8.12.Lautilidadreplacedecambiodecadenasdecaracteres

  • 9.Estructuradelenguaje9.1.Valoresliterales

    9.1.1.Cadenasdecaracteres9.1.2.Números9.1.3.Valoreshexadecimales9.1.4.Valoresbooleanos9.1.5.Valoresdebits9.1.6.ValoresNULL

    9.2.Nombresdebasesdedatos,tablas,índices,columnasyalias9.2.1.Cualificadoresdelosidentificadores9.2.2.Sensibilidadamayúsuclasyminúsculasdeidentificadores

    9.3.Variablesdeusuario9.4.Variablesdesistema

    9.4.1.Variablesestructuradasdesistema9.5.Sintaxisdecomentarios9.6.TratamientodepalabrasreservadasenMySQL

  • 10.Soportedeconjuntosdecaracteres10.1.Conjuntosdecaracteresycolacionesengeneral10.2.ConjuntosdecaracteresycolacionesenMySQL10.3.Determinarelconjuntodecaracteresylacolaciónpordefecto

    10.3.1.Conjuntodecaracteresycolacióndelservidor10.3.2.Conjuntosdecaracteresycolacionesdelabasededatos10.3.3.Conjuntodecaracteresycolacióndetabla10.3.4.Conjuntodecaracteresycolacióndecolumnas10.3.5.Ejemplosdeasignacióndeconjuntodecaracteresycolación10.3.6.Conjuntodecaracteresycolacióndelaconexión10.3.7.Conjuntodecaracteresycolacióndecolumnas“carácter”10.3.8.UsarCOLLATEensentenciasSQL10.3.9.PrecedenciadelacláusulaCOLLATE10.3.10.OperadorBINARY10.3.11.Casosespecialesenlosquedeterminarlacolaciónescomplicado10.3.12.Acadacolaciónunconjuntodecaracterescorrecto10.3.13.Unejemplodelefectodeunacolación

    10.4.Efectosdelsoportedeconjuntosdecaracteres10.4.1.Cadenasdecaracteresderesultado10.4.2.CONVERT()10.4.3.CAST()10.4.4.SentenciasSHOW

    10.5.SoporteUnicode10.6.UTF8parametadatos10.7.CompatibilidadconotrosSGBDs(Sistemasgestoresdebasesdedatos)10.8.Formatodelnuevoficherodeconjuntodecaracateres10.9.Conjuntodecaracteresnacional10.10.ConjuntosdecaracteresycolacionesquesoportaMySQL

    10.10.1.ConjuntosdecaracteresUnicode10.10.2.ConjuntosdecaracteresdeEuropaoccidental10.10.3.ConjuntosdecaracteresdeEuropacentral10.10.4.ConjuntosdecaracteresdelsurdeEuropaydeOrienteMedio10.10.5.Conjuntosdecaracteresbálticos10.10.6.Conjuntosdecaracterescirílicos10.10.7.Conjuntosdecaracteresasiáticos

  • 11.Tiposdecolumna11.1.Panorámicadetiposdecolumna

    11.1.1.Panorámicadetiposnuméricos11.1.2.Panorámicadetiposdefechasyhora11.1.3.Panorámicadetiposdecadenasdecaracteres

    11.2.Tiposnuméricos11.3.Tiposdefechayhora

    11.3.1.LostiposdedatosDATETIME,DATEyTIMESTAMP11.3.2.EltipoTIME11.3.3.EltipodedatosYEAR11.3.4.Efecto2000(Y2K)ytiposdedatos

    11.4.Tiposdecadenasdecaracteres11.4.1.LostiposCHARyVARCHAR11.4.2.LostiposBINARYyVARBINARY11.4.3.LostiposBLOByTEXT11.4.4.EltipodecolumnaENUM11.4.5.EltipoSET

    11.5.Requisitosdealmacenamientosegúneltipodecolumna11.6.Escogereltipodecolumnacorrecto11.7.Usartiposdecolumnasdeotrosmotoresdebasesdedatos

  • 12.Funcionesyoperadores12.1.Operadores

    12.1.1.Precedenciasdelosoperadores12.1.2.Paréntesis12.1.3.Funcionesyoperadoresdecomparación12.1.4.Operadoreslógicos

    12.2.Funcionesdecontroldeflujo12.3.Funcionesparacadenasdecaracetres

    12.3.1.Funcionesdecomparacióndecadenasdecaracteres12.4.Funcionesnuméricas

    12.4.1.Operadoresaritméticos12.4.2.Funcionesmatemáticas

    12.5.Funcionesdefechayhora12.6.QuécalendarioutilizaMySQL12.7.Funcionesdebúsquedadetextocompleto(Full-Text)

    12.7.1.Búsquedasbooleanasdetextocompleto(Full-Text)12.7.2.Búsquedasdetextocompleto(Full-Text)conexpansióndeconsulta12.7.3.Limitacionesdelasbúsquedasdetextocompleto(Full-Text)12.7.4.Afinarbúsquedasdetextocompleto(Full-Text)conMySQL12.7.5.Cosasporhacerenbúsquedasdetextocompleto(Full-Text)

    12.8.Funcionesyoperadoresdecast12.9.Otrasfunciones

    12.9.1.Funcionesbit12.9.2.Funcionesdeencriptación12.9.3.Funcionesdeinformación12.9.4.Funcionesvarias

    12.10.FuncionesymodificadoresparacláusulasGROUPBY12.10.1.Funciones(deagregación)deGROUPBY12.10.2.ModificadoresdeGROUPBY12.10.3.GROUPBYconcamposescondidos

  • 13.SintaxisdesentenciasSQL13.1.Sentenciasdedefinicióndedatos(DataDefinitionStatements)

    13.1.1.SintaxisdeALTERDATABASE13.1.2.SintaxisdeALTERTABLE13.1.3.SintaxisdeCREATEDATABASE13.1.4.SintaxisdeCREATEINDEX13.1.5.SintaxisdeCREATETABLE13.1.6.SintaxisdeDROPDATABASE13.1.7.SintaxisdeDROPINDEX13.1.8.SintaxisdeDROPTABLE13.1.9.SintaxisdeRENAMETABLE

    13.2.Sentenciasdemanipulacióndedatos(DataManipulationStatements)13.2.1.SintaxisdeDELETE13.2.2.SintaxisdeDO13.2.3.SintaxisdeHANDLER13.2.4.SintaxisdeINSERT13.2.5.SintaxisdeLOADDATAINFILE13.2.6.SintaxisdeREPLACE13.2.7.SintaxisdeSELECT13.2.8.Sintaxisdesubconsultas13.2.9.SintaxisdeTRUNCATE13.2.10.SintaxisdeUPDATE

    13.3.SentenciasútilesdeMySQL13.3.1.SintaxisdeDESCRIBE(Informaciónacercadelascolumnas)13.3.2.SintaxisdeUSE

    13.4.ComandostransaccionalesydebloqueodeMySQL13.4.1.SintaxisdeSTARTTRANSACTION,COMMITyROLLBACK13.4.2.Sentenciasquenosepuedendeshacer13.4.3.Sentenciasquecausanunaejecución(commit)implícita13.4.4.SintaxisdeSAVEPOINTyROLLBACKTOSAVEPOINT13.4.5.SintaxisdeLOCKTABLESyUNLOCKTABLES13.4.6.SintaxisdeSETTRANSACTION

    13.5.Sentenciasdeadministracióndebasededatos13.5.1.Sentenciasparalagestióndecuentas13.5.2.Sentenciasparaelmantenimientodetablas13.5.3.SintaxisdeSET13.5.4.SintaxisdeSHOW13.5.5.Otrassentenciasparalaadministración

  • 13.6.Sentenciasdereplicación13.6.1.SentenciasSQLparaelcontroldeservidoresmaestros13.6.2.SentenciasSQLparaelcontroldeservidoresesclavos

    13.7.SintaxisSQLdesentenciaspreparadas

  • 14.MotoresdealmacenamientodeMySQLytiposdetablas14.1.ElmotordealmacenamientoMyISAM

    14.1.1.OpcionesdearranquedeMyISAM14.1.2.Cuántoespacionecesitanlasclaves14.1.3.FormatosdealmacenamientodetablasMyISAM14.1.4.ProblemasentablasMyISAM

    14.2.ElmotordealmacenamientoMERGE14.2.1.ProblemascontablasMERGE

    14.3.ElmotordealmacenamientoMEMORY(HEAP)14.4.ElmotordealmacenamientoBDB(BerkeleyDB)

    14.4.1.SistemasoperativosquesoportaBDB14.4.2.InstalacióndeBDB14.4.3.OpcionesdearranquedeBDB14.4.4.CaracterísticasdelastablasBDB14.4.5.TemaspendientesdearregloparaBDB14.4.6.LimitacionesenlastablasBDB14.4.7.ErroresquepuedendarseenelusodetablasBDB

    14.5.ElmotordealmacenamientoEXAMPLE14.6.ElmotordealmacenamientoFEDERATED

    14.6.1.InstalacióndelmotordealmacenamientoFEDERATED14.6.2.DescripcióndelmotordealmacenamientoFEDERATED14.6.3.CómousarlastablasFEDERATED14.6.4.LimitacionesdelmotordealmacenamientoFEDERATED

    14.7.ElmotordealmacenamientoARCHIVE14.8.ElmotordealmacenamientoCSV

  • 15.ElmotordealmacenamientoInnoDB15.1.PanorámicadeInnoDB15.2.InformacióndecontactodeInnoDB15.3.ConfiguracióndeInnoDB15.4.OpcionesdearranquedeInnoDB15.5.CrearelespaciodetablasInnoDB

    15.5.1.ResolucióndeproblemasenlainicializacióndeInnoDB15.6.CreartablasInnoDB

    15.6.1.CómoutilizartransaccionesenInnoDBcondistintasAPIs15.6.2.PasartablasMyISAMaInnoDB15.6.3.CómofuncionaunacolumnaAUTO_INCREMENTenInnoDB15.6.4.Restricciones(constraints)FOREIGNKEY15.6.5.InnoDByreplicaciónMySQL15.6.6.Usarunespaciodetablasparacadatabla

    15.7.AñadirysuprimirregistrosyficherosdedatosInnoDB15.8.HacerunacopiadeseguridadyrecuperarunabasededatosInnoDB

    15.8.1.Forzarunarecuperación15.8.2.Marcadores

    15.9.TrasladarunabasededatosInnoDBaotramáquina15.10.BloqueoymodelodetransaccionesdeInnoDB

    15.10.1.ModosdebloqueoInnoDB15.10.2.InnoDByAUTOCOMMIT15.10.3.InnoDByTRANSACTIONISOLATIONLEVEL15.10.4.Lecturasconsistentesquenobloquean15.10.5.BloquearlecturasSELECT...FORUPDATEySELECT...LOCKINSHAREMODE15.10.6.Bloqueodelapróximaclave(Next-KeyLocking):evitarelproblemafantasma15.10.7.UnejemplodelecturaconsistenteenInnoDB15.10.8.EstablecimientodebloqueoscondiferentessentenciasSQLenInnoDB15.10.9.¿CuándoejecutaodeshaceimplicitamenteMySQLunatransacción?15.10.10.Deteccióndeinterbloqueos(deadlocks)ycancelacióndetransacciones(rollbacks)15.10.11.Cómotratarconinterbloqueos

    15.11.ConsejosdeafinamientodelrendimientodeInnoDB15.11.1.SHOWINNODBSTATUSylosmonitoresInnoDB

  • 15.12.Implementacióndemultiversión15.13.Estructurasdetablaydeíndice

    15.13.1.Estructurafísicadeuníndice15.13.2.Búferdeinserts15.13.3.AdaptiveHashIndexes15.13.4.Estructurafísicadelosregistros

    15.14.GestióndeespaciodeficherosydeE/Sdedisco(DiskI/O)15.14.1.E/Sdedisco(DiskI/O)15.14.2.Usardispositivosenbruto(rawdevices)paraespaciosdetablas15.14.3.Gestióndelespaciodeficheros15.14.4.Desfragmentarunatabla

    15.15.TratamientodeerroresdeInnoDB15.15.1.CódigosdeerrordeInnoDB15.15.2.Códigosdeerrordelsistemaoeprativo

    15.16.RestriccionesdelastablasInnoDB15.17.ResolverproblemasrelacionadosconInnoDB

    15.17.1.ResolverproblemasdelasoperacionesdeldiccionariodedatosdeInnoDB

  • 16.MySQLCluster16.1.PanorámicadeMySQLCluster16.2.ConceptosbásicosdeBasicMySQLCluster16.3.Cómoconfigurarvariosordenadores

    16.3.1.Hardware,softwareyredes16.3.2.Instalación16.3.3.Configuración16.3.4.Arranqueinicial16.3.5.Cargardatosdeejemployrealizarconsultas16.3.6.Apagadoyencendidoseguros

    16.4.ConfiguracióndeMySQLCluster16.4.1.GenerarMySQLClusterdesdeelcódigofuente16.4.2.Instalarelsoftware16.4.3.RápidomontajedepruebadeMySQLCluster16.4.4.Ficherodeconfiguración

    16.5.GestióndeprocesosenMySQLCluster16.5.1.ElusodelprocesodelservidorMySQLparaMySQLCluster16.5.2.ndbd,elprocesodelnododemotordealmacenamiento16.5.3.Elprocesodelservidordeadministraciónndb_mgmd16.5.4.Elprocesodeclientedeadministraciónndb_mgm16.5.5.OpcionesdecomandoparaprocesosdeMySQLCluster

    16.6.AdministracióndeMySQLCluster16.6.1.Comandosdelclientedeadministración16.6.2.InformesdeeventosgeneradosporMySQLCluster16.6.3.Mododeusuarioúnico16.6.4.CopiasdeseguridadOn-lineparaMySQLCluster

    16.7.UsarinterconexionesdealtavelocidadconMySQLCluster16.7.1.ConfigurarMySQLClusterparaqueutiliceSocketsSCI16.7.2.Entenderelimpactodeinterconexionesdenodos

    16.8.LimitacionesconocidasdeMySQLCluster16.9.MapadedesarrollodeMySQLCluster

    16.9.1.CambiosdeMySQLClusterenMySQL5.016.9.2.MapadedesarrollodeMySQL5.1paraMySQLCluster

    16.10.PreguntasfrecuentessobreMySQLCluster16.11.GlosariodeMySQLCluster

  • 17.IntroducciónaMaxDB17.1.HistoriadeMaxDB17.2.Licenciamientoysoporte17.3.EnlacesrelacionadosconMaxDB17.4.ConceptosbásicosdeMaxDB17.5.DiferenciasdeprestacionesentreMaxDByMySQL17.6.CaracterísticasdeinteroperabilidadentreMaxDByMySQL17.7.PalabrasreservadasdeMaxDB

  • 18.ExtensionesespacialesdeMySQL18.1.Introducción18.2.ElmodelogeométricoOpenGIS

    18.2.1.Lajerarquíadelasclasesgeométricas18.2.2.LaclaseGeometry18.2.3.LaclasePoint18.2.4.LaclaseCurve18.2.5.LaclaseLineString18.2.6.LaclaseSurface18.2.7.LaclasePolygon18.2.8.LaclaseGeometryCollection18.2.9.LaclaseMultiPoint18.2.10.LaclaseMultiCurve18.2.11.LaclaseMultiLineString18.2.12.LaclaseMultiSurface18.2.13.LaclaseMultiPolygon

    18.3.Formatosdedatosespacialessoportados18.3.1.FormatoWell-KnownText(WKT)18.3.2.FormatoWell-KnownBinary(WKB)

    18.4.CrearunabasededatosMySQLconcapacidadesespaciales18.4.1.TiposdedatosespacialesdeMySQL18.4.2.Crearvaloresespaciales18.4.3.Crearcolumnasespaciales18.4.4.Poblarcolumnasespaciales18.4.5.Extraerdatosespaciales

    18.5.Analizarinformaciónespacial18.5.1.Funcionesdeconversióndeformatogeométrico18.5.2.FuncionesGeometry18.5.3.Funcionesquecreannuevasgeometríasapartirdeunasexistentes18.5.4.Funcionesparaprobarrelacionesespacialesentreobjetosgeométricos18.5.5.RelacionesentrerectángulosMBR(MinimalBoundingRectangles)18.5.6.Funcionesquepruebanrelacionesespacialesentregeometrías

    18.6.Optimizacióndelanálisisespacial18.6.1.Crearíndicesespaciales18.6.2.Usaruníndiceespacial

  • 18.7.ConformidadycompatibilidaddeMySQL18.7.1.CaracterísticasGISquetodavíanohansidoimplementadas

  • 19.Procedimientosalmacenadosyfunciones19.1.Procedimientosalmacenadosylastablasdepermisos19.2.Sintaxisdeprocedimientosalmacenados

    19.2.1.CREATEPROCEDUREyCREATEFUNCTION19.2.2.ALTERPROCEDUREyALTERFUNCTION19.2.3.DROPPROCEDUREyDROPFUNCTION19.2.4.SHOWCREATEPROCEDUREySHOWCREATEFUNCTION19.2.5.SHOWPROCEDURESTATUSySHOWFUNCTIONSTATUS19.2.6.LasentenciaCALL19.2.7.SentenciacompuestaBEGIN...END19.2.8.SentenciaDECLARE19.2.9.Variablesenprocedimientosalmacenados19.2.10.ConditionsandHandlers19.2.11.Cursores19.2.12.Constructoresdecontroldeflujo

    19.3.Registrobinariodeprocedimientosalmacenadosydisparadores

  • 20.Disparadores(triggers)20.1.SintaxisdeCREATETRIGGER20.2.SintaxisdeDROPTRIGGER20.3.Utilizacióndedisparadores

  • 21.Vistas(Views)21.1.SintaxisdeALTERVIEW21.2.SintaxisdeCREATEVIEW21.3.SintaxisdeDROPVIEW21.4.SintaxisdeSHOWCREATEVIEW

  • 22.LabasededatosdeinformaciónINFORMATION_SCHEMA22.1.LastablasINFORMATION_SCHEMA

    22.1.1.LatablaINFORMATION_SCHEMASCHEMATA22.1.2.LatablaINFORMATION_SCHEMATABLES22.1.3.LatablaINFORMATION_SCHEMACOLUMNS22.1.4.LatablaINFORMATION_SCHEMASTATISTICS22.1.5.LatablaINFORMATION_SCHEMAUSER_PRIVILEGES22.1.6.LatablaINFORMATION_SCHEMASCHEMA_PRIVILEGES22.1.7.LatablaINFORMATION_SCHEMATABLE_PRIVILEGES22.1.8.LatablaINFORMATION_SCHEMACOLUMN_PRIVILEGES22.1.9.LatablaINFORMATION_SCHEMACHARACTER_SETS22.1.10.LatablaINFORMATION_SCHEMACOLLATIONS22.1.11.LatablaINFORMATION_SCHEMACOLLATION_CHARACTER_SET_APPLICABILITY22.1.12.LatablaINFORMATION_SCHEMATABLE_CONSTRAINTS22.1.13.LatablaINFORMATION_SCHEMAKEY_COLUMN_USAGE22.1.14.LatablaINFORMATION_SCHEMAROUTINES22.1.15.LatablaINFORMATION_SCHEMAVIEWS22.1.16.LatablaINFORMATION_SCHEMATRIGGERS22.1.17.OtrastablasINFORMATION_SCHEMA

    22.2.ExtensionesalassentenciasSHOW

  • 23.Matemáticasdeprecisión23.1.Tiposdevaloresnuméricos23.2.CambioseneltipodedatosDECIMAL23.3.Manejodeexpresiones23.4.Cómoseredondea23.5.Ejemplosdematemáticasdeprecisión

  • 24.APIsdeMySQL24.1.msql2mysql—24.2.mysql_config—24.3.LaAPICdeMySQL

    24.3.1.TiposdedatosdelaAPIC24.3.2.PanorámicadefuncionesdelaAPIC24.3.3.DescripcióndefuncionesdelaAPIC24.3.4.SentenciaspreparadasdelaAPIC24.3.5.TiposdedatosdesentenciaspreparadasdelaAPIC24.3.6.PanorámicadelasfuncionesdesentenciaspreparadasdelaAPIC24.3.7.DescripcionesdefuncionesdesentenciaspreparadasdelaAPIC24.3.8.ProblemasconsentenciaspreparadasdelaAPIC24.3.9.TratamientoporpartedelaAPICdelaejecucióndemúltiplesconsultas24.3.10.ManejodevaloresdefechayhoraporpartedelaAPIC24.3.11.DescripcióndefuncionesdelaAPICparaelcontroldesubprocesos24.3.12.DescripcióndelasfuncionesdelaAPICdelservidorincrustado(embedded)24.3.13.PreguntasyproblemascomunesenelusodelaAPIC24.3.14.Generarprogramascliente24.3.15.Cómohacerunclientemultihilo24.3.16.libmysqld,labibliotecadelservidorMySQLincrustado(embedded)

    24.4.APIPHPdeMySQL24.4.1.ProblemascomunesconMySQLyPHP

    24.5.LaAPIPerldeMySQL24.6.APIC++deMySQL

    24.6.1.BorlandC++24.7.LaAPIPythondeMySQL24.8.LaAPITcldeMySQL24.9.ElvisordeMySQLEiffel

  • 25.ConectoresMySQL25.1.ElconectorODBCdeMySQL

    25.1.1.IntroducciónaMyODBC25.1.2.InformacióngeneralsobreODBCyMyODBC25.1.3.CómoinstalarMyODBC25.1.4.InstalarMyODBCenWindowsdesdeunadistribuciónbinaria25.1.5.InstalacióndeMyODBCenUnixpartiendodeunadistribuciónbinaria25.1.6.InstalarMyODBCdeunadistribucióndecódigofuenteenWindows25.1.7.InstalarMyODBCdeunadistribucióndecódigofuenteenUnix25.1.8.InstalarMyODBCdelárboldecódigodedesarrollodeBitKeeper25.1.9.ConfiguracióndeMyODBC25.1.10.CuestionesrelacionadasconlaconexiónenMyODBC25.1.11.MyODBCyMicrosoftAccess25.1.12.MyODBC,MicrosoftVBAyASP25.1.13.MyODBCyherramientasODBCdeterceraspartes25.1.14.FuncionalidadgeneraldeMyODBC25.1.15.PasosbásicosaseguirconaplicacionesMyODBC25.1.16.ReferenciadelaAPIdeMyODBC25.1.17.TiposdedatosMyODBC25.1.18.CódigosdeerrordeMyODBC25.1.19.MyODBCconVB:ADO,DAOyRDO25.1.20.MyODBCconMicrosoft.NET25.1.21.Credits

    25.2.MySQLConnector/NET25.2.1.Introduction25.2.2.DownloadingandInstallingMySQLConnector/NET25.2.3.Connector/NETArchitecture25.2.4.UsingMySQLConnector/NET25.2.5.MySQLConnector/NETChangeHistory

    25.3.MySQLConnector/J25.3.1.ConceptosbásicosdeJDBC25.3.2.InstalacióndelConnector/J25.3.3.ReferenciaJDBC25.3.4.UsandoConnector/JconJ2EEyotrosJavaFrameworks

  • 25.3.5.DiagnósticodeproblemasdeConnector/J25.3.6.Changelog

    25.4.MySQLConnector/MXJ25.4.1.Introduction25.4.2.SupportPlatforms:25.4.3.JUnitTestRequirements25.4.4.RunningtheJUnitTests25.4.5.RunningaspartoftheJDBCDriver25.4.6.RunningwithinaJavaObject25.4.7.TheMysqldResourceAPI25.4.8.RunningwithinaJMXAgent(custom)25.4.9.DeploymentinastandardJMXAgentenvironment(JBoss)25.4.10.Installation

  • 26.ManejodeerroresenMySQL

  • 27.ExtenderMySQL27.1.ElinteriordeMySQL

    27.1.1.Lossubprocesos(threads)MySQL27.1.2.ElpaquetedepruebasMySQLTest

    27.2.AñadirnuevasfuncionesaMySQL27.2.1.Característicasdelainterfazparafuncionesdefinidasporelusuario27.2.2.SintaxisdeCREATEFUNCTION/DROPFUNCTION27.2.3.Añadirunanuevafuncióndefinidaporelusuario27.2.4.Añadirunanuevafunciónnativa

    27.3.AñadirnuevosprocedimientosaMySQL27.3.1.ProcedimientoAnalyse27.3.2.Escribirunprocedimiento

    A.ProblemasyerrorescomunesA.1.CómodeterminaraquéesdebidounproblemaA.2.ErrorescomunesalusarprogramasMySQL

    A.2.1.AccessdeniedA.2.2.Can'tconnectto[local]MySQLserverA.2.3.ClientdoesnotsupportauthenticationprotocolA.2.4.LacontraseñafallacuandoseintroduceinteractivamenteA.2.5.Host'host_name'isblockedA.2.6.ToomanyconnectionsA.2.7.OutofmemoryA.2.8.MySQLserverhasgoneawayA.2.9.PackettoolargeA.2.10.ErroresdecomunicaciónyconexionesabortadasA.2.11.ThetableisfullA.2.12.Can'tcreate/writetofileA.2.13.CommandsoutofsyncA.2.14.IgnoringuserA.2.15.Table'nombre_de_tabla'doesn'texistA.2.16.Can'tinitializecharactersetA.2.17.Noseencontróelfichero

    A.3.ProblemasrelacionadosconlainstalaciónA.3.1.ProblemasalenlazaralabibliotecadeclientesMySQLA.3.2.CómocorrerMySQLcomousuarionormalA.3.3.Problemasconpermisosdeficheros

    A.4.Cuestionesrelacionadasconlaadministración

  • A.4.1.CómoreiniciarlacontraseñaderootA.4.2.QuéhacersiMySQLsiguefallando(crashing)A.4.3.CómosecomportaMySQLanteundiscollenoA.4.4.DóndealmacenaMySQLlosarchivostemporalesA.4.5.CómoprotegerocambiarelficherosocketdeMySQL/tmp/mysql.sockA.4.6.Problemasconlasfranjashorarias

    A.5.ProblemasrelacionadosconconsultasA.5.1.SensibilidadamayúsculasenbúsquedasA.5.2.ProblemasenelusodecolumnasDATEA.5.3.ProblemasconvaloresNULLA.5.4.ProblemasconaliasdecolumnasA.5.5.FalloenlacancelacióndeunatransaccióncontablasnotransaccionalesA.5.6.BorrarregistrosdetablasrelacionadasA.5.7.ResolverproblemasconregistrosquenosalenA.5.8.ProblemasconcomparacionesenFloating-Point

    A.6.CuestionesrelacionadasconeloptimizadosA.7.Cuestionesrelacionadascondefinicionesdetabla

    A.7.1.ProblemasconALTERTABLEA.7.2.CómocambiarelordendelascolumnasenunatablaA.7.3.ProblemasconTEMPORARYTABLE

    A.8.ProblemasconocidosenMySQLA.8.1.Problemasdelaversión3.23resueltosenunaversiónposteriordeMySQLA.8.2.Problemasdelaversión4.0resueltosenunaversiónposteriordeMySQLA.8.3.Problemasdelaversión4.1resueltosenunaversiónposteriordeMySQLA.8.4.CuestionesabiertasenMySQL

    B.CreditsB.1.DesarrolladoresdeMySQLABB.2.HancontribuidoacrearMySQLB.3.DocumentadoresytraductoresB.4.BibliotecasincluidasenMySQLyqueMySQLutilizaB.5.PaquetesquesoportanMySQLB.6.HerramientasutilizadasenlacreacióndeMySQLB.7.HanayudadoaMySQL

    C.HistorialdecambiosdeMySQL

  • C.1.Cambiosenlaentrega5.0.x(Desarrollo)C.1.1.Cambiosenlaentrega5.0.11(todavíanoliberada)C.1.2.Cambiosenlaentrega5.0.10(todavíanoliberada)C.1.3.Cambiosenlaentrega5.0.9(15julio2005)C.1.4.Cambiosenlaentrega5.0.8(notreleased)C.1.5.Cambiosenlaentrega5.0.7(10June2005)C.1.6.Cambiosenlaentrega5.0.6(26May2005)C.1.7.Cambiosenlaentrega5.0.5(notreleased)C.1.8.Cambiosenlaentrega5.0.4(16Apr2005)C.1.9.Cambiosenlaentrega5.0.3(23Mar2005:Beta)C.1.10.Cambiosenlaentrega5.0.2(01Dec2004)C.1.11.Cambiosenlaentrega5.0.1(27Jul2004)C.1.12.Cambiosenlaentrega5.0.0(22Dec2003:Alpha)

    C.2.CambiosenMyODBCC.2.1.CambiosenMyODBC3.51.12C.2.2.CambiosenMyODBC3.51.11

    D.PortaraotrossistemasD.1.DepurarunservidorMySQL

    D.1.1.CompilacióndeMySQLparadepuraciónD.1.2.CrearficherosdetrazaD.1.3.DepurarmysqldcongdbD.1.4.UsarstacktraceD.1.5.Elusoderegistros(logs)paraencontrarlacausadeerroresdemysqldD.1.6.Crearuncasodepruebatrashaberencontradounatablacorrupta

    D.2.DepuracióndeunclienteMySQLD.3.ElpaqueteDBUGD.4.ComentariossobresubprocesosRTSD.5.Diferenciasentrepaquetesdecontroldesubprocesos

    E.VariablesdeentornoF.ExpresionesregularesenMySQLG.LímitesenMySQL

    G.1.LímitesdelosjoinsH.RestriccionesencaracterísticasdeMySQL

    H.1.RestriccionesenprocedimientosalmacenadosydisparadoresH.2.RestriccionesencursoreselladodelservidorH.3.RestriccionesensubconsultasH.4.Restriccionesenvistas

  • I.GNUGeneralPublicLicenseJ.MySQLFLOSSLicenseException

    Listadetablas

    25.1.Propiedadesdeconexión25.2.Tabladeconversiones25.3.TiposMySQLparatiposJavaTypesparaResultSet.getObject()25.4.TraducciónMySQLanombrescodificaciónJava

    Listadeejemplos

    25.1.ObtenerunaconexióndeDriverManager25.2.Usandojava.sql.StatementparaejecutarunaconsultaSELECT25.3.Ejemplodeprocedimientoalmacenado25.4.UsandoConnection.prepareCall()25.5.Registrandoparámetrosdesalida25.6.EspecificandolosparámetrosdeentradadeCallableStatement25.7.Recibiendoresultadosyparámetrosdesalida25.8.RecibiendovaloresdecolumnaAUTO_INCREMENTusandoStatement.getGeneratedKeys()25.9.RecibiendovaloresdecolumnaAUTO_INCREMENTusando'SELECTLAST_INSERT_ID()'25.10.RecibiendovaloresdecolumnaAUTO_INCREMENTenUpdatableResultSets25.11.InicializacióndeCLASSPATHenUNIX25.12.UsandounpooldeconexionesconunservidordeaplicacionesJ2EE25.13.Ejemplodetransacciónconlógicadereintento

  • Prefacio

    ÉsteeselmanualdereferenciaparaelsistemadebasededatosMySQL,ensuversión5.0,hastalaversión5.0.9-beta.NodeberíautilizarseconedicionesmásantiguasdelsoftwareMySQL,porlasmuchasdiferenciasfuncionalesydeotrotipoentreMySQL5.0yversionesanteriores.SiseestáutilizandounaversiónanteriordelsoftwareMySQL,espreferiblehacerreferenciaalManualdereferenciadeMySQL4.1,quecubrelasversiones3.22,3.23,4.0y4.1deMySQL.EnestetextoseseñalanlasdiferenciasentrelasdiversasversionesdeMySQL5.0,indicandolaentrega(5.0.x).

    LatraducciónalespañoldeestemanualsedebeaVespito,empresadeBarcelonaespecializadaenlagestióndebasesdedatosMySQLypartnerdeMySQLABdesde2001.HacolaboradoenlatraducciónClaudioAlbertoNipotti,deSanLorenzo(SantaFe),Argentina.

    http://www.vespito.com

  • Capítulo1.Informacióngeneral

    Tabladecontenidos

    1.1.Sobreestemanual1.2.Convencionesutilizadasenestemanual1.3.PanorámicadeMySQLAB1.4.PanorámicadelsistemadegestióndebasededatosMySQL

    1.4.1.HistoriadeMySQL1.4.2.LasprincipalescaracterísticasdeMySQL1.4.3.EstabilidaddeMySQL1.4.4.DimensionesmáximasdelastablasMySQL1.4.5.Conformidadconelefecto2000

    1.5.MapadedesarrollodeMySQL1.5.1.ElservidorMySQLincrustado(embedded)1.5.2.QuéhaydenuevoenMySQL5.0

    1.6.FuentesdeinformaciónacercadeMySQL1.6.1.ListasdecorreodeMySQL1.6.2.SoporteporIRC(InternetRelayChat)delacomunidadMySQL1.6.3.SoporteporpartedelacomunidadenlosforosdeMySQL

    1.7.CumplimientodelosestándaresporpartedeMySQL1.7.1.EstándaresutilizadosporMySQL1.7.2.SeleccióndemodosSQL1.7.3.EjecutarMySQLenmodoANSI1.7.4.ExtensionesMySQLalestándarSQL1.7.5.DiferenciasenMySQLdelestándarSQL1.7.6.CómotrataMySQLlasrestricciones(Constraints)

    ElsoftwareMySQL®proporcionaunservidordebasededatosSQL(StructuredQueryLanguage)muyrápido,multi-threaded,multiusuarioyrobusto.ElservidorMySQLestádiseñadoparaentornosdeproduccióncríticos,conaltacargadetrabajoasícomoparaintegrarseensoftwareparaserdistribuido.MySQLesunamarcaregistradadeMySQLAB.

    ElsoftwareMySQLtieneunadoblelicencia.LosusuariospuedenelegirentreusarelsoftwareMySQLcomounproductoOpenSourcebajolostérminosdelalicenciaGNUGeneralPublicLicense(http://www.fsf.org/licenses/)opuedenadquirirunalicenciacomercialestándarddeMySQLAB.Consulte

    http://www.fsf.org/licenses/

  • http://www.mysql.com/company/legal/licensing/paramásinformaciónacercadenuestraspolíticasdelicencia.

    Lasiguientelistadescribealgunasseccionesdeparticularinterésenestemanual:

    ParaunadiscusiónacercadelascapacidadesdelservidordebasededatosMySQLconsulteSección1.4.2,“LasprincipalescaracterísticasdeMySQL”.

    Parainstruccionesacercadelainstalación,consulteCapítulo2,InstalarMySQL.

    ParaconsejossobreportarelsoftwareMySQLanuevasarquitecturasosistemasoperativos,consulteApéndiceD,Portaraotrossistemas.

    Parainformaciónacercadeactualizardesdelaversión4.1,consulteSección2.10.1,“Aumentarlaversiónde4.1a5.0”.

    ParauntutorialintroductorioalservidordebasededatosMySQL,consulteCapítulo3,Curso(tutorial)deMySQL.

    ParaejemplosdeSQLeinformaciónderendimiento,consulteeldirectoriodepruebasderendimiento(sql-benchenladistribución).

    Paralahistoriadenuevascaracterísticasyfallosarreglados,consulteApéndiceC,HistorialdecambiosdeMySQL.

    Paraunalistadefallosconocidosycaracterísticasnoimplementadas,consulteSecciónA.8,“ProblemasconocidosenMySQL”.

    Paralalistadetodoslosquehancontribuidoaesteproyecto,consulteApéndiceB,Credits.

    Importante:

    Informesdeerrores(amenudollamados"bugs"),asícomopreguntasycomentarios,debenenviarseahttp://bugs.mysql.com.ConsulteSección1.6.1.3,“Cómoinformardebugsyproblemas”.

    SiencuentraunfallodeseguridadimportanteenelservidorMySQL,porfavor

    http://www.mysql.com/company/legal/licensing/http://bugs.mysql.com

  • comuníqueloinmediatamentemedianteuncorreoelectrónicoa.

    mailto:[email protected]

  • 1.1.Sobreestemanual

    EsteeselmanualdereferenciaparaelservidordebasededatosMySQL,versión5.0,hastalaversión5.0.9-beta.NoestádestinadoparausarseconversionesmásantiguasdelsoftwareMySQLdebidoalasnumerosasdiferenciasfuncionalesydeotrotipoentreMySQL5.0yversionesprevias.SiusaunaversiónanteriordelsoftwareMySQL,porfavorconsulteManualdereferenciadeMySQL4.1,quecubrelasseries3.22,3.23,4.0,y4.1delsoftwareMySQL.LasdiferenciasentreversionesmenoresdeMySQL5.0estándestacadasenestetextoconreferenciasalosnúmerosdeversiones(5.0.x).

    Estemanualesunareferencia,porloquenoproporcionainstruccionessobreconceptosgeneralesdeSQLodebasesdedatosrelacionales.Tampocoenseñasobrecómousarsusistemaoperativoosuintérpretedelíneadecomandos.

    ElsoftwaredebasededatosMySQLestábajodesarrolloconstante,yelManualdeReferenciaseactualizaconstantemente.Laversiónmásrecientedeestemanualestádisponibleenlíneapermitiendobúsquedasenhttp://dev.mysql.com/doc/.Hayotrosformatosdisponibles,incluyendoHTML,PDF,yWindowsCHM.

    ElformatobásicoparatodaladocumentaciónMySQLconsisteenunconjuntodeficherosDocBookXML.HTMLyotrosformatosseproducenautomáticamenteapartirdelosmismos,usandoentreotrasherramientasDocBookXSLstylesheets.

    Sitienesugerenciasacercadecorreccionesocontenidodeestemanual,porfavorenvíelosalequipodedocumentaciónen.

    EstemanualloescribióinicialmenteDavidAxmarkyMichael"Monty"Widenius.LomantieneelequipodedocumentacióndeMySQLformadoporPaulDuBois,StefanHinz,MikeHillyer,yJonStephens.Paraconsultartodosloscolaboradores,consulteApéndiceB,Credits.

    ElcopyrightdeestemanualespropiedaddelacompañíasuecaMySQLAB.MySQL®yellogoMySQLlogosonmarcasregistradasdeMySQLAB.Otrasmarcasymarcasregistradasalasquesehacereferenciaenestemanualsonpropiedaddesusrespectivospropietarios,yseusansóloconintencionesde

    http://dev.mysql.com/doc/http://docbook.org/http://docbook.sourceforge.net/release/xsl/current/doc/reference.htmlmailto:[email protected]

  • identificación.

  • 1.2.Convencionesutilizadasenestemanual

    Estemanualusaciertasconvencionestipográficas:

    EltextodeesteestiloseusaparasentenciasSQL;nombresdebasesdedatos,tablasycolumnnas;códigoCyPerl;yvariablesdeentorno.Ejemplo:"PararecargarlastablasdepermisosuseelcomandoFLUSHPRIVILEGES".

    Eltextodeesteestiloseusaparaentradadevariableslascualesdebesubstituirporunvalordesupropiaelección.

    Nombresdeficherosydirectoriosseescribenasí:"Elficheroglobalmy.cnfseencuentraeneldirectorio/etc".

    Lassecuenciasdecarácteresseescribenasí:"Paraespecificaruncomodín,useelcarácter'%'."

    Eltextodeesteestiloseusaparaenfatizar.

    Eltextodeesteestiloseusaenlascabecerasyparadarunenfásisespecialmentefuerte.

    Cuandosemuestrancomandosquedebenserejecutadosenunprogramaparticular,elprogramaseindicaconunpromptmostradoantesdelcomando.Porejemplo,shell>indicauncomandoqueseejecutadesdeelloginshell,ymysql>indicauncomandoqueseejecutadesdeelprogramaclientemysql:

    shell>escribauncomandodeshellaquímysql>escribauncomandomysqlaquí

    El"shell"essuintérpretedecomandos.EnUnix,estoesnormalmenteunprogramacomoshcsh.EnWindows,elprogramaequivalenteescommand.comocmd.exe,normalmenteejecutadoenunaventanadeconsola.

    Cuandointroduzcauncomandouórdennoescribaelpromptmostradoenelejemplo.

    Nombresdebasesdedatos,tablasycolumnasamenudodebenreemplazarseen

  • loscomandos.Paraindicarquedichasubstituciónesnecesaria,elmanualusadb_name,tbl_name,ycol_name.Porejemplo,puedeveruncomandocomoeste:

    mysql>SELECTcol_nameFROMdb_name.tbl_name;

    Significaquesiquisieraintroduciruncomandosimilar,deberíaescribirsupropionombredebasededatos,tablaycolumna,talvezasí:

    mysql>SELECTauthor_nameFROMbiblio_db.author_list;

    LaspalabrasclaveSQLnosoncasesensitiveypuedenescribirseenmayúsculasominúsculas.Estemanualusamayúsculas.

    Endescripcionesdesintaxis,corchetes('['y']')seusanparaindicarpalabrasocláusulasopcionales.Porejemplo,enelsiguientecomando,IFEXISTSesopcional:

    DROPTABLE[IFEXISTS]tbl_name

    Cuandounelementodesintaxisconsisteenunnúmerodealternativas,lasalternativasseseparanmediantebarrasverticales('|').Cuandounmiembrodeunaseriedeeleccionespuedeserelegido,lasalternativassemuestranentrecorchetes('['y']'):

    TRIM([[BOTH|LEADING|TRAILING][remstr]FROM]str)

    Cuandounmiembrodeunaseriedeeleccionesdebeserelegido,lasalternativassemuestranentrellaves('{'y'}'):

    {DESCRIBE|DESC}tbl_name[col_name|wild]

    Puntossuspensivos(...)indicalaomisióndeunapartedelcomando,típicamenteparaproporcionarunaversióncortadeunasintaxismáscompleja.Porejemplo,INSERT...SELECTeslaversióncortadeuncomandoINSERTseguidodeuncomandoSELECT.

    Puntossuspensivospuedentambierindicarqueelelementodesintaxisprecedentedeuncomandopuederepertirse.Enelsiguienteejemplo,puedendarsevariosvaloresreset_optioncadaunodeellostraselprimeroprecedidosporcomas:

  • RESETreset_option[,reset_option]...

    LoscomandosparainicializarvariablesdelshellsemuestranusandolasintaxisdelshellBourne.Porejemplo,lasecuenciaparaincializarunavariabledeentornoyejecutaruncomandoeslasiguienteconlasintaxisdelshellBourne:

    shell>VARNAME=valuesome_command

    Siutilizacshotcsh,debeproporcionarcomandosligeramentedistintos.Deberíaejecutarlasecuenciaanteriorasí:

    shell>setenvVARNAMEvalueshell>some_command

  • 1.3.PanorámicadeMySQLAB

    MySQLABdelosfundadoresdeMySQLyprincipalesdesarrolladores.MySQLABseestablecióoriginalmenteenSuecíaporDavidAxmark,AllanLarsson,yMichael"Monty"Widenius.

    NosdedicamosadesarrollarelsoftwareparalabasededatosMySQLypromocionarloanuevosusuarios.MySQLABposeeelcopyrightdelcódigofuenteMySQL,ellogoMySQLylamarcaregistrada,ysumanual.ConsulteSección1.4,“PanorámicadelsistemadegestióndebasededatosMySQL”.

    LosvaloresclaveMySQLmuestrannuestradedicaciónaMySQLyOpenSource.

    LosvaloresclavedirigencómoMySQLABtrabajaelsoftwaredebasededatosMySQL:

    Serlamejorymásusadabasededatosenelmundo.

    Estardisponibleysercomprableporcualquiera.

    Fácildeusar.

    Mejorarlocontínuamentemientrasesrápidoyseguro.

    Serdivertidodeusarymejorar.

    Libredeerrores.

    EstossonlosvaloresclavedelacompañíaMySQLABysusempleados:

    SuscribimoslafilosofíaOpenSourceyapoyamoslacomunidadOpenSource.

    Serbuenosciudadanos.

    Preferimossociosquecompartannuestrosvaloresyformadepensar.

    Responderloscorreoselectrónicosyproporcionarsoporte.

  • Somosunacompañíavirtual,conectadaconotras.

    Estamosencontradelaspatentesdesoftware.

    ElsitiowebMySQL(http://www.mysql.com/)proporcionalaúltimainformaciónsobreMySQLyMySQLAB

    Laparte"AB"delnombredelacompañíaeselacrónimodelsueco"aktiebolag",o"stockcompany",o"sociedadanónima".Setraducecomo"MySQL,Inc"o"MySQL,SA".Dehecho,MySQL,Inc.yMySQLGmbHsonejemplosdeempresassubsidiariasdeMySQLAB.EstánestablecidasenlosEstadosUnidosyAlemaniarespectivamente.

    http://www.mysql.com/

  • 1.4.PanorámicadelsistemadegestióndebasededatosMySQL

    MySQL,elsistemadegestióndebasesdedatosSQLOpenSourcemáspopular,lodesarrolla,distribuyeysoportaMySQLAB.MySQLABesunacompañíacomercial,fundadaporlosdesarrolladoresdeMySQL.EsunacompañíaOpenSourcedesegundageneraciónqueunelosvaloresymetodologíaOpenSourceconunexitosomodelodenegocio.

    ElsitiowebMySQL(http://www.mysql.com/)proporcionalaúltimainformaciónsobreMySQLyMySQLAB.

    MySQLesunsistemadegestióndebasesdedatos

    Unabasededatosesunacolecciónestruturadadedatos.Puedesercualquiercosa,desdeunasimplelistadecompraaunagaleríadepinturaolasmásvastascantidadesdeinformaciónenunaredcorporativa.Paraañadir,acceder,yprocesarlosdatosalmacenadosenunabasededatos,necesitaunsistemadegestióndebasededatoscomoMySQLServer.Alserloscomputadoresmuybuenosentratargrandescantidadesdedatos,lossistemasdegestióndebasesdedatosjueganunpapelcentralencomputación,comoaplicacionesautónomasocomopartedeotrasaplicaciones.

    MySQLesunsistemadegestióndebasesdedatosrelacionales

    Unabasededatosrelacionalalmacenadatosentablasseparadasenlugardeponertodoslosdatosenungranalmacén.Estoañadevelocidadyflexibilidad.LaparteSQLde"MySQL"serefierea"StructuredQueryLanguage".SQLesellenguajeestandarizadomáscomúnparaaccederabasesdedatosyestádefinidoporelestándardANSI/ISOSQL.ElestándardSQLhaevolucionadodesde1986yexistenvariasversiones.Enestemanual,"SQL-92"serefierealestándarddel1992,"SQL:1999"serefierealaversióndel1999,y"SQL:2003"serevierealaversiónactualdelestándard.Usamoslafrase"elestándardSQL"parareferirnosalaversiónactualdeSQL.

    http://www.mysql.com/

  • MySQLsoftwareesOpenSource.

    OpenSourcesignificaqueesposibleparacualquierausarymodificarelsoftware.CualquierapuedebajarelsoftwareMySQLdesdeinternetyusarlosinpagarnada.Silodesea,puedeestudiarelcódigofuenteycambiarloparaadapatarloasusnecesidades.ElsoftwareMySQLusalalicenciaGPL(GNUGeneralPublicLicense),http://www.fsf.org/licenses/,paradefinirloquepuedeynopuedehacerconelsoftwareendiferentessituaciones.SinoseencuentracómodoconlaGPLonecesitaañadircódigoMySQLenunaaplicacióncomercial,puedecomprarnosunalicenciacomercial.ConsultelaIntroducciónalasLicenciasMySQLparamásinformación(http://www.mysql.com/company/legal/licensing/).

    ElservidordebasededatosMySQLesmuyrápido,fiableyfácildeusar.

    Siestoesloqueestábuscando,deberíaprobarlo.ElservidorMySQLtambiéntieneunaseriedecaracerísticasprácticasdesarrolladasencooperaciónconlosusuarios.PuedeencontrarcomparacionesderendimientodeMySLQLServerconotrossistemasdegestióndebasesdedatosennuestrapáginadecomparativasderendimiento.ConsulteSección7.1.4,“Elpaquetedepruebasderendimiento(benchmarks)deMySQL”.

    MySQLServersedesarrollóoriginalmenteparatratargrandesbasesdedatosmuchomásrápidoquesolucionesexistentesyhasidousadoconéxitoenentornosdeproduccióndealtorendimientodurantevariosaños.MySQLServerofrecehoyendíaunagrancantidaddefunciones.Suconectividad,velocidad,yseguridadhacendeMySQLServeraltamenteapropiadoparaaccederbasesdedatosenInternet

    MySQLServertrabajaenentornoscliente/servidoroincrustados

    ElsoftwaredebasesdedatosMySQLesunsistemacliente/sevidorqueconsisteenunservidorSQLmulti-threadedquetrabajacondiferentesbakends,programasybibliotecascliente,herramientasadministrativasyunamplioabanicodeinterfíciesdeprogramaciónparaaplicaciones(APIs).

    TambiénproporcionamoselMySQLServercomobibliotecaincrustadamulti-threadedquepuedelincarensuaplicaciónparaobtenerunproductomáspequeño,rápidoyfácildeadministrar.

    http://www.fsf.org/licenses/http://www.mysql.com/company/legal/licensing/

  • UnagrancantidaddesoftwaredecontribucionesestádisponibleparaMySQL

    EsmuyposiblequesuaplicaciónolenguajefavoritosoporteelservidordebasededatosMySQL.

    Laformaoficialdepronunciar"MySQL"es"MyEssQueEll"(no"mysicuel"),peronoimportasilopronunciacomo"mysicuel"odealgunaotraforma.

    1.4.1.HistoriadeMySQL

    EmpezamosconlaintencióndeusarmSQLparaconectaranuestrastablasutilizandonuestraspropiasrutinasrápidasdebajonivel(ISAM).Sinembargoytrasalgunaspruebas,llegamosalaconclusiónquemSQLnoeralosuficientementerápidooflexibleparanuestrasnecesidades.EstoprovocólacreacióndeunanuevainterfícieSQLparanuestrabasededatosperocasiconlamismainterfícieAPIquemSQL.EstaAPIfuediseñadaparapermitircódigodeterceraspartesquefueescritoparapoderusarseconmSQLparaserfácilmenteportadoparaelusoconMySQL.

    LaderivacióndelnombreMySQLnoestáclara.Nuestrodirectoriobaseyungrannúmerodenuestrasbibliotecasyherramientashantenidoelprefijo"my"pormásde10años.Sinembargo,lahijadelco-fundadorMontyWideniustambiénsellamaMy.CuáldelosdosdiósunombreaMySQLtodavíaesunmisterio,inclusoparanosotros.

    ElnombredeldelfíndeMySQL(nuestrologo)es"Sakila",quefuéelegidoporlosfundadoresdeMySQLABdeunagranlistadenombressugeridaporlosusuariosenelconcurso"NametheDolphin"(ponlenombrealdelfín).ElnombreganadorfueenviadoporAmbroseTwebaze,undesarrolladordesoftwareOpenSourcedeSwaziland,África.SegúnAmbrose,elnombrefemeninodeSakilatienesusraícesenSiSwate,elidiomalocaldeSwaziland.SakilatambiéneselnombredeunaciudadenArusha,Tanzania,cercadelpaísdeorigendeAmbrose,Uganda.

    1.4.2.LasprincipalescaracterísticasdeMySQL

    LasiguientelistadescribealgunasdelascaracterísticasmásimportantesdelsoftwaredebasededatosMySQL.ConsulteSección1.5,“Mapadedesarrollo

  • deMySQL”paramásinformaciónacercadelascaracterísticasactualesypróximas.

    Interioridadesyportabilidad

    EscritoenCyenC++

    Probadoconunampliorangodecompiladoresdiferentes

    Funcionaendiferentesplataformas.ConsulteSección2.1.1,“SistemasoperativosqueMySQLsoporta”.

    UsaGNUAutomake,Autoconf,yLibtoolparaportabilidad.

    APIsdisponiblesparaC,C++,Eiffel,Java,Perl,PHP,Python,Ruby,yTcl.ConsulteCapítulo24,APIsdeMySQL.

    Usocompletodemulti-threadedmediantethreadsdelkernel.PuedenusarsefácilmentemultipleCPUssiestándisponibles.

    Proporcionasistemasdealmacenamientotransaccionalesynotransaccionales.

    UsatablasendiscoB-tree(MyISAM)muyrápidasconcompresióndeíndice.

    Relativamentesencillodeañadirotrosistemadealmacenamiento.EstoesútilsideseaañadirunainterfícieSQLparaunabasededatospropia.

    Unsistemadereservadememoriamuyrápidobasadoenthreads.

    Joinsmuyrápidosusandounmulti-joindeunpasooptimizado.

    Tablashashenmemoria,quesonusadascomotablastemporales.

    LasfuncionesSQLestánimplementadasusandounalibreríaaltamenteoptimizadaydebensertanrápidascomoseaposible.Normalmentenohayreservadememoriatrastodalainicializaciónparaconsultas.

    ElcódigoMySQLsepruebaconPurify(undetectordememoriaperdidacomercial)asícomoconValgrind,unaherramientaGPL

  • (http://developer.kde.org/~sewardj/).

    Elservidorestádisponiblecomounprogramaseparadoparausarenunentornoderedcliente/servidor.Tambiénestádisponiblecomobibliotecaypuedeserincrustado(linkado)enaplicacionesautónomas.Dichasaplicacionespuedenusarseporsímismasoenentornosdondenohayreddisponible..

    Tiposdecolumnas

    Diversostiposdecolumnas:enteroscon/sinsignode1,2,3,4,y8bytesdelongitud,FLOAT,DOUBLE,CHAR,VARCHAR,TEXT,BLOB,DATE,TIME,DATETIME,TIMESTAMP,YEAR,SET,ENUM,ytiposespacialesOpenGIS.ConsulteCapítulo11,Tiposdecolumna.

    Registrosdelongitudfijaylongitudvariable.

    Sentenciasyfunciones

    SoportecompletoparaoperadoresyfuncionesenlascláusulasdeconsultasSELECTyWHERE.Porejemplo:

    mysql>SELECTCONCAT(first_name,'',last_name)->FROMcitizen->WHEREincome/dependents>10000ANDage>30;

    SoportecompletoparalascláusulasSQLGROUPBYyORDERBY.Soportedefuncionesdeagrupación(COUNT(),COUNT(DISTINCT...),AVG(),STD(),SUM(),MAX(),MIN(),yGROUP_CONCAT()).

    SoporteparaLEFTOUTERJOINyRIGHTOUTERJOINcumpliendoestándardsdesintaxisSQLyODBC.

    SoporteparaaliasentablasycolumnascomolorequiereelestándardSQL.

    DELETE,INSERT,REPLACE,yUPDATEdevuelvenelnúmerodefilasquehancambiado(hansidoafectadas).Esposibledevolverelnúmerodefilasqueseríanafectadasusandounflagalconectarconelservidor.

    ElcomandoespecíficodeMySQLSHOWpuedeusarseparaobtener

    http://developer.kde.org/~sewardj/

  • informaciónacercadelabasededatos,elmotordebasededatos,tablaseíndices.ElcomandoEXPLAINpuedeusarseparadeterminarcómoeloptimizadorresuelveunaconsulta.

    Losnombresdefuncionesnocolisionanconlosnombresdetablaocolumna.Porejemplo,ABSesunnombreválidodecolumna.Laúnicarestricciónesqueparaunallamadaaunafunción,nosepermitenespaciosentreelnombredefunciónyel'('acontinuación.ConsulteSección9.6,“TratamientodepalabrasreservadasenMySQL”.

    Puedemezclartablasdedistintasbasesdedatosenlamismaconsulta(comoenMySQL3.22).

    Seguridad

    Unsistemadeprivilegiosycontraseñasqueesmuyflexibleyseguro,yquepermiteverficaciónbasadaenelhost.Lascontraseñassonsegurasporquetodoeltráficodecontraseñasestáencriptadocuandoseconectaconunservidor.

    Escalabilidadylímites

    Soporteagrandesbasesdedatos.UsamosMySQLServerconbasesdedatosquecontienen50millonesderegistros.TambiénconocemosusuariosqueusanMySQLServercon60.000tablasyacercade5.000.000deregistros.

    Sepermitenhasta64índicesportabla(32antesdeMySQL4.1.2).Cadaíndicepuedeconsistirdesde1hasta16columnasopartesdecolumnas.Elmáximoanchodelímiteson1000bytes(500antesdeMySQL4.1.2).UníndicepuedeusarprefijosdeunacolumnaparalostiposdecolumnaCHAR,VARCHAR,BLOB,oTEXT.

    Conectividad

    LosclientespuedenconectarconelservidorMySQLusandosocketsTCP/IPencualquierplataforma.EnsistemasWindowsdelafamiliaNT(NT,2000,XP,o2003),losclientespuedenusarnamedpipesparalaconexión.EnsistemasUnix,losclientespuedenconectarusandoficherossocketUnix.

  • EnMySQL5.0,losservidoresWindowssoportanconexionesconmemoriacompartidasiseinicializanconlaopción--shared-memory.Losclientespuedenconectaratravésdememoriacompartidausandolaopción--protocol=memory.

    LainterfazparaelconectorODBC(MyODBC)proporcionaaMySQLsoporteparaprogramasclientesqueusenconexionesODBC(OpenDatabaseConnectivity).Porejemplo,puedeusarMSAccessparaconectaralservidorMySQL.LosclientespuedenejecutarseenWindowsoUnix.ElcódigofuentedeMyODBCestádisponible.TodaslasfuncionesparaODBC2.5estánsoportadas,asícomomuchasotras.ConsulteSección25.1,“ElconectorODBCdeMySQL”.

    LainterfazparaelconectorJMySQLproporcionasoporteparaclientesJavaqueusenconexionesJDBC.EstosclientespuedenejecutarseenWindowsoUnix.ElcódigofuenteparaelconectorJestádisponible.ConsulteSección25.3,“MySQLConnector/J”.

    Localización

    Elservidorpuedeproporcionarmensajesdeerroralosclientesenmuchosidomas.ConsulteSección5.9.2,“Escogerelidiomadelosmensajesdeerror”.

    Soportecompletoparadistintosconjuntosdecarácteres,incluyendolatin1(ISO-8859-1),german,big5,ujis,ymás.Porejemplo,loscarácteresescandinavos'â','ä'y'ö'estánpermitidosennombresdetablasycolumnas.ElsoporteparaUnicodeestádisponible

    Todoslosdatosseguardanenelconjuntodecaráctereselegido.Todaslascomparacionesparacolumnasnormalesdecadenasdecarácteressoncase-insensitive.

    Laordenaciónserealizaacordealconjuntodecaráctereselegido(usandocolaciónSuecapordefecto).EsposiblecambiarlacuandoarrancaelservidorMySQL.Paraverunejemplodeordenaciónmuyavanzada,consulteelcódigoChecodeordenación.MySQLServersoportadiferentesconjuntosdecarácteresquedebenserespecificadosentiempodecompilaciónydeejecución.

  • Clientesyherramientas

    MySQLservertienesoporteparacomandosSQLparachequear,optimizar,yreparartablas.Estoscomandosestándisponiblesatravésdelalíneadecomandosyelclientemysqlcheck.MySQLtambiénincluyemyisamchk,unautilidaddelíneadecomandosmuyrápidaparaefectuarestasoperacionesentablasMyISAM.ConsulteCapítulo5,Administracióndebasesdedatos.

    TodoslosprogramasMySQLpuedeninvocarseconlasopciones--helpo-?paraobtenerasistenciaenlínea.

    1.4.3.EstabilidaddeMySQL

    Estaseccióntratalaspreguntas"¿QuéestabilidadtieneMySQLServer?"y,"¿PuedofiarmedeMySQLServerparaesteproyecto?"Intentaremosclarificarestascuestionesyresponderalgunaspreguntasimportantesquepreocupanamuchosusuariospotenciales.Lainformaciónenestasecciónsebasaendatosrecopiladosdelaslistasdecorreo,quesonmuyactivasparaidentificarproblemasasícomoparareportartiposdeusos.

    Elcódigooriginalseremontaalosprinciposdelosaños80.EnTcX,lapredecesoradeMySQLAB,elcódigoMySQLhafuncionadoenproyectosdesdemediadosde1996sinningúnproblema.CuandoelsoftwaredebasededatosMySQLfuedistribuídoentreunpúblicomásamplio,nuestrosnuevosusuariosrápidamenteencontrarontrozosdecódigonoprobados.Cadanuevaversióndesdeentonceshatenidopocosproblemasdeportabilidadinclusoconsiderandoquecadanuevaversiónhatenidomuchasnuevasfuncionalidades.

    CadaversióndeMySQLServerhasidousable.Losproblemashanocurridoúnicamentecuandolosusuarioshanprobadocódigodelas"zonasgrises".Naturalmente,losnuevosusuariosnoconocencuálessonestaszonas;estasección,porlotanto,tratadedocumentardichasáreasconocidasadíadehoy.Lasdescripcionesmayormentesecorrespondenconlaversión3.23,4.0y4.1deMySQLServer.Todoslosbugsreportadosyconocidossearreglanenlaúltimaversión,conlasexcepcioneslistadasenlasseccionesdebugsyqueestánrelacionadosconproblemasdediseño.ConsulteSecciónA.8,“ProblemasconocidosenMySQL”.

  • EldiseñodeMySQLServeresmulticapa,conmódulosindependientes.Algunosdelosúltimosmódulosselistanacontinuaciónconunaindicacióndelobientesteadosqueestán:

    Replicatión(Estable)

    Haygrandesgruposdeservidoresusandoreplicaciónenproducción,conbuenosresultados.SetrabajaparamejorarcaracterísticasdereplicaciónenMySQL5.x.

    InnoDBtablas(Estable)

    ElmotordealmacenamientotransaccionalInnoDBesestableyusadoengrandessistemasdeproducciónconaltacargadetrabajo.

    BDBtablas(Estable)

    ElcódigoBerkeleyDBesmuyestable,perotodavíaloestamosmejorandoconelinterfazdelmotordealmacenamientotransaccionalBDBenMySQLServer.

    BúsquedasFull-text(Estable)

    BúsquedasFull-textesámpliamenteusada.

    MyODBC3.51(Estable)

    MyODBC3.51usaODBCSDK3.51yesusadoensistemasdeproducciónámpliamente.AlgunascuestionessurgidasparecensercuestióndelasaplicacionesquelousaneindependientesdelcontroladorODBColabasededatossubyacente.

    1.4.4.DimensionesmáximasdelastablasMySQL

    EnMySQL5.0,usandoelmotordealmacenamientoMyISAM,elmáximotamañodelastablasesde65536terabytes(256^7-1bytes).Porlotanto,eltamañoefectivomáximoparalasbasesdedatosenMySQLusualmentelosdeterminanloslímitesdetamañodeficherosdelsistemaoperativo,ynoporlímitesinternosdeMySQL.

  • ElmotordealmacenamientoInnoDBmantienelastablasenunespacioquepuedesercreadoapartirdevariosficheros.Estopermitequeunatablasupereeltamañomáximoindividualdeunfichero.Esteespaciopuedeincluirparticionesdedisco,loquepermitetablasextremadamentegrandes.Eltamañomáximodelespaciodetablases64TB.

    Lasiguientetablalistaalgunosejemplosdelímitesdetamañodeficherosdesistemasoperativos.Estoessólounaburdaguíaynopretendeserdefinitiva.Paralainformaciónmásactual,asegúresedeconsultarladocumentaciónespecíficadesusistemaoperativo.

    Sistemaoperativo TamañomáximodeficheroLinux2.2-Intel32-bit 2GB(LFS:4GB)Linux2.4 (usandosistemadeficherosext3)4TBSolaris9/10 16TBSistemadeficherosNetWarew/NSS 8TBwin32w/FAT/FAT32 2GB/4GBwin32w/NTFS 2TB(posiblementemayor)MacOSXw/HFS+ 2TB

    EnLinux2.2,puedeutilizartablasMyISAMmayoresde2GBusandoelparcheparaLFS(LargeFileSupport)enelsistemadeficherosext2.EnLinux2.4yposteriores,existenparchesparaReiserFSsoportandograndesarchivos(hasta2TB).LamayoríadedistribucionesLinuxsebasanenelkernel2.4o2.6eincluyentodoslosparchesLFSnecesarios.ConJFSyXFS,sepermitenficherosmayoresdeunpetabyteparaLinux.Sinembargo,eltamañomáximodeficherostodavíadependedediversosfactores,unodeellossiendoelsistemadeficherosusadoparaalmacenartablasMySQL.

    ParaunresumenmásdetalladoacercadeLFSenLinux,recomendamoslapáginadeAndreasJaegerLargeFileSupportinLinuxenhttp://www.suse.de/~aj/linux_lfs.html.

    UsuariosdeWindows,porfavortenganencuentaque:FATandVFAT(FAT32)noseconsideranapropiadosparasistemasdeproducciónconMySQL.UseNTFSparaello.

    http://www.suse.de/~aj/linux_lfs.html

  • Pordefecto,MySQLcreatablasMyISAMconunaestructurainternaquepermiteuntamañomáximodeunas4GB.PuedechequeareltamañomáximodetablaparaunatablaconelcomandoSHOWTABLESTATUSoconmyisamchk-dvtbl_name.ConsulteSección13.5.4,“SintaxisdeSHOW”.

    SinecesitaunatablaMyISAMconuntamañomayora4GB(ysusistemaoperativosoportaficherosgrandes),elcomandoCREATETABLEpermitelasopcionesAVG_ROW_LENGTHyMAX_ROWS.ConsulteSección13.1.5,“SintaxisdeCREATETABLE”.TambiénpuedecambiaresasopcionesconALTERTABLEunavezquelatablasehacreado,paraaumentareltamañomáximodelatabla.ConsulteSección13.1.2,“SintaxisdeALTERTABLE”.

    OtrosmétodosparacambiarloslímitesdetamañodeficherosparatablasMyISAMson:

    Siunatablaesdesólolectura,puedeusarmyisampackparacomprimirla.myisampacknormalmentecomprimeunatablaalmenosun50%,loquepermite,aefectosprácticos,tablasmuchomayores.myisampackpuedemezclarmúltiplestablasenunamismatabla.ConsulteSección8.2,“myisampack,elgeneradordetablascomprimidasdesólolecturadeMySQL”.

    MySQLincluyelabibliotecaMERGEquepermitetratarunacoleccióndetablasMyISAMconunaestructuraidénticaenunatablaMERGE.ConsulteSección14.2,“ElmotordealmacenamientoMERGE”.

    1.4.5.Conformidadconelefecto2000

    MySQLServerporsímismonotieneproblemasdeconformidadconelaño2000(Y2K):

    MySQLServerutilizafuncionesdetiempoUnixquetratanlasfechashastaelaño2037paravaloresTIMESTAMP.ParavaloresDATEyDATETIME,seaceptanfechashastaelaño9999.

    TodaslasfuncionesdefechaMySQLseimplementanenunmismoficherofuente,sql/time.cc,yestánprogramadoscuidadosamenteparanotenerproblemasconelaño2000.

  • EnMySQL5.0yposterior,eltipodecolumnaYEARpuedealmacenarlosaños0y1901hasta2155enunbyteymostrarlousandodedosacuatrodígitos.Todoslosañosdedosdígitosseconsideranenelrango1970hasta2069,loquesignificaquesialmacena01enunacolumnadetipoYEAR,MySQLServerlotratacomo2001.

    LasiguientedemostraciónilustraqueMySQLServernotieneproblemasconvaloresDATEoDATETIMEhastaelaño9999,nitampocotieneproblemasconvaloresdetipoTIMESTAMPhastaelaño2030:

    mysql>DROPTABLEIFEXISTSy2k;QueryOK,0rowsaffected(0.01sec)

    mysql>CREATETABLEy2k(dateDATE,->date_timeDATETIME,->time_stampTIMESTAMP);QueryOK,0rowsaffected(0.01sec)

    mysql>INSERTINTOy2kVALUES->('1998-12-31','1998-12-3123:59:59',19981231235959),->('1999-01-01','1999-01-0100:00:00',19990101000000),->('1999-09-09','1999-09-0923:59:59',19990909235959),->('2000-01-01','2000-01-0100:00:00',20000101000000),->('2000-02-28','2000-02-2800:00:00',20000228000000),->('2000-02-29','2000-02-2900:00:00',20000229000000),->('2000-03-01','2000-03-0100:00:00',20000301000000),->('2000-12-31','2000-12-3123:59:59',20001231235959),->('2001-01-01','2001-01-0100:00:00',20010101000000),->('2004-12-31','2004-12-3123:59:59',20041231235959),->('2005-01-01','2005-01-0100:00:00',20050101000000),->('2030-01-01','2030-01-0100:00:00',20300101000000),->('2040-01-01','2040-01-0100:00:00',20400101000000),->('9999-12-31','9999-12-3123:59:59',99991231235959);QueryOK,14rowsaffected(0.01sec)Records:14Duplicates:0Warnings:2

    mysql>SELECT*FROMy2k;+------------+---------------------+----------------+|date|date_time|time_stamp|+------------+---------------------+----------------+|1998-12-31|1998-12-3123:59:59|19981231235959||1999-01-01|1999-01-0100:00:00|19990101000000||1999-09-09|1999-09-0923:59:59|19990909235959||2000-01-01|2000-01-0100:00:00|20000101000000||2000-02-28|2000-02-2800:00:00|20000228000000|

  • |2000-02-29|2000-02-2900:00:00|20000229000000||2000-03-01|2000-03-0100:00:00|20000301000000||2000-12-31|2000-12-3123:59:59|20001231235959||2001-01-01|2001-01-0100:00:00|20010101000000||2004-12-31|2004-12-3123:59:59|20041231235959||2005-01-01|2005-01-0100:00:00|20050101000000||2030-01-01|2030-01-0100:00:00|20300101000000||2040-01-01|2040-01-0100:00:00|00000000000000||9999-12-31|9999-12-3123:59:59|00000000000000|+------------+---------------------+----------------+14rowsinset(0.00sec)

    LosdosúltimosvaloresdecolumnaTIMESTAMPsonceroporquelosvaloresdeaño(2040,9999)excedeelmáximodeTIMESTAMP.EltipodedatosTIMESTAMPqueseusaparaalmacenareltiempoactual,soportavaloresdelrango19700101000000hasta20300101000000enmáquinasde32-bit(valoresconsigno).Enmáquinasde64-bit,TIMESTAMPtratavaloreshasta2106(valoressinsigno).

    AunqueMySQLServerporsímismonotieneproblemasconelaño2000,puedetenerlossiinteractúaconaplicacionesquesílostengan.Porejemplo,muchasaplicacionesantiguasalmacenanomanipulanañosusandovaloresdedosdígitos(quesonambíguos)enlugardecuatrodígitos.Esteproblemapuededarseporaplicacionesqueusanvalorestalescomo00o99comoindicadoresdevalores"perdidos".Pordesgracia,estosproblemaspuedensercomplicadosdearreglar,yaqueaplicacionesdiferentespuedenhabersidoprogramadaspordistintosprogramadores,cadaunodeloscualespuedeusarunaseriededistintasconvencionesyfuncionesdefechas.

    Así,aunqueMySQLServernotieneproblemasconelaño2000,eslaresponsabilidaddelaaplicacióndeproporcionarentradasinambíguas.ConsulteSección11.3.4,“Efecto2000(Y2K)ytiposdedatos”paralasreglasdeMySQLServerparatratarfechasambíguasdedosdigitos.

  • 1.5.MapadedesarrollodeMySQL

    EstasecciónproporcionaunvistazodelplandedesarrollodeMySQL,incluyendolasprincipalescaracterísticasimplementadasoplaneadasparaMySQL4.0,4.1,5.0,y5.1.Lasiguientesecciónproporcionainformaciónparacadaserie.

    LaactualserieenproducciónesMySQL5.0,cuyaversiónestableesla5.0.9,publicadaenagostodel2005.LaseriedeproducciónanterioreslaMySQL4.1,cuyaversiónestablees4.1.7,publicadaenoctubredel2004.Estatusdeproducciónsignificaqueelfuturodeldesarrollo5.0y4.1.estálimitadosóloaarreglarproblemas.ParaversionesanterioresaMySQL4.0ylaserie3.23,sólosearreglanbugscríticos.

    DesarrolloactivodeMySQLactualmentetienelugarenlaserieMySQL5.1,loquesignificaquenuevascaracterísticasseañadenalamisma.

    Antesdeactualizardeunaseriealasiguiente,porfavorconsulteloscomentariosenSección2.10,“AumentarlaversióndeMySQL”.

    Planesparalascaracterísticasmásdemandadasseresumenenlasiguientetabla.

    Característica SerieMySQLClavesforáneasparatablasMyISAM 5.1(yaimplemantadoparatablasInnoDB)Disparadores 5.0y5.1Fullouterjoin 5.1Restriccionesdeintegridad 5.1

    1.5.1.ElservidorMySQLincrustado(embedded)

    LabibliotecadelservidorincrustadolibmysqldpermiteMySQLServerpuedatrabajarconunagrancantidaddedominiosdeaplicaciones.Usandoestabiblioteca,losdesarrolladorespuedenañadirMySQLServerenvariasaplicacionesydispositivoselectrónicos,dondeelusuariofinalnotieneconocimientoquehayunabasededatossubyacente.MySQLServerincrustadoesidealparausotrasaplicacionesenInternet,kioskospúblicos,combinaciónde

  • hardware/softwareenllaveros,servidoresdealtorendimientodeInternet,basesdedatosautocontenidasdistribuidasenCD-ROM,yasí.

    MuchosusuariosdelibmysqldsebeneficiandelalicenciadualdeMySQL.ParalosquenoquieranestarligadosalalicenciaGPL,elsoftwareestádisponibleconlicenciacomercial.Consultehttp://www.mysql.com/company/legal/licensing/paramásinformacióndelapolíticadelicenciasdeMySQLAB.LabibliotecaincrustadaMySSQLusalamismainterfazquelabibliotecaclientenormal,porloqueesconvenienteyfácildeusar.ConsulteSección24.3.16,“libmysqld,labibliotecadelservidorMySQLincrustado(embedded)”.

    EnWindowshaydosbibliotecasdiferentes:

    libmysqld.lib Bibliotecadinámicaparaaplicacionesthreaded.mysqldemb.lib Bibliotecaestáticoparaaplicacionesnothreaded.

    1.5.2.QuéhaydenuevoenMySQL5.0

    LassiguientescaracterísticasseimplementanenMySQL5.0.

    TipodedatosBIT:ConsulteSección11.2,“Tiposnuméricos”.

    Cursores:Soporteelemental.ConsulteSección19.2.11,“Cursores”.

    Diccionariodedatos(InformationSchema):ConsulteCapítulo22,LabasededatosdeinformaciónINFORMATION_SCHEMA.

    Administradordeinstancias:PuedeusarseparainiciarypararelMySQLServer,inclusodesdeunamáquinaremota.ConsulteSección5.2,“ElgestordeinstanciasdeMySQL”.

    Matemáticasdeprecisión:ConsulteCapítulo23,Matemáticasdeprecisión.

    Procedimientosalmacenados:ConsulteCapítulo19,Procedimientosalmacenadosyfunciones.

    Modoestrictoytratamientodeerroresestándard:Consulte

    http://www.mysql.com/company/legal/licensing/

  • Sección5.3.2,“ElmodoSQLdelservidor”yCapítulo26,ManejodeerroresenMySQL.

    Disparadores:ConsulteCapítulo20,Disparadores(triggers).

    TipodedatosVARCHAR:SoportenativoVARCHAR.LalongitudmáximadeVARCHARes65,532bytesahora,ynosecortanespaciosenblancoconsecutivos.ConsulteSección11.4.1,“LostiposCHARyVARCHAR”.

    Vistas:ConsulteCapítulo21,Vistas(Views)ySección1.7.5.6,“Vistas”.

    LasecciónNovedadesdeestemanualincluyeunalistamásenprofundidaddecaracterísticas.ConsulteSecciónC.1,“Cambiosenlaentrega5.0.x(Desarrollo)”.

    ParalosquedeseenconsultarlasúltimasnovedadesdeMySQL,tenemosnuestrorepositorioBitKeeperparaMySQLdisponiblepúblicamente.ConsulteSección2.8.3,“Instalardesdeelárboldecódigofuentededesarrollo”.

  • 1.6.FuentesdeinformaciónacercadeMySQL

    1.6.1.ListasdecorreodeMySQL

    EstasecciónpresentalaslistasdecorreoMySQLyproporcionaguíassobrecómodebenusarselaslistas.Cuandosesuscribeaunalistadecorreo,recibetodoslosmensajescomomensajeselectrónicos.Puedeenviarsuspropiaspreguntasyrespuestasalalista.

    1.6.1.1.LaslistasdecorreodeMySQL

    Parasuscribirseoborrarsedecualquieradelaslistasdescritasenestasección,visitehttp://lists.mysql.com/.Paralamayoríadeellos,puedeseleccionarlaversiónnormaldelalistaenlaquerecibemensajesindividuales,ounaversiónresumidaenlaquerecibeungranmensajealdía.

    Porfavornoenvíemensajesparasuscribirseoborrarseaningunadelaslistasdecorreo,yaquedichosmensajessedistribuyenautomáticamenteamilesdeusuarios..

    SusitiolocalpuedetenermuchossuscriptoresaunalistadecorreoMySQL.Enesecaso,puedetenerunalistadecorreolocal,deformaquelosmensajesenviadosdelists.mysql.comasusitiosepropaganalalistalocal.Enestoscasos,porfavorcontacteconsuadministradordesistemasparaserañadidooborradodelalistaMySQLlocal.

    Sideseatenereltráficodeunalistadecorreoenunbuzóndecorreoseparadoensuprogramadecorreo,creeunfiltrobasadoenlascabecerasdelmensaje.PuedeusarlascabecerasList-ID:oDelivered-To:paraidentificarlosmensajesdelalista.

    LaslistasdecorreodeMySQLsonlassiguientes:

    anuncios

    EstalistaesparaanunciosdenuevasversionesdeMySQLyprogramasrelacionados.Estaesunalistadetráficobajoyalaquetodoslosusuarios

    http://lists.mysql.com/

  • deMySQLdeberíansuscribirse.

    mysql

    EstaeslalistaprincipalparadiscusiónsobreMySQLengeneral.Porfavortengaencuentaquealgunascuestionesesmejordiscutirlasenlistasmásespecializadas.Siposteaenunalistaequivocada,puedenoobtenerrespuesta.

    bugs

    EstalistaesparagentequedeseeestarinformadasobrecuestionesreportadasdesdelaúltimaversióndemySQLoquedeseenestaractivamenteimplicadasenelprocesodebuscarbugsyarreglarlos.ConsulteSección1.6.1.3,“Cómoinformardebugsyproblemas”.

    temasinternos

    EstalistaesparagentequetrabajaenelcódigodeMySQL.EstetambiéneselfórumparadiscutiracercadeldesarrollodeMySQLyparapublicarparches.

    mysqldoc

    EstalistaesparagentequetrabajaenladocumentacióndeMySQL:gentedeMySQLAB,traductores,yotrosmiembrosdelacomunidad.

    pruebasderendimiento

    Estalistaesparacualquierainteresadoentemasderendimiento.Ladiscusiónseconcentraenrendimientodebasesdedatos(nosólodeMySQL),perotambiénincluyecategoríasmásampliascomorendimientodelkernel,sistemadeficheros,tiposdediscos,etc.

    empaquetadores

    EstalistaesparadiscusionesacercadeempaquetarydistribuirMySQL.EsteeselfórumusadopormantenedoresdedistribucionesparaintercambiarideassobreempaquetarMySQLyasegurarqueMySQLparecetansimilarcomoseaposibleentodaslasplataformasysistemas

  • operativossoportados.

    java

    EstalistaesparadiscusionseacercadeMySQLServeryJava.NormalmenteseusaparadiscutiracercadeJDBC,incluyendoelconnector/JdeMySQL.

    win32

    EstalistaesparatodoslostemasacercadelsoftwareMySQLensistemasoperativosMicrosoft,talescomoWindows9x,Me,NT,2000,SPy2003..

    myodbc

    EstalistaesparatodoslostópicosacercadeconectaralMySQLServerconODBC.

    herramientasgui

    EstalistaesparatodoslostemasacercadeherramientasGUIMySQL,incluyendoMySQLAdministratoryelclientegráficoMySQLControlCenter.

    cluster

    EstalistaesparadiscusiónacercadeMySQLCluster.

    dotnet

    EstalistaesparadiscusiónacercadeMySQLServerylaplataforma.NET.LamayoríadediscusionesesacercadelConnector/NETMySQL.

    plusplus

    EstalistaesparatópicosacercadeprogramaciónconlaAPIC++paraMySQL.

    perl

    EstalistaesparatópicosacercadesoportePerlparaMySQLcon

  • DBD::mysql.

    SinoescapazdeobtenerunarespuestaasupreguntadeningunalistaMySQL,unaopciónesadquirirsoportedeMySQLAB.Estolepondráencontactodirectoconlosdesarrolladores.

    LasiguientetablamuestraalgunaslistasdecorreoMySQLenidiomasdistintosalinglés.EstaslistasnosonoperadasporMySQLAB.

    Listadecorreofrancesa.

    ListadecorreoKoreana.Envíeuncorreoasubscribemysqlyour@email.addressparasubscribirsealalista.

    ListadecorreoAlemana.Envíeuncorreoasubscribemysql-deyour@email.addressparasubscribirsealalista.Puedeencontrarinformaciónacercadeestalistaenhttp://www.4t2.com/mysql/.

    ListadecorreoPortuguesa.Envíeuncorreoasubscribemysql-bryour@email.addressparasubscribirsealalista.

    ListadecorreoEspañola.Envíeuncorreoasubscribemysqlyour@email.addressparasubscribirsealalista.

    1.6.1.2.Hacerpreguntasyreportarbugs

    Antesdereportarunbugocuestión,porfavorhagalosiguiente:

    Busqueenelmanualenlíneaenhttp://dev.mysql.com/doc/.Intentamosmantenerelmanualactualizadoañadiendosolucionesanuevosproblemas

    mailto:[email protected]:[email protected]:[email protected]://www.4t2.com/mysql/mailto:[email protected]:[email protected]://dev.mysql.com/doc/

  • frecuentemente.Elhistorialdecambios(http://dev.mysql.com/doc/mysql/en/News.html)puedeserparticularmenteútilyaqueesbastanteposiblequeversionesmásactualestengansolucionesasuproblema.

    Busqueenlabasededatosdebugsenhttp://bugs.mysql.com/paraversielbughasidoreportadoysolucionado.

    BusqueelarchivodelaslistasdecorreoMySQLenhttp://lists.mysql.com/.

    Tambiénpuedeusarhttp://www.mysql.com/search/parabuscarentodaslaspáginasweb(incluyendoelmanual)queseencuentranenlawebdeMySQLAB.

    Sinopuedeencontrarunasoluciónenelmanualolosarchivos,pruebeconsuexpertolocalenMySQL.Sitampocopuedeencontrarunasoluciónasupregunta,porfavorsigalasguíasparaenviaruncorreoalaslistasdecorreoMySQL,explicadoenlasiguientesección,antesdecontactarconnosotros.

    1.6.1.3.Cómoinformardebugsyproblemas

    Elsitionormalenelquereportarbugseshttp://bugs.mysql.com/,queesladireccióndenuestrabasededatosdebugs.Estabasededatosespública,ypuedeserconsultadaporcualquiera.Sientraenelsistema,puedeañadirnuevosreportes.

    Paraescribirunbuenreportedeerrorsenecesitapaciencia,perohacerlocorrectamenteporprimeraveznosahorratiempotantoanosotroscomoaustedmismo.Unbuenreportedebugquecontengauntesteocompletodelbug,hacequeseamuyprobablequesearregleparalasiguienteversión.Estasecciónmuestracómoescribirunreportecorrectamentedeformaquenopierdasutiempohaciendocosasquenonosayudanenabsoluto.

    Animamosatodoelmundoausarelscriptmysqlbugparagenerarunreportedebug(ounreporteacercadecualquierproblema).mysqlbugpuedeencontrarseeneldirectorioscripts(distribuciónfuente)yeneldirectoriobineneldirectoriodeinstalación(distribuciónbinaria).Sinoesposibleusarmysqlbug(porejemplo,siutilizaWindows),esvitalqueincluyatodalainformaciónnecesariaqueapareceenestasección(ylomásimportante,unadescripcióndel

    http://dev.mysql.com/doc/mysql/en/News.htmlhttp://bugs.mysql.com/http://lists.mysql.com/http://www.mysql.com/search/http://bugs.mysql.com/

  • sistemaoperativoylaversióndeMySQL).

    Elscriptmysqlbugleayudaagenerarunreportedeterminandolamayoríadelainformaciónautomáticamente,perosifaltaalgoimportante,porfavorinclúyaloensumensaje.Porfavor,leaestasecciónconcuidadoyasegúresequetodalainformacióndescritaaquíseincluyeensureporte.

    Preferiblemente,debetestearelproblemausandolaúltimaversióndeproducciónodesarrollodeMySQLserverantesdepostear.Cualquieradeberíasercapazderepetirelbugusandomysqltest<script_fileenelcasodetestincluídooejecutandoelscriptdeconsolaoPerlincluídoenelreportedebug.

    Todoslosbugsposteadosenlabasededatosdebugsenhttp://bugs.mysql.com/secorrigenodocumentanenlasiguienteactualizacióndeMySQL.Sisólosenecesitancambiosmenoresenelcódigoparaarreglarlo,podemospostearunparcheparaarreglarlo.

    SiencuentraunfalloimportantedeseguridadenMySQL,puedeenviaruncorreoa.

    Sitieneunreportedebugrepetible,porfavorenvíeloalabasededatosdebugsenhttp://bugs.mysql.com/.Tengaencuentaqueinclusoenestecasoesbuenoejecutarelscriptmysqlbugantesparareunirinformacióndesusistema.CualquierbugqueseamoscapacesdereproducirtieneunaaltaprobabilidaddearreglarseenlasiguienteversióndeMySQL.

    Parareportarotrosproblemas,puedeusarcualquieradelaslistasdecorreodeMySQL.

    Recuerdequenosesposibleresponderunmensajequecontengademasiadainformación,peronosinocontienesuficiente.Normalmenteseomitenloshechosporquesepiensaqueseconocelacausadelproblemayseasumequealgunosdetallesnoimportan.Unbuenprincipioeselsiguiente:sidudaacercadeexplicaralgo,hágalo.Esmásrápidoymenosproblemáticoescribirunpardelíneasextraensureportequeesperaralarespuestasidebemospreguntaralgoquenoseincluyaenelreporteinicial.

    Loserroresmáscomunesenlosreportesdeerrorson(a)noincluirelnúmerodeversióndeladistribuciónMySQLServerusada,y(b)noescribircompletamentelaplataformaenlaestáinstaladoMySQLServer(incluyendoeltipode

    http://bugs.mysql.com/mailto:[email protected]://bugs.mysql.com/

  • plataformaynúmerodeversión).Estaesinformaciónaltamenterelevante,yenel99%deloscasoselreportedebugesinútilsinella.Muyamenudonospreguntas"¿Porquénomefuncionaamí?"EntoncesencontramosquelacaracterísticareportadanoestabaimplementadaenesaversióndeMySQL.Aveceselerrordependedelaplataforma;enesoscasosescasiimposibleparanosotrosarreglarnadasinsaberelsistemaoperativoyelnúmerodeversióndelaplataforma.

    SihacompiladoMySQLdelcódigofuente,recuerdeenproporcionarinformaciónacercadelcompilador,siestárelacionadaconelproblema.AmenudolagenteencuentrafallosenloscompiladoresycreequeelproblemaestárelacionadoconMySQL.Lamayoríadeloscompiladoresestánbajodesarrollocontínuoymejoranversiónaversión,necesitamossaberquécompiladorusa.Tengaencuentaquecadacadaproblemadecompilacióndebeserconsideradocomounbugyreportadocomotal.

    Esmásútilcuandoseincluyeunabuenadescripcióndelproblemajuntoalreportedelbug.Estoesdarunbuenejemplodetodoloqueconducealproblemaydescribirexactamenteelproblemaensí.Elmejorreporteeselqueincluyeunejemploincluyendocómoreproducirelproblemaobug.ConsulteSecciónD.1.6,“Crearuncasodepruebatrashaberencontradounatablacorrupta”.

    Siunprogramaproduceunmensajedeerroresmuyimportanteincluirloenelreporte.Sitratamosdebuscaralgodelosarchivosusandoprogramas,esmejorqueelmensajedeerrorcoincidaexactamenteconelproducidoporelprograma(inclusoesimportanterespetarmayúsculasyminúsculas).Nuncadebeintentarreproducirdememoriaelmensajedeerror;enlugardeello,copieelmensajeenteroenelreporte.

    SitienealgúnproblemaconelConnector/ODBC(MyODBC),porfavortratedegenerarunficherodetrazayenviarloconsureporte.ConsulteSección25.1.1.9,“CómoreportarproblemasybugsacercadeMyODBC”.

    Porfavor,recuerdequemuchagentequeleasureporteloharáconunmonitorde80columnas.Cuandogenerereportesoejemplosusandolacolumnadelíneadecomandosmysqldebeusarlaopción--vertical(oelterminadordecomando\G)parasalidaqueexcederíaelanchodisponibleparatalesmonitores(porejemplo,conelcomandoEXPLAINSELECT;(veaelejemploalfinaldeestasección).

  • Porfavor,incluyalasiguienteinformaciónensureporte:

    ElnúmerodelaversióndeladistribucióndeMySQLqueusa(porejemplo,MySQL4.0.12).Puedeconsultarlaversiónqueestáusandoejecuntadomysqladminversion.Elprogramamysqladminpuedeencontrarseeneldirectoriobinbajoeldirectoriodeinstalación.

    Elfabricanteymodelodelamáquinaenlaqueexperimentaelproblema.

    Nombredelsistemaoperativoyversión.SitrabajaconWindows,puedeobtenerelnombreynúmerodeversiónhaciendodobleclickeneliconoMiPCyconsultandoelmenú"Ayuda/AcercadeWindows".ParalamayoríadesistemasUnixpuedeobtenerestainformaciónconelcomandouname-a.

    Enocasioneslacantidaddememoria(realyvirtual)esrelevante.Siloduda,incluyaestosvalores.

    SiusaunadistribuciónfuentedelsoftwareMySQL,elnombreynúmerodeversióndelcompiladorusadoesnecesario.Siusaunadistribuciónbinaria,necesitaelnombredeladistribución.

    Sielproblemaocurredurantelacompilación,incluyaelmensajedeerrorexactoyunascuantaslíneasdecontextoalrededordelcódigoenelficherodondeocurreelerror.

    Simysqldcae,incluyalaconsultaquehizocaermysqld.Normalmentepuedeconsultarloejecutandomysqldconellogdeconsultasactivado,yluegoconsultandoellogtraslacaídademysqld.ConsulteSecciónD.1.5,“Elusoderegistros(logs)paraencontrarlacausadeerroresdemysqld”.

    Siunabasededatosestárelacionadaconelproblema,incluyalasalidadelcomandomysqldump--no-datadb_nametbl_name.Esteesunmétodosencilloypoderosoparaobtenerinformaciónacercadecualquiertablaenunabasededatos.Lainformaciónnosayudaacrearunasituaciónsimilaralaquehaprovocadoelfallo.

    ParabugsrelacionadosconrendimientooproblemasconconsultasSELECT,siempredebeincluirlasalidadeEXPLAINSELECT...,ycomomínimoelnúmerodefilasqueelcomandoSELECTproduce.TambiénpuedeincluirlasalidadeSHOWCREATETABLEtbl_nameparacadatablaimplicada.

  • Mientrasmásinformacióntengamosacercadelasituación,esmásposiblequepodamosayudar..

    Elsiguienteesunejemplodeunreportemuybueno.Debeserposteadoconelscriptmysqlbug.Elejemplousalaherramientaporlíneasdecomandomysql.Tengaencuentaelterminadordecomandos\Gparacomandoscuyasalidaexcedalasdeunmonitorde80columnas.

    mysql>SHOWVARIABLES;mysql>SHOWCOLUMNSFROM...\Gmysql>EXPLAINSELECT...\Gmysql>FLUSHSTATUS;mysql>SELECT...;mysql>SHOWSTATUS;

    Siocurreunproblemaalejecutarmysqld,tratedeproporcionarunscriptdeentradaquereproduzcalaanomalía.Estescriptdebeincluircualquierficherofuentenecesario.Mientrasmásfielmentereproduzcaelscriptlasituación,mejor.Sipuedehaceruncasodetestreproducible,debepostearloenhttp://bugs.mysql.com/parauntratamientoprioritario.

    Sinopuedeproporcionarunscript,debecomomínimoincluirlasalidademysqladminvariablesextended-statusprocesslistensucorreoparaproporcionaralgodeinformaciónsobrecómoseestácomportandoelsistema.

    Sinopuedeproporcionaruncasodetestconunaspocaslíneas,osilatabladetestesdemasiadograndeparaserenviadaalalistadecorreo(másde10filas),debedumpearsustablasusandomysqldumpycrearunficeroREADMEquedescribasuproblema.

    Creeunficherocomprimidoconsusficherosusandotarygzipozip,yuseFTPparatransferirelarchivoaftp://ftp.mysql.com/pub/mysql/upload/.Despuésintroduzcaelproblemaennuestrabasededatosenhttp://bugs.mysql.com/.

    http://bugs.mysql.com/ftp://ftp.mysql.com/pub/mysql/upload/http://bugs.mysql.com/

  • SicreequeelservidorMySQLproduceunresultadoextrañodeunaconsulta,incluyanosóloelresultado,sinotambiénsuopiniónsobrecuáldeberíaserelresultadocorrecto,yunacitacióndescribiendolasbasesdesuopinión.

    Cuandodeunejemplodelproblema,esmejorusarlosnombresdevariables,detablas,etc.queexistanenlasituaciónenlugardeusarnuevosnombres.Elproblemapuedeestarrelacionadoconelnombredeunavariableotabla.Estoscasossonraros,peroesmejorestarseguroquearrepentirseluego.Despuésdetodo,deberíasermásfácildarunejemploqueuselasituaciónrealyestoesmejorparanosotros.Encasoquetengadatosquenoquieraenseñar,puedeusarFTPparatransferirloaftp://ftp.mysql.com/pub/mysql/upload/.Silainformaciónesrealmentesecretaynoquiereenseñárnosla,entoncespuedeproporcionarnosunejemplousandootrosnombres,peroporfavor,considérelocomolaúltimaopción.

    Incluyatodaslasopcionesintroducidasenlosprogramasrelevantes,siesposible.Porejemplo,indiquelasopionesqueusacuandoiniciaelservidormysqldasícomolasopcionesqueusacuandoejecutacualquierprogramaclienteMySQL.Lasopcionesdedichosprogramas,talescomomysqldymysql,yalscriptconfigure,sonamenudoclavesparaobtenerunarespuestaymuyrelevantes.Nuncaesmalaideaincluirlas.Siusacualquiermódulo,comoPerloPHP,porfavorincluyalosnúmerodeversionesdelosmismostambién.

    Sisupreguntaestárelacionadaconelsistemadeprivilegios,porfavorincluyalasalidademysqlaccess,lasalidademysqladminreload,ytodoslosmensajesdeerrorqueobtengacuandointenteconectar.Cuandotesteesusprivilegios,debeejecutarelcomandomysqlaccess.Después,ejecutemysqladminreloadversionytratedeconectarconelcomandoquelecausaproblemas.mysqlaccessseencuentraeneldirectoriobinbajoeldirectoriodeinstalacióndeMySQL.

    Sitieneunparcheparaunbug,inclúyalo.Peronoasumaqueelparcheestodoloquenecesitamosoquepodemosusarlo,sinproporcionaralgunainformaciónnecesariacomocasosdetestmostrandoelproblemaquecorrigeelparche.Podemosencontrarproblemasensuparcheopuedequenoloentendamosenabsoluto;enesecasonopodemosusarlo.

    ftp://ftp.mysql.com/pub/mysql/upload/

  • Sinopodemosverificarexactamenteelpropósitodelparche,nolousaremos.Loscasosdetestnosayudanenestepunto.Nosmuestranqueelparchepuedetratartodaslassituacionesquepuedanocurrir.Siencontramosuncasoextremo(inclusounoraro)dondeelparchenofuncione,seráinútil.

    Suposicionesacercadelanaturalezadelbug,porquéocurreodequédepende,suelenserincorrectas.InclusoelequipodeMySQLnopuedeadivinarestascosassinusarundebuggerparadeterminarlacausarealdeunbug.

    Indiqueensureportequehachequeadoelmanualdereferenciayelarchivodecorreo,deformaqueotrossepanquehaintentadosolucionarelproblemaporsímismo.

    Siobtieneunparseerror,porfavorchequeesusintaxisconcuidado.Sinopuedeencontrarnadaincorrectoenella,esmuyposiblequesuversióndeMySQLServernosoportelasintaxisqueutiliza.Siestáusandolaversiónactualyelmanualenhttp://dev.mysql.com/doc/nocubrelaversiónqueusa,MySQLServernosoportasuconsulta.Enesecaso,susúnicasopcionessonimplementarlasintaxisustedmismooenviarunmailaypedirunaofertaparaimplementarlo.

    Sielmanualcubrelasintaxisqueestáusando,perotieneunaversiónmásantiguadeMySQL,compruebeelhistorialdecambiosdeMySQLparaversilasintaxishasidoimplementada.Enesecaso,tienelaopcióndeactualizaraunanuevaversióndeMySQLServer.ConsulteApéndiceC,HistorialdecambiosdeMySQL.

    Sisuproblemaesquelosdatosparecenestarcorruptosuobtieneerroresalaccederaunatablaenparticular,debechequearytratardearreglarlastablasconCHECKTABLEyREPAIRTABLEoconmyisamchk.ConsulteCapítulo5,Administracióndebasesdedatos.

    SiestáutilizandoWindows,verifiquequelower_case_table_nameses1o2conSHOWVARIABLESLIKE'lower_case_table_names'.

    Sitieneproblemascontablascorruptasamenudo,debetratardeencontrarcuándoyporquéocurre.Enestecaso,ellogdeerroreseneldirectoriodedatosdeMySQLpuedecontenerinformaciónacercadequéhaocurrido.

    http://dev.mysql.com/doc/mailto:[email protected]

  • (Ésteeselficheroconelsufijo.errenelnombre.)ConsulteSección5.10.1,“Elregistrodeerrroes(ErrorLog)”.Porfavor,incluyacualquierinformaciónrelevantedeesteficheroensureporte.Normalmentemysqldnuncadeberíacorromperunatablasinadamuereduranteunaactualización.Sipuedeencontrarlacausadeunmysqldmuriendo,esmuchomásfácilparanosotrosencontrarunasoluciónalproblema.ConsulteSecciónA.1,“Cómodeterminaraquéesdebidounproblema”.

    Siesposible,descargueeinstalelaversiónmásrecientedeMySQLServerycompruebesiresuelvesuproblema.TodaslasversionesdelsoftwareMySQLsontesteadasduramenteydeberíanfuncionarsinproblemas.Creemosenhacertodotancompatibleconversionesanteriorescomoseapo