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
Top Related