2. Acceso a un servidor MYSQL
2. Acceso a un servidor MYSQL Dataprix 2 October, 2009 - 10:37En este apartado veremos las distintas formas de acceso a un servidor MySQL existente que nos proporciona el propio SGBD. El acceso desde lenguajes de programación o herramientas en modo gráfico se tratará en otros apartados.
2.1. Conectandose con el servidor
2.1. Conectandose con el servidor Dataprix 2 October, 2009 - 11:04Para conectarse con el servidor deberemos asegurarnos de que éste está funcionando y de que admite conexiones, sean éstas locales (el SGBD se está ejecutando en la misma máquina que intenta la conexión) o remotas.
Adicionalmente, deberemos disponer de las credenciales necesarias para la conexión. Distintos tipos de credenciales nos permitirán distintos niveles de acceso. Para simplificar, supondremos que disponemos de las credenciales (usuario y contraseña) del administrador de la base de datos (normalmente, usuario root y su contraseña). En el apartado que concierne a la administración de MySQL, se comenta detalladamente los aspectos relacionados con el sistema de usuarios, contraseñas y privilegios del SGBD.
2.1.1. Servidores y clientes
2.1.1. Servidores y clientes Dataprix 2 October, 2009 - 11:28Nota |
El servidor MySQL es mysqld. A él se pueden conectar múlti- ples clientes. mysql es el cliente en modo texto que proporcio- na el propio SGBD. |
El servidor MySQL es el servicio mysqld, que puede recibir solicitudes de clientes locales o remotos a través TCP/IP, sockets o pipes en forma de ficheros locales a la máquina en que se está ejecutando. En la distribución se incluye un cliente llamado mysql-client, al que en adelante nos referiremos simplemente como mysql (así es como se llama el programa ejecutable). Si se invoca sin parámetros, mysql realiza una conexión al servidor local utilizando el nombre del usuario UNIX que lo ha invocado, y supone que este usuario no requiere contraseña. La conexión a un servidor remoto y un nombre de usuario específicos requiere de al menos dos argumentos:
• -h para especificar el nombre del servidor.
• -u para el nombre del usuario.
Para que el programa cliente pregunte la contraseña de conexión al usuario, deberemos proporcionar adicionalmente el parámetro -p.
$ mysql -h servidor.misitio.org -u -p
2.1.2. Conectarse y desconectarse
2.1.2. Conectarse y desconectarse Dataprix 2 October, 2009 - 11:37Nota |
Los usuarios del sistema operativo y los de MySQL no son los mismos, aunque el administrador de MySQL (con fines prácticos) pueda utilizar los mismos nombres para las uentas de los usuarios MySQL. |
Si se tiene algún problema para realizar la conexión, es necesario consultar con el administrador del sistema, que nos proporcionará un nombre de usuario, contraseña y el nombre del servidor, según sea necesario, y nos informará de las restricciones que tiene nuestra cuenta.
La administración y seguridad de MySQL está diseñada sobre un esquema de usuarios y privilegios. Los usuarios deben ser creados por el administrador con sus respectivos privilegios y restricciones. Es el administrador quien decide si los nombres de los usuarios de MySQL se corresponden o no a los del sistema operativo.
Apariencia de mysql al ingresar en el modo interactivo:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5 to server version: 3.23.49-log
Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer.
mysql>
Con el comando help obtenemos una serie de opciones (veremos las más utilizadas).
Para salir del cliente podemos escribir ’\q’ o ‘quit’:
mysql> quit;
Tanto para el comando quit como para el comando help, el punto y coma al final es opcional.
2.2. Introduccion de sentencias
2.2. Introduccion de sentencias Dataprix 2 October, 2009 - 11:49Sentencias |
Las sentencias en mysql pueden abarcar múltiples líneas y terminan con punto y coma. |
El cliente de MySQL en modo interactivo nos permite tanto la introducción de sentencias SQL para trabajar con la base de datos (crear tablas, hacer consultas y ver sus resultados, etc.) como la ejecución de comandos propios del SGBD para obtener información sobre las tablas, índices, etc. o ejecutar operaciones de administración.
2.2.1. Sentencias
2.2.1. Sentencias Dataprix 2 October, 2009 - 11:55A continuación presentamos una ejecución de la sentencia select con cuatro columnas de datos:
En esta consulta se solicita, a través de funciones incorporadas en el SGBD, el nombre del usuario actual de MySQL, el número de conexión al servidor, la versión del servidor y la base de datos en uso. Las funciones se reconocen por los paréntesis al final. mysql entrega sus resultados en tablas, en la que el primer renglón son los encabezados de las columnas. Es importante no dejar espacio entre el nombre de una función y los paréntesis, de otro modo, mysql marcará un mensaje de error.
La última línea entregada por mysql informa sobre el número de filas encontrado como resultado de la consulta y el tiempo estimado que llevó su realización. Esta medida de tiempo no se debe considerar muy precisa para medir el rendimiento del servidor, se trata simplemente de un valor aproximado que puede verse alterado por múltiples factores.
Observamos que la columna con el nombre de la base de datos actual esta vacía. Esto es natural, ya que no hemos creado aún ninguna base de datos ni le hemos indicado al gestor sobre cuál queremos trabajar.
2.2.2. Comandos en multiples lineas
2.2.2. Comandos en multiples lineas Dataprix 2 October, 2009 - 12:14Los comandos pueden expandirse en varias líneas por comodidad, sobre todo al escribir largas sentencias SQL. El cliente no enviará la sentencia SQL al servidor hasta encontrar el punto y coma, de este modo, el comando anterior puede escribirse así:
Obsérvese el indicador de mysql que se transforma en ->, signo que significa que el comando aún no está completo. También pueden escribirse varios comandos en una sola línea, cada uno debe llevar su respectivo punto y coma:
Se ejecutarán en el orden que están escritos. Los comandos se pueden cancelar con la combinación \c, con lo que el cliente nos volverá a mostrar el indicador para que escribamos de nuevo la sentencia.
Indicador | Significado |
mysql> | Espera una nueva sentencia |
-> | La sentencia aún no se ha terminado con ; |
“> | Una cadena en comillas dobles no se ha cerrado |
'> | Una cadena en comillas simples no se ha cerrado |
2.2.3. Cadenas de caracteres
2.2.3. Cadenas de caracteres Dataprix 2 October, 2009 - 13:29Las cadenas de caracteres pueden delimitarse mediante comillas dobles o simples. Evidentemente, deben cerrarse con el mismo delimitador con el que se han abierto.
mysql> select “Hola mundo”,’Felicidades’;
y pueden escribirse en diversas líneas:
mysql> select “Éste es un texto
“> en dos renglones”;
Al principio, es común olvidar el punto y coma al introducir un comando y, también, olvidar cerrar las comillas. Si éste es el caso, hay que recordar que mysql no interpreta lo que está entre comillas, de tal modo que para utilizar el comando de cancelación ’\c’ es preciso antes cerrar las comillas abiertas:
mysql> select “Éste es un texto
“> \c
“> “ \c
mysql>
2.2.4. Expresiones y variables
2.2.4. Expresiones y variables Dataprix 5 October, 2009 - 09:56MySQL dispone de variables de sesión, visibles únicamente durante la conexión actual. Éstas pueden almacenar valores de tipos enteros, flotantes o cadenas, pero no tablas. Se definen como en el siguiente ejemplo:
mysql> select @x := 1;
La variable local @x tiene ahora el valor 1 y puede utilizarse en expresiones:
Las variables locales permiten almacenar datos entre consultas y, en la práctica, es recomendable utilizarlas exclusivamente con este fin, por ejemplo:
2.2.5. Expresiones
2.2.5. Expresiones Dataprix 5 October, 2009 - 10:22Hay que tener cuidado con el uso de las variables locales por los motivos siguientes:
Nota |
El comando do evalúa expresiones sin mostrar los resultados en pantalla. Se puede evaluar cualquier expresión que admite el comando select. |
• Se evalúan en el servidor al ser enviadas por el cliente.
• Se realizan conversiones de tipo implícitas.
mysql> do @ingreso := now();
Las variables no requieren declaración y, por omisión, contienen el valor NULL que significa “ausencia de valor”, observad en la siguiente consulta los resultados de utilizar valores nulos:
Nota |
En una expresión donde cualquiera de sus elementos sea NULL, automáticamente entregará como resultado el valor NULL. |
La razón de este comportamiento es que no es posible realizar ninguna operación cuando se desconoce algún valor. La entrada de valores NULL siempre significará salida de valores NULL.
2.3. Proceso por lotes
2.3. Proceso por lotes Dataprix 5 October, 2009 - 11:14MySQL puede procesar por lotes las sentencias contenidas en un archivo de texto. Cada sentencia deberá terminar en ';' igual que si la escribiéramos en el cliente. La sintaxis es la siguiente:
$ mysql -u juan -h servidor.misitio.org -p < demo.sql
En este caso, se realizará una conexión con el servidor, nos pedirá la contraseña del usuario ‘juan’ y, si ésta es correcta, ejecutará los comandos incluidos en el archivo demo.sql, uno a uno y por el mismo orden. Imprimirá los resultados (o errores) en la salida estándar (o de error) y terminará. De este modo evitaremos la molestia de procesarlos uno por uno de forma interactiva.
Otra forma de procesar un archivo es mediante el comando source desde el indicador interactivo de MySQL:
mysql> source demo.sql
El archivo demo.sql crea una nueva base de datos.
El usuario debe tener permisos para crear bases de datos si quiere que sea procesado el archivo demo.sql. Si el administrador crea la base de datos por nosotros, será necesario editarlo, comentando la línea donde se crea la base de datos con el símbolo ’#’ al inicio:
# create database demo;
Es necesario procesar el contenido del fichero demo.sql tal como los transcribimos aquí, con el fin de poder realizar los ejemplos del resto del apartado. Si se observa su contenido, posiblemente muchas cosas se expliquen por sí mismas, de cualquier manera, serán explicadas en este apartado. También pueden ejecutarse sus órdenes en el cliente directamente.
Contenido del fichero demo.sql
#dropdatabase demo;
create database demo;
use demo;
---
--- Estructura de la tabla productos
---
create table productos (
parte varchar(20),
tipo varchar(20) ,
especificación varchar(20) ,
psugerido float(6,2),
clave int(3) zerofill not null auto_increment,
primary key (clave)
);
insert into productos (parte,tipo,especificación,psugerido) values
('Procesador','2 GHz','32 bits',null),
('Procesador','2.4 GHz','32 bits',35),
('Procesador','1.7 GHz','64 bits',205),
('Procesador','3 GHz','64 bits',560),
('RAM','128MB','333 MHz',10),
('RAM','256MB','400 MHz',35),
('Disco Duro','80 GB','7200 rpm',60),
('Disco Duro','120 GB','7200 rpm',78),
('Disco Duro','200 GB','7200 rpm',110),
('Disco Duro','40 GB','4200 rpm',null),
('Monitor','1024x876','75 Hz',80),
('Monitor','1024x876','60 Hz',67)
;
--
-- Estructura de la tabla 'proveedor'
--
create table proveedores (
empresa varchar(20) not null,
pago set('crédito','efectivo'),
primary key (empresa)
);
--
-- Valores de la tabla 'proveedor'
--
insert into proveedores (empresa,pago) values
('Tecno-k','crédito'),
('Patito','efectivo'),
('Nacional','crédito,efectivo')
;
create table ganancia(
venta enum('Por mayor','Por menor'),
factor decimal(2,2)
);
insert into ganancia values
('Por mayor',1.05),
('Por menor',1.12)
;
create table precios (
empresa varchar(20) not null,
clave int(3) zerofill not null,
precio float(6,2),
foreign key (empresa) references proveedores,
foreign key (clave) references productos
);
insert into precios values
('Nacional',001,30.82),
('Nacional',002,32.73),
('Nacional',003,202.25),
('Nacional',005,9.76),
('Nacional',006,31.52),
('Nacional',007,58.41),
('Nacional',010,64.38),
('Patito',001,30.40),
('Patito',002,33.63),
('Patito',003,195.59),
('Patito',005,9.78),
('Patito',006,32.44),
('Patito',007,59.99),
('Patito',010,62.02),
('Tecno-k',003,198.34),
('Tecno-k',005,9.27),
('Tecno-k',006,34.85),
('Tecno-k',007,59.95),
('Tecno-k',010,61.22),
('Tecno-k',012,62.29)
;
Si se desea llevar un registro de todas las operaciones de una sesión, se puede utilizar la expresión siguiente; de este modo se guardarán todos los comandos y sus resultados en archivo_registro.txt:
mysql> tee archivo_registro.txt
Para cancelar la captura, basta con teclear lo siguiente:
mysql> notee
2.4. Usar bases de datos
2.4. Usar bases de datos Dataprix 5 October, 2009 - 12:05La siguiente consulta informa sobre la base de datos actualmente en uso.
El campo esta vacío porque no estamos haciendo uso de ninguna base de datos. Para ver las bases de datos existentes en el sistema, se debe efectuar la siguiente consulta:
MySQL nos muestra el listado de las bases de datos definidas en el servidor. Debe aparecer la base de datos demo que creamos con el archivo demo.sql. Para poder trabajar con ella, tenemos que abrirla:
mysql> use demo;
use |
El comando use base_de_datos permite abrir una base de datos para su uso. |
Nota
Es posible realizar consultas en una base de datos sin utilizar el comando use, en ese caso, todos los nombres de las tablas deben llevar el nombre de la base de datos a que pertenecen de la forma: demo.productos.
Otra posibilidad consiste en proporcionar el nombre de la base de datos al iniciar una sesión interactiva con mysql:
$ mysql demo -u juan -p
La consulta de las tablas que contiene la base de datos demo se realiza con la sentencia show de la siguiente manera:
Nota |
El comando show es útil para mostrar información sobre las bases de datos, tablas, variables y otra información sobre el SGBD. Podemos utilizar help show en el intérprete de comandos para obtener todas las variantes de esta sentencia. |
Asimismo, podemos consultar las columnas de cada una de las tablas:
Para crear una nueva base de datos usaremos la sentencia create database:
mysql> create database prueba;
Para eliminar una base de datos, usaremos la sentencia dropdatabase:
mysql> dropdatabase prueba;
MySQL es sensible al uso de mayúsculas y minúsculas, tanto en la definición de bases de datos, como de tablas o columnas.