home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-07-03 | 35.4 KB | 1,222 lines |
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
- <HTML lang="en">
-
- <HEAD>
- <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
- <TITLE>LinuxFocus Julio 1998: MySQL</TITLE>
- </HEAD>
-
-
-
- <BODY bgcolor="#ffffff" text="#000000" alink="#336633" link="#336633" vlink="#336633">
-
-
-
- <!-- MAP for top navegation bar -->
- <MAP name="top">
- <AREA shape="rect" coords="367, 9, 418, 30" alt="Home" href="../index.html">
- <AREA shape="rect" coords="423, 9, 457, 30" alt="Map" href="../map.html">
- <AREA shape="rect" coords="463, 9, 508, 30" alt="Index" href="../indice.html">
- <AREA shape="rect" coords="514, 9, 558, 30" alt="Search" href="../search.html">
- </MAP>
-
-
-
- <!-- MAP for bottom navegation bar -->
- <MAP name="bottom">
- <AREA shape="rect" coords="78, 0, 163, 15" alt="News" href="../News/">
- <AREA shape="rect" coords="189, 0, 284, 15" alt="Archives" href="../Archives/">
- <AREA shape="rect" coords="319, 0, 395, 15" alt="Links" href="../Links">
- <AREA shape="rect" coords="436, 0, 523, 15" alt="About LF" href="../aboutus.html">
- </MAP>
-
-
-
- <CENTER>
- <IMG src="Topbar.gif" width="600" height="40" border="0" alt="[Top Bar]" ismap usemap="#top" ><BR>
- <IMG src="Bottombar.gif" width="600" height="21" border="0" alt="[Bottom Bar]" ismap usemap="#bottom">
- </CENTER>
-
-
- <!-- SHORT BIO ABOUT THE AUTHOR -->
- <TABLE align="left" width="30%" border="0" cellspacing="0" cellpadding="5">
-
- <TR>
- <TD>
- <IMG src="Who.gif" width="173" height="164" alt="[Photo of the Author]"><BR>
- <FONT color="#336633" size="+2">Jose M. Fernández </FONT><BR>
-
- <FONT color="#336633"> Sobre el autor</FONT>:
- [write a one to two paragraph bio here]
- <BR>
-
- <BR>
- <A HREF="mailto:JOSEFDEZ@latinmail.com">Escribe al autor</A>
- <BR>
-
-
- <!-- INDEX -->
- <BR>
- <FONT color="#336633">Índice de Contenidos</FONT>: <p>
- <A href="#section1">Introducción</A><br>
- <A href="#section2">Principales Características</A><br>
- <A href="#section3">Instalación</A><br>
- <A href="#section4">Primeros Pasos, Administración (Seguridad)</A><br>
- <A href="#section5">Lenguaje SQL en MySQL</A><BR>
- <A href="#section6">Conclusiones</A><BR>
-
-
-
-
- </TD>
- </TR>
-
- </TABLE>
-
-
-
-
- <TABLE>
-
- <TR>
- <TD>
-
-
- <!-- BODY OF THE ARTICLE -->
- <H2>MySQL<BR> Servidor de Bases de Datos</H2>
- <IMG src="illustration10.gif" alt="[Ilustration]" width="100" height="100" hspace="10" >
-
- <P align="top">
- <FONT color="#336633" size="2">Resumen</FONT>:
- <FONT size="2" face="Helvetica,Arial,Roman">
- [Here goes the abstract
- of the article....]
- </FONT>
-
- </P>
-
-
- <BR clear="all">
- <BR>
- <HR size="0" noshadow>
-
-
-
- <A name="section1"></A><H3>Introducción</H3>
-
- <P>MySQL es un gestor de bases de datos SQL (Structured Query
- Language). Es una implementación Cliente-Servidor que
- consta de un servidor y diferentes clientes
- (programas/librerías).</P>
-
-
- <p>Hablar de una base de datos SQL es muy complicado ya que
- habría que remontarse a los orígenes mismos de
- las bases de datos relacionales y el objetivo de este
- artículo no es tan ambicioso, simplemente intenta
- describir y mostrar un implementación específica
- de un gestor de bases de datos SQL.</p>
-
- <P>Aunque reseñar como dato histórico que IBM
- empezó a comercializar en 1.981 el SQL y desde entonces
- este producto ha tenido un papel importante en el desarrollo
- de la bases de datos relacionales. IBM propuso y fue aceptada
- , una versión de SQL al Instituto de Estándares
- Nacional Americano(ANSI) y desde entonces es utilizado de
- forma generalizada en las bases de datos relacionales. En
- 1.983 nació DB2 la más popular( por lo menos en
- los grandes ordenadores) de las bases de datos de este tipo
- hasta estos mismos momentos.</P>
-
- <P>En el mundo GNU, una de las bases de datos que se
- reseña en cualquier referencia de aplicaciones de
- éste tipo bajo LINUX, es MySQL aunque no está
- incluida en ninguna distribución ya que no tiene
- licencia GNU como tal, para comercializarla a ella o a
- cualquier software que la utilice o se sirva de ésta
- habrá que adquirir una licencia.</P>
-
- <P>Esta base de datos es considerada (en su propia
- documentación así lo reseña) como la
- más rápida y robusta tanto para volúmenes
- de datos grandes como pequeños (siempre, claro
- está, comparada con las de su categoría), aunque
- como veremos más adelante está rapidez es a
- costa de no implementar ciertos aspectos del SQL.</P>
-
- <P>MySQL está disponible (Fuentes y binario) para:
- Linux 2.0+, SCO, Solaris 2.5, 2.6, SUNOS 4.x, BSDI 2.x, 3.0,
- SGI IRIX 6.x, AIX 4.x, DEC UNIX 4.x, HPUX 10.20, Windows 95
- (con perdón) , entre los sistemas operativos más
- populares.</P>
-
- <P>La versión libre fue escrita por Michael Windenis,
- la versión comercial es distribuida por TCX
- Datakonsulter AB.</P>
-
- <A name="section2"></A><H3>Principales Características</H3>
-
- <ul>
- <li>El principal objetivo de MySQL es velocidad y
- robustez.</li>
-
- <li>Escrito en C y C++, testado con GCC 2.7.2.1. Usa GNU
- autoconf para potabilidad.</li>
-
- <li>Clientes C, C++, JAVA, Perl, TCL.</li>
-
- <li>Multiproceso, es decir puede usar varias CPU si
- éstas están disponibles.</li>
-
- <li>Puede trabajar en distintas plataformas y
- S.O. distintos.</li>
-
- <li>Sistema de contraseñas y privilegios muy flexible y
- segura.</li>
-
- <li>Todas la palabras de paso viajan encriptadas en la red.</li>
-
- <li>Registros de longitud fija y variable.</li>
-
- <li>16 índices por tabla, cada índice puede
- estar compuesto de 1 a 15 columnas o partes de ellas con una
- longitud máxima de 127 bytes.</li>
-
- <li>Todas las columnas pueden tener valores por defecto.</li>
-
- <li>Utilidad (Isamchk) para chequear, optimizar y reparar
- tablas.</li>
-
- <li>Todos los datos están grabados en formato
- ISO8859_1.</li>
-
- <li>Los clientes usan TCP o UNIX Socket para conectarse al
- servidor.</li>
-
- <li>El servidor soporta mensajes de error en distintas
- lenguas.</li>
-
- <li>Todos los comandos tienen -help o -? Para las ayudas.</li>
-
- <li>Diversos tipos de columnas como enteros de 1, 2, 3, 4, y 8
- bytes, coma flotante, doble precisión, carácter,
- fechas, enumerados, etc.</li>
-
- <li>ODBC para Windows 95 (con fuentes), se puede utilizar
- ACCESS para conectar con el servidor.</li>
-
- </ul>
-
- <A name="section3"></A><H3>Instalación</H3>
-
- <p>Naturalmente, antes de la instalación de la base de
- datos, habrá que conseguirla y para ello podemos
- acceder al WEB: <a
- href="http://www.tcx.se">http://www.tcx.se</a>, o FTP: <a
- href="ftp://ftp.sunet.se/pub/unix/databases/relational/mysql">
- ftp://ftp.sunet.se/pub/unix/databases/relational/mysql</a></p>
-
-
- <P>Además habrá que decidir por bajarse una
- distribución en código fuente o
- binario. Ésta última es más fácil
- de instalar pero debe de existir la versión binaria
- para nuestra plataforma (aunque existe para las más
- populares).</P>
-
- <H4>Instalación Binario </H4>
-
-
- <P>Una vez descargado el fichero empaquetado tal como:
- mysql-Version.tar.gz. Se procederá a
- desempaquetarlo. Se puede hacer de varias formas, pero yo
- prefiero hacerlo paso a paso:</P>
-
- <ol>
- <li> Desempaquetar:<br>
- gunzip -dfv mysql-Version.tar.gz</li>
-
- <li> Después
- se realiza el comando tar<br>
- tar -xvf mysql-Version.tar<br>
-
- <p>Este comando tar en mi instalación lo hice en el
- directorio /usr/local con lo que en éste se creé
- el directorio:<br> /usr/local/mysql-3.20.32a-pc-linux-gnu-i586</p>
-
- <p>que como vemos no es muy práctico su manejo, con lo
- que se recomienda (en la propia guía de
- instalación del MySQL) que se realice un acceso directo
- con el comando ln (hacer Links entre ficheros)</p> > ln -s
- mysql-3.20.32a-pc-linux-gnu-i586/bin mysql<br>
-
- <p>con lo que el
- directorio tendrá el aspecto:</p>
- <font size="-1"></font>
- <pre>
- drwxr-xr-x 8192 Nov 24 1993 bin
- drwxr-xr-x 8192 Nov 24 1993 etc
- drwxr-xr-x 8192 Aug 17 1997 i18n
- drwxr-xr-x 8192 Mar 16 1994 include
- drwxr-xr-x 8192 Mar 19 02:03 jdk1.1.3
- drwxr-xr-x 8192 Aug 17 1997 jre
- drwxr-xr-x 8192 Mar 16 1994 lib
- lrwxrwxrwx 36 Jan 18 19:40 mysql
- drwxr-xr-x 8192 Feb 5 00:07 mysql-3.20.32a-pc-linux-gnu-i586
- drwxr-xr-x 8192 Nov 24 1993 sbin
- drwxr-xr-x 8192 Nov 24 1993 src
- </pre></font>
-
- <p>y haciendo cd mysql estaremos naturalmente en el directorio
- bin de MySQL, con lo cual y si todo ha funcionado
- perfectamente estaremos en disposición de poder
- arrancar el servidor de la base da datos. </p></li>
- </ol>
-
- <H4>Instalación Fuentes </H4>
-
- <P>Desempaquetar el archivo de la misma forma que en el
- apartado anterior.</P>
- <pre>
- cd mysql-Version
- ./configure
- make install
- </pre>
-
- Existe una gran cantidad de documentación para realizar
- el proceso de instalación donde podemos encontrar desde
- los Errores (Bugs), pasando por documentación
- específica para distintos sistemas operativos,
- parámetros para distintas configuraciones y hasta una
- colección de FAQ de este tema. Si el proceso de
- instalación se realiza sin problemas (sería la
- primera vez que pase) se tendrá como resultado algo
- similar a lo obtenido en la instalación del software en
- binario.
-
- <P> Esta opción es solo recomendable para aquellos
- usuarios con bastante experiencia en esto de compilar e
- instalar código fuente y además disponer de
- bastante tiempo y paciencia para ir resolviendo cada uno de
- los problemas que inevitablemente surjan.</P>
-
- <A name="section4"></A><H3>Primeros Pasos, Administración (Seguridad)</H3>
-
- <P>Una vez instalado en nuestro sistema el gestor de bases de
- datos con una de las dos formas descritas en el apartado
- anterior y dentro del directorio:
- <tt>/usr/local/mysql-3.20.32a-pc-linux-gnu-i586</tt></p>
-
- <P>tendremos los siguientes ficheros y/o directorios:</P>
- <font size=-1>
- <PRE>
- -rw-r--r-- 1 root root 4133 Oct 1 1997 INSTALL-BINARY
- -rw-r--r-- 1 root root 16666 Oct 7 21:10 INSTALL-SOURCE
- -rw-r--r-- 1 root root 24088 Oct 27 23:06 NEWS
- -rw-r--r-- 1 root root 3562 Apr 11 1997 PORTING
- -rw-r--r-- 1 root root 8512 May 21 1997 PUBLIC
- -rw-r--r-- 1 root root 1963 Jul 31 1997 README
- -rw-r--r-- 1 root root 3416 Jun 4 1997 TODO
- drwxr-xr-x 6 root root 8192 Oct 28 00:44 bench
- drwxr-xr-x 2 cuenta1 users 8192 Mar 27 00:42 bin
- drwxr-xr-x 5 root root 8192 Mar 31 00:26 data
- drwxr-xr-x 2 root root 8192 Oct 28 00:44 include
- drwxr-xr-x 2 root root 8192 Oct 28 00:44 lib
- -rw-r--r-- 1 root root 132883 Jun 8 1997 mysql-faq.html
- -rw-r--r-- 1 root root 117622 Jun 10 1997 mysql-faq.txt
- -rw-r--r-- 1 root root 9301 Jun 8 1997 mysql-faq_toc.html
- drwxr-xr-x 4 root root 8192 Oct 28 00:44 mysqlperl
- drwxr-xr-x 2 root root 8192 Oct 28 00:44 scripts
- drwxr-xr-x 3 root root 8192 Oct 28 00:44 share
- drwxr-xr-x 2 root root 8192 Oct 28 00:44 tests
- </PRE></Font>
-
-
-
- <P>En los ficheros README, TODO, INSTALL, mysql-faq, etc.,
- viene información sobre la instalación del
- servidor de bases de datos, FAQ, manual de funcionamiento,
- etc. que es bastante completo y efectivo (parte de este
- articulo está basado en ellos).</P>
-
- <P>Dentro del directorio <tt>/data</tt> encontraremos como
- subdirectorios de este cada una de las bases de datos que
- vamos creando. En el momento de la instalación se
- define por defecto los archivos en los que se apoya el sistema
- de seguridad, esta base de datos es "mysql".</P>
-
- <P>El directorio <tt>/bench</tt> encontraremos ejemplos de
- SQL. Notar que en la instalación en código
- fuente los ejemplos son mayores que en la instalación
- en binario. </P>
-
- <P>El directorio <tt>/share</tt> contiene los mensajes de
- error del servidor en cada uno de los idiomas que está
- disponible.</P>
-
- <P>Los directorios <tt>/include</tt> y <tt>/lib</tt> se
- encuentran los ficheros *.h y las librerías
- necesarias.</P>
-
- <P>El directorio <tt>/bin</tt> están todos los ficheros
- ejecutables, entre los más importantes destacaremos:<P>
- `mysql'
-
- <br> Una Shell de SQL (con readline de GNU). Se puede usar
- tanto interactivamente como no.<P> `mysqladmin'
-
- <br> Utilidades de administración. Crear/borra base de
- datos. Información sobre procesos y versiones.<P>
- `mysqld'
-
-
- <br> El SQL "deamon" .Debe estar siempre
- ejecutándose.<P> `mysqlshow'
-
- <br> Visualiza información sobre base de datos, tablas
- y campos.<P> `safe_mysqld'
-
- <br> Arranca "mysqld".<P>
- `mysqlaccess'
-
- <br> Script para chequear los privilegios de una
- combinación: Host, Usuario y base de datos.<p>
-
- `mysqlbug'
- <br> Se utiliza para enviar los posibles errores (bug) que
- encontremos en el gestor.<p>
- `mysql_install_db'
-
- <br> Crear grandes tablas con privilegios por defecto, se
- ejecuta cuando se instala por primera vez en un sistema
- nuevo.</P>
- `isamchk'<br>
-
- Chequea, optimiza y repara tablas.
-
- <H4>Seguridad</H4>
-
- <P> El sistema de seguridad de MySQL garantiza que cada
- usuario pueda hacer las cosas que le están permitidas
- (nada más y nada menos).</P>
-
- <P>El sistema decide los diferentes privilegios dependiendo de
- "QUE USUARIO" conectado a "QUE BASE DE DATOS" desde "QUE
- HOST". El sistema de privilegios está basado, como no,
- en el contenido de 3 tablas, "USER", "HOST" y "DB" de la base
- de datos "mysql".</P>
-
- <P>Las columnas de estas 3 tablas son:</P>
-
- <CENTER>
- Database: mysql<BR>
- <TABLE bgcolor="#999999" cellspacing="0" cellpadding="10" border="1">
- <TH bgcolor="#000000"><FONT color="#ffffff">Tables</FONT></TH>
- <TR><TD>db</TD></TR>
- <TR><TD>host</TD></TR>
- <TR><TD>user</TD></TR>
- </TABLE>
- </CENTER>
- <BR><BR>
-
- <CENTER>
- Table: db<BR>
- <TABLE bgcolor="#999999" cellspacing="0" cellpadding="10" border="1">
- <TR>
- <TD bgcolor="#000000"><FONT color="#ffffff">Field </FONT></TD>
- <TD bgcolor="#000000"><FONT color="#ffffff">Type</FONT></TD>
- <TD bgcolor="#000000"><FONT color="#ffffff">Null</FONT></TD>
- <TD bgcolor="#000000"><FONT color="#ffffff">Key</FONT></TD>
- <TD bgcolor="#000000"><FONT color="#ffffff">Default</FONT></TD>
- <TD bgcolor="#000000"><FONT color="#ffffff">Extra</FONT></TD>
- </FONT>
- </TR>
-
- <TR>
- <TD> Host </TD>
- <TD> char(60) </TD>
- <TD> </TD>
- <TD> PRI </TD>
- <TD> </TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD> Db </TD>
- <TD> char(32) </TD>
- <TD> </TD>
- <TD> PRI </TD>
- <TD> </TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD> User </TD>
- <TD> char(16) </TD>
- <TD> </TD>
- <TD> PRI </TD>
- <TD> </TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD> Select_priv </TD>
- <TD> char(1) </TD>
- <TD> </TD>
- <TD> </TD>
- <TD> N </TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD> Insert_priv </TD>
- <TD> char(1) </TD>
- <TD> </TD>
- <TD> </TD>
- <TD> N </TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD> Update_priv </TD>
- <TD> char(1) </TD>
- <TD> </TD>
- <TD> </TD>
- <TD> N </TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD> Delete_priv </TD>
- <TD> char(1) </TD>
- <TD> </TD>
- <TD> </TD>
- <TD> N </TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD> Create_priv </TD>
- <TD> char(1) </TD>
- <TD> </TD>
- <TD> </TD>
- <TD> N </TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD> Drop_priv </TD>
- <TD> char(1) </TD>
- <TD> </TD>
- <TD> </TD>
- <TD> N </TD>
- <TD> </TD>
- </TR>
-
- </TABLE>
- </CENTER>
-
- <BR>
-
- <CENTER>
- Table: host <BR>
- <TABLE bgcolor="#999999" cellspacing="0" cellpadding="10" border="1">
-
- <TR>
- <TD bgcolor="#000000"><FONT color="#ffffff">Field</FONT></TD>
- <TD bgcolor="#000000"><FONT color="#ffffff">Type</FONT></TD>
- <TD bgcolor="#000000"><FONT color="#ffffff">Null</FONT></TD>
- <TD bgcolor="#000000"><FONT color="#ffffff">Key</FONT></TD>
- <TD bgcolor="#000000"><FONT color="#ffffff">Default</FONT></TD>
- <TD bgcolor="#000000"><FONT color="#ffffff">Extra</FONT></TD>
- </TR>
-
- <TR>
- <TD>Host</TD>
- <TD>char(60)</TD>
- <TD> </TD>
- <TD>PRI</TD>
- <TD> </TD>
- <TD> </TD>
- </TR>
-
-
- <TR>
- <TD>Db</TD>
- <TD>char(32)</TD>
- <TD> </TD>
- <TD>PRI</TD>
- <TD> </TD>
- <TD> </TD>
- </TR>
-
-
- <TR>
- <TD>Select_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD>Insert_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
-
-
- <TR>
- <TD>Update_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD>Delete_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD>Create_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD>Drop_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
- </TABLE>
- </CENTER>
-
- <BR>
- <CENTER>
- Table: user <BR>
- <TABLE bgcolor="#999999" cellspacing="0" cellpadding="10" border="1">
-
- <TR>
- <TD bgcolor="#000000"><FONT color="#ffffff">Field</FONT></TD>
- <TD bgcolor="#000000"><FONT color="#ffffff">Type</FONT></TD>
- <TD bgcolor="#000000"><FONT color="#ffffff">Null</FONT></TD>
- <TD bgcolor="#000000"><FONT color="#ffffff">Key</FONT></TD>
- <TD bgcolor="#000000"><FONT color="#ffffff">Default</FONT></TD>
- <TD bgcolor="#000000"><FONT color="#ffffff">Extra</FONT></TD>
- </TR>
-
- <TR>
- <TD>Host</TD>
- <TD>char(60)</TD>
- <TD> </TD>
- <TD>PRI</TD>
- <TD> </TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD>User</TD>
- <TD>char(16)</TD>
- <TD> </TD>
- <TD>PRI</TD>
- <TD> </TD>
- <TD> </TD>
- </TR>
-
-
- <TR>
- <TD>Password</TD>
- <TD>char(16)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD> </TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD>Select_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD>Insert_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
-
- <TR>
- <TD>Update_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
-
- <TR>
- <TD>Delete_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
-
- <TR>
- <TD>Create_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
-
- <TR>
- <TD>Drop_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
-
- <TR>
- <TD>Reload_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
-
- <TR>
- <TD>Shutdown_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
- <TR>
- <TD>Process_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
-
- <TR>
- <TD>File_priv</TD>
- <TD>char(1)</TD>
- <TD> </TD>
- <TD> </TD>
- <TD>N</TD>
- <TD> </TD>
- </TR>
-
-
- </TABLE>
- </CENTER>
-
- <BR>
-
- <P>Se puede decidir si se autoriza o no a seleccionar
- (<tt>SELECT</tt>), insertar (<tt>INSERT</tt>), actualizar
- (<tt>UPDATE</tt>), y borrar (<tt>DELETE</tt>) filas de una
- tabla.</P>
-
- <P>Se puede permitir, o no, crear o barrar (<tt>CREATE</tt>,
- <tt>DROP</tt>) tablas o bases de datos.</P>
-
- <P>Se pude permitir, o no, usar comandos de
- administración del gestor de bases de datos como
- "<tt>shutdown</tt>", "<tt>reload</tt>", "<tt>process</tt>",
- etc.</P>
-
- <P>Se puede siempre comprobar nuestros privilegios con el
- script "mysqlaccess".</P>
-
- <P>Un HOST debe ser un "host local", un numero IP, o una
- expresión SQL . Si en la tabla "db" la columna host
- está vacía significa "cualquier host" en la
- tabla de "host". Si en la tabla "host" o "user" la columna
- host está vacía significa que cualquier HOST
- puede crear una conexión TCP con vuestro servidor.</P>
-
- <P>Db es el nombre de una base de datos.</P>
-
- <P>Una columna "<tt>USER</tt>" vacía significa
- cualquier nombre de usuario.</P>
-
-
-
- <H4>Primeros Pasos</H4>
-
- <P>La forma más rápida de arrancar el servidor
- es ejecutando:</P>
- <pre>
- mysql.server start<BR>
- </pre>
-
- y para pararla:<BR>
-
- <pre>
- mysql.server stop
- </pre>
-
- <P>Se puede realizar lo mismo ejecutando el script
- <tt>safe_mysql</tt> como indica en la guía de
- instalación, aunque al final, de una forma o de otra,
- se ejecuta el fichero "mysqld".</P>
-
- <P>Es necesaria, como se pude suponer, arrancar el servidor
- para realizar cualquier operación con la base de datos,
- una vez realizado esto se pueden ejecutar varios comando para
- comprobar que el arranque del servidor ha sido correcto como,
- por ejemplo, "mysqladmin" cuyo formato completo
- será:</p>
- <pre>
- mysqladmin [OPCIONES] comando comando
- </pre>
- <P> donde <tt>OPCIONES</tt> puede ser:</P>
-
- <table>
- <tr>
- <td> <tt>-f, --force</tt></td><td> No realiza la pregunta para confirmar al
- borran una tabla.</td>
- <tr>
- <td> <tt>-?, --help</tt></td><td> Visualiza esta ayuda .
- <tr>
- <td> <tt>-h, --host=#</tt> </td><td>Conexión con el host.
- <tr>
- <td> <tt>-p, --password[=...]</tt> </td><td> Palabra de paso para la conexión al
- servidor
- <tr>
- <td> <tt>-P --port=...</tt></td><td> Numero de puerto a usar en la conexión.
- <tr>
- <td> <tt>-S --socket=...</tt> </td><td>Fichero Socket para usar en la conexión.
- <tr>
- <td> <tt>-u, --user=#</tt></td><td> Usuario de conexión si no es el usuario actual.
- <tr>
- <td> <tt>-V, --version</tt></td><td> Información sobre la versión actual .<DT>
- </tr>
- </table>
-
-
-
- <P>donde <tt>Comando</tt> puede ser uno o más de:</P>
-
- <UL>
- <li><tt>create nombre_base_de_datos</tt> <br> Crea una nueva
- base de datos</li>
-
- <LI><tt>drop nombre_de_base_de_datos</tt> <BR> Borra una base
- de datos y todos sus tablas
-
- <LI> <tt>kill identificador_de_procesos</tt> <BR> "mata " un
- proceso mysql
-
- <LI> <tt>processlist</tt> <BR> Muestra una lista de los
- procesos que se ejecutan en el servidor
-
- <LI> <tt>shutdown</tt> <BR> Para al servidor
-
- <LI> <tt>status</tt> <BR> Obtiene un mensaje del estado del
- servidor
-
- <LI><tt>version</tt> <BR> Obtiene la versión del
- servidor
-
- </DL>
-
-
- <P>así que, ejecutando:</P>
-
- <pre>
- mysqladmin create nuevabasededatos<BR>
- </pre>
-
- <P>crearemos una nueva base de datos cuyo nombre será
- "nuevabasededatos" </P>
-
- <P>podremos ver los procesos que se están ejecutando en
- el servidor con </P>
- <pre>
- mysqladmin processlist <BR>
- </pre>
-
- <P>Otro comando importante es el mysqlshow que nos permite ver
- las bases de datos que existen, por ejemplo, si ejecutamos el
- comando tal cual:</P>
- <pre>
- mysqlshow
- </pre>
-
- <P> nos mostrará como resultado:</P>
- <PRE>
- +-----------+
- | Databases |
- +-----------+
- | mysql |
- | personas |
- | test |
- +-----------+
- </PRE>
- <BR> <A name="section5"></A><H3>Lenguaje SQL en MySQL</H3>
-
- <P>Como idicamos en la introducción, este servidor de
- bases de datos está considerada como las más
- rápida entres las de sus misma categoría tanto
- para volúmenes de datos grandes como pequeños,
- pero como también indicamos al principio es a base de
- no implementar ciertos aspectos de las especificación
- SQL éstos aspectos, que a mi entender, son importantes
- son por una lado los Triggers y por otro lado la Lógica
- Transaccional.</P>
-
-
- <P>Los triggers no es nada más que una porción
- de código almacenado que se "dispara" o se ejecuta
- cuando se realiza una operación ( actualización,
- borrado, etc.) con la base de datos. Naturalmente comprobar
- la propia existencia de disparador y ejecutarlo si existe
- consume recursos y tiempo y es como su propio manual indica,
- la única razón por la que los triggers no
- están soportados.</P>
-
- <P>Un aspecto muy importante en cualquier base de datos
- relacional es la consistencia de las diferentes tablas que la
- componen, para conseguir esto de una forma más o menos
- fácil es utilizando la "Lógica Transaccional" ,
- será el propio gestor de base de datos el que
- proporcione mecanismos de bloqueo de ficheros y
- consolidación o retroceso en la operaciones con las
- tablas. Pues bien Mysql no soporta las transacciones en aras
- simplemente de la velocidad (o por lo menos así lo
- indican en sus comentarios) , sólo nos podemos ayudar
- con los comandos LOCK tables /UNLOCK tables que permiten
- bloquear tablas impidiendo que otros usuarios puedan acceder a
- ellas pero sin la posibilidad de deshacer las operaciones
- realizadas con los datos.</P>
-
- <P>Teniendo en cuenta estas restricciones en la
- utilización del servidor a continuación veremos
- como implementamos algunos comandos SQL, no con el objetivo de
- analizar los comandos, sino ver como éstos se
- implementan en este Gestor de bases de datos
- </P>
-
- <P>Una vez que tenemos el servidor arrancado ya no nos queda
- nada más que enviarle instrucciones para realizar las
- operaciones que deseemos. Como ejemplo veremos la
- creación de una base de datos "personas" que
- está constituida por tres tablas "clientes"
- "provincias" y "municipios". Es un ejemplo muy simple y sin
- ninguna utilidad pero nos ayudará en un ejemplo real
- como podemos manipular la base de datos. En primer lugar,
- diremos que éstas operaciones podemos realizarlas de
- varias formas: una de ellas sería atreves de una API en
- C , C++, JAVA o por medio de una ODBC si estuviéramos
- trabajando en Windows95 (con perdón) o también
- podríamos realizarlo con la shell de la propia
- instalación. Ésta última forma no parece
- más apropiada para nuestro articulo ya que no tenemos
- que describir las particularidades de los distintos lenguajes
- de programación.</P>
-
- <P>La shell de Mysql podemos arrancarla ejecutando</P>
- <pre>
- mysql nombrebasedatos
- </pre>
- <BR>
-
- <P>y se nos presentará el prompt de la shell, con lo
- cual podemos enviar comandos al servidor.</P>
-
- <P>Asimismo podemos ejecutar la shell en modo "batch" o
- diferido ejecutando:</P>
- <pre>
- mysql -e("comando SQL .... ") nombre_base_datos<BR>
- </pre>
-
- <P>con lo que conseguiremos enviar el comando SQL al
- servidor.</P>
-
- <P>Para nuestro ejemplo hemos creado una base de datos llamada
- "personas"con el comando</P>
- <pre>
- mysqladmin create personas<BR>
- </pre>
- <BR>
- <P>Arrancaremos la shell con el comando</P>
- <pre>
- mysql personas
- </pre>
-
- <P>y ya desde la shell podemos enviar comandos al propio
- servidor , como por ejemplo, que nos enseñe las tablas
- de la bases de datos con la que hemos arrancado la shell:</P>
- <BR>
- <pre>
- > show tables /g<BR>
- </pre>
-
- <P>y el sistema nos responderá con:</P>
- <pre>
- Database: personas<BR>
- +-------------+
- | Tables |
- +-------------+
- | clientes |
- | municipios |
- | provincias |
- +-------------+
- </PRE>
-
- <P>Todos los comandos que enviamos al servidor desde la shell
- siempre acabarán con /g que es la forma de indicar el
- fin de comando y el envío de este al servidor para que
- lo ejecute.</P>
-
- <P>Naturalmente, antes de que el sistema nos devuelva esta
- información, hemos tenido que crear las tablas con los
- correspondiente comandos CREATE , los cuales tendrán un
- aspecto como:</P>
-
-
- <pre>
- CREATE TABLE clientes
- (NIF CHAR(9) NOT NULL PRIMARY KEY,
- Nombre CHAR(15) NOT NULL,
- Apellidos CHAR(35) NOT NULL,
- Direccion CHAR(50) NOT NULL,
- Poblacion INT(5) NOT NULL,
- Provincia INT(2) NOT NULL,
- Telefono INT(9),
- Fecha_Alta DATE NOT NULL) /g
-
- CREATE TABLE provincias
- (Cod_provincia INT(2) NOT NULL PRIMARY KEY,
- Descripcion_p CHAR(30) NOT NULL) g
-
- CREATE TABLE municipios
- (Cod_provincia INT(2) NOT NULL,
- Cod_municipio INT(3) NOT NULL,
- Descripcion_m CHAR(30) NOT NULL,
- PRIMARY KEY(Cod_provincia,Cod_municipio)) /g
- </pre>
- <BR>
-
-
- <P>Si a continuación ejecutamos:
- </P>
- <pre>
- > show colums from clientes from personas /g
- > show columns from provincias from personas /g
- > show columns from municipios from personas /g
- </pre>
-
- <P>obtendremos respectivamente:</P>
-
- <PRE>
- Database: personas Table: clientes Rows: 4
- +--------------+----------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +--------------+----------+------+-----+---------+-------+
- | NIF | char(9) | |PRI | | |
- | Nombre | char(15) | YES | | | |
- | Apellidos | char(35) | | | | |
- | Direccion | char(50) | | | | |
- | Poblacion | int(5) | | | 0 | |
- | Provincia | int(2) | | | 0 | |
- | Telefono | int(9) | YES | | | |
- | Fecha_Alta | date | YES | | | |
- +--------------+----------+------+-----+---------+-------+
- </PRE>
-
- <PRE>
- Database: personas Table: provincias Rows: 3
- +-----------------+----------+------+-----+---------+-------+
- | Field | Type | Null | Key| Default | Extra |
- +-----------------+----------+------+-----+---------+-------+
- | Cod_provincia | int(2) | | PRI | 0 | |
- | Descripcion_p | char(30) | | | | |
- +-----------------+----------+------+-----+---------+-------+
- </PRE>
-
- <PRE>
- Database: personas Table: municipios Rows: 9
- +------------------+----------+------+-----+---------+-------+
- | Field | Type | Null | Key| Default | Extra |
- +------------------+----------+------+-----+---------+-------+
- | Cod_provincia | int(2) | | PRI | 0 | |
- | Cod_municipio | int(3) | | PRI | 0 | |
- | Descripcion_m | char(30) | | | | |
- +------------------+----------+------+-----+---------+-------+
- </PRE>
-
- <P>El siguiente paso sería introducir datos a cada una
- de las tablas, vamos ha utilizar el comando INSERT puro del
- SQL sin que intervenga ningún lenguaje de
- programación ni rutina ni API:</P>
-
-
- <P>Para insertar un registro en la tabla de clientes,
- municipios y provincias lo realizaremos respectivamente
- como:</P>
-
- <FONT size=-1>
- <pre>
- INSERT INTO clientes VALUES
- ("5316828K","PEDRO","ROMERO
- DIAZ","C/ HOLA 9 ",29003,29,911111111,19980203)
- /g
-
- INSERT INTO municipios VALUES
- (28,001,"Fuenlabrada")
- /g
-
- INSERT INTO provincias VALUES
- (08,"Barcelona")
- /g
- </pre>
- </FONT>
-
-
- <P>Y finalmente, terminaremos nuestro recorrido por los
- comandos SQL realizando selecciones de los filas que hemos
- introducido en las tablas creadas anteriormente dentro de la
- base de datos que hemos creado para el ejemplo de este
- articulo. Seleccionaremos registros de las tabla de cliente
- variando la condición se selección y una primera
- selección de la tabla de municipios:</P>
-
- <font size=-1>
- <pre>
- > SELECT ALL
- Cod_provincia, Cod_municipio, Descripcion_m from municipios
- where Cod_provincia = 28 /g
-
- Cod_provincia Cod_municipio Descripcion_m
- 28 1 Fuenlabrada
- 28 2 Pozuelo
- 28 3 Madrid
-
-
-
- > SELECT ALL
- NIF,Nombre,Apellidos,Direccion from clientes
- where Poblacion = 28001
-
- NIF Nombre Apellidos direccion
- 2416728U JOSE FERNANDEZ ROMERO C/ FELIZ 1 3G
-
- > SELECT ALL NIF,Nombre,Apellidos,Direccion from clientes
- where Provincia = 29
-
- NIF Nombre Apellidos direccion
- 23198623N JUAN ANDRES RUIZ MORALES C/ CATEDRAL 12 2B
- 5316828K PEDRO ROMERO DIAZ C/ HOLA 9
- 52312844J LUIS ALBERTO LISTO JIMENEZ C/ ROSA DE LOS VIENTOS 129 3I
- </PRE>
-
- </FONT>
-
- <A name="section6"></A><H3>Conclusiones</H3>
-
- <P>Como comentaba al principio del artículo, el
- objetivo que seguía era simplemente mostrar el
- funcionamiento y ver las características fundamentales
- de una implementación en concreto de un servidor de
- bases de datos SQL , pero no solo quería indicar una
- sería de recetas y comandos para poder utilizarlo, sino
- que pretendía realizar un estudio de las posibilidades
- y carencias que podía tener este software , sobretodo
- porque conociendo a fondo un producto podemos obtener el
- máximo rendimiento de éste, utilizándolo
- en aquellos aspectos en los que más potenciados
- están. Este es el caso de este gestor de bases de
- datos, ya que considero que la no implementación de los
- triggers y la lógica transaccional hace muy complicado
- el manejo de datos (inserciones, modificaciones, borrado de
- registros) desde aplicaciones multiusuarios y utilizando
- multitud de tablas relacionas entre si. Aunque pienso que,
- para aplicaciones donde se pretenda realizar consultas muy
- rápidas a bases de datos muy grandes, sería
- recomendable éste servidor (teniendo siempre como
- referencia la versión semi-free de este servidor)</P>
-
- <P>Indicar para concluir que la base de este articulo la he
- obtenido de la propia documentación Mysql, que la
- considero bastante completa, de algunos artículos de
- revistas especializadas así como de un amarillento
- manual de "auto-estudio" de IBM sobre SQL.</P>
-
-
-
-
- </TD>
- </TR>
- </TABLE>
-
-
- <!-- ARTICLE FOOT -->
- <BR clear="all">
- <CENTER>
- <TABLE width="95%">
-
- <TR>
- <TD align="center" bgcolor="#666666">
- <FONT color="#ffffff">
- Páginas web mantenidas por Miguel Ángel Sepúlveda<BR>
- © Jose M. Fernández 1998<BR>
- <B>LinuxFocus 1998</B>
- </FONT>
- </TD>
- </TR>
-
- </TABLE>
- </CENTER>
-
-
-
- </BODY>
-
- </HTML>
-