Sei sulla pagina 1di 34

Capı́tulo 3

Creación y administración de
bases de datos en MySQL

3.1. Creación de bases de datos y usuarios


El sistema de bases de datos de MySQL admite una gran cantidad de
bases de datos diferentes. Estas serán guardadas fı́sicamente en forma de
directorio en el sistema de archivos del sistema operativo subyacente. Las
tablas se almacenarán en forma de archivos en ese directorio.

3.1.1. Creación de la base de datos


Esta es la parte más simple de toda la implementación. Tendremos que
escribir la siguiente secuencia en el sı́mbolo de comandos de MySQL:

mysql>create database nombreBase;

Sustituiremos el parámetro nombreBase por el nombre de la base de da-


tos que queramos crear para almacenar nuestra información. Una vez que
hayamos introducido esta secuencia, deberı́a aparecer una respuesta como la
siguiente:

Query OK, 1 row affected (0.05 sec)

Este mensaje indica que la base de datos se ha creado de una manera


correcta. Si no la llegamos a obtener, deberı́amos comprobar si hemos incluido
el punto y coma al final de la lı́nea. Este es un elemento bastante facil de
olvidar que tiene una gran importancia para MySQL, con él, indicamos la

1
ejecución de dicho comando.
Ahora que ya sabemos como crear una base de datos, vamos a exponer un
ejemplo para que todo quede más claro.

Figura 3.1: Creación de la base de datos

3.1.2. Uso de la base de datos


El primer paso tras iniciar la sesión en MySQL es escoger que base de da-
tos usaremos mientras estamos trabajando. Para ello teclearemos la siguiente
secuencia de palabras:

mysql>use nombreBase;

Cuando decimos nombreBase nos estamos refiriendo a la base de datos


con la que deseemos trabajar. Existe otro lugar donde seleccionar un banco
de datos, al conectarnos al sistema con el comando mysql. Añadiremos a
nuestra orden el nombre de la siguiente manera:

mysql -D nombreBase -h nombrehost -u nombreusuario -p

La única diferencia que podemos encontrar entre ambos comandos es la


forma de indicarnos la existencia del banco seleccionado. En el primer caso,
recibiremos una respuesta donde se nos informará del cambio producido:

Database changed

En el otro caso, solo sabremos si hemos escogido bien cuando no reciba-


mos información alguna por parte de la máquina. Veamoslo más claramente

2
en dos ejemplos simples.

Figura 3.2: Selección de la base de datos en conexión

Figura 3.3: Selección de la base de datos

3.1.3. Creación de usuario


Un sistema MySQL puede tener un elevado número de usuarios. Gene-
ralmente solo debemos entrar al sistema como el usuario root para realizar
alguna función administrativa, por razones de seguridad principalmente. Para
saber exactamente que realiza cada usuario de MySQL, es muy aconsejable
crear una nueva cuenta con su correspondiente contraseña para cada uno.
También serı́a recomendable aconsejar a los usuarios que seleccionaran cuen-
tas diferentes a las usadas en el sistema operativo.

Dado que la sintaxis seguida para crear usuarios tiene muchı́sima relación
con la asignación de prvilegios, vamos a explicar como crearlos en la siguiente
sección del tema.

3
3.2. Control de privilegios
Uno de los aspectos más interesantes de MySQL serı́a su mejorado siste-
ma de privilegios.
Definiremos privilegio como la capacidad que se le concede a un usuario para
poder realizar cierta operación sobre un determinado objeto. Es un concepto
muy parecido a los permisos.
A la hora de crear un usuario para nuestro sistema, si nosotros somos los
creadores deberemos especificar que serie de cosas podrá hacer y que otras
cosas no podrá. Es lo que se conoce como definir los privilegios del usuario.

3.2.1. Principio de asignación del privilegio más bajo


Es un principio que surge para mejorar la seguridad de los sistemas in-
formáticos actuales.
Ciertamente es bastante simple, casi nunca se tiene en cuenta y debido a
esto, baja la seguridad.
Lo podrı́amos enunciar de esta manera:
• Un usuario (o proceso) deberı́a disponer del nivel más bajo de privile-
gios necesarios para poder realizar la tarea que se le asigne.
Aunque estemos ahora tratando sobre las bases de datos, este princi-
pio siempre puede ser bueno trasladarlo a otros campos. Por ejemplo, si un
usuario estuviese trabajando con un programa de cierta importancia para
una empresa, no hace falta que este posea privilegios de administrador si
luego solo necesita los mı́nimos para realizar su labor.
Por tanto, la conclusión a obtener es que solo debemos asignar a los usuarios
los privilegios necesarios.

3.2.2. Configuración de usuarios: el comando GRANT


Los comandos GRANT y REVOKE permiten a los adminitradores de
sistemas crear cuentas de usuario MySQL y darles permisos y quitarlos de
las cuentas. Los permisos pueden darse en varios niveles:
∗ Nivel global. Los permisos globales se aplican a todas las bases de datos
de un servidor dado.
∗ Nivel de base de datos. Los permisos de base de datos se aplican a todos
los objetos en una base de datos dada.

4
∗ Nivel de tabla. Los permisos de tabla se aplican a todas las columnas
en una tabla dada.

∗ Nivel de columna. Los permisos de columna se aplican a columnas en


una tabla dada.

La sintaxis general del comando GRANT es la siguiente:

GRANT privilegios [columnas]

ON elemento

TO nombreusuario [IDENTIFIED BY ’contraseña’]

[WITH GRANT OPTION]

Las cláusulas incluidas entre los corchetes son opcionales y en caso de po-
nerlos no estarı́an dentro de los corchetes. No deberemos olvidar colocar
al final de la orden el ”;”para que MySQL pueda procesarla con
normalidad.
Como la orden GRANT está compuesta de varios elementos claves, explica-
remos de una manera detallada cual es la finalidad de cada uno de ellos:

• Privilegios. Aquı́ colocarı́amos los privilegios que quisieramos conceder-


le a la persona en cuestión, sin olvidar que estos deberı́amos separarlos
por comas. Estos privilegios serán detallados próximamente.

• Columnas. Su misión es especificar privilegios para una columna. Pode-


mos indicar una sola columna o una lista de ellas aunque como siempre,
separadas por coma.

• Elemento. Al decir elementos nos estamos refiriendo a los objetos exis-


tentes en el banco de datos, a los cuales, se aplican estos privilegios.
Podemos conceder privilegios globales (toda la base de datos), usando
*.* . Si en cambio queremos asignarlos sobre todas las tablas de una
base de datos (Nivel de base de datos) escribiremos nombreBase.* .

• NombreUsuario. Aquı́ escribiremos el nombre de usuario que recibirá es-


tas capacidades para operar sobre los elementos anteriores.

• Contraseña. Es la clave que deseamos utilizar para que el individuo


inicie la sesión en el sistema. A la hora de seleccionar la contraseña,
tendremos en cuenta una serie de normas para la correcta creación de

5
la misma. Es decir, siempre intentaremos que esta clave sea una mezcla
entre caracteres en mayúscula, minúscula y números variados.

• WITH GRANT OPTION. Esta opción nos da vı́a libre para que una
vez concecido el permiso, este que lo reciba lo pueda conceder a otros
usuarios.

3.2.3. Tipos de privilegios


Analizando detenidamente los tipos existentes, llegamos a la conclusión
de que existen tres tipos básicos en MySQL: los privilegios apropiados pa-
ra su concesión a los usuarios habituales, los privilegios apropiados para su
concesión a los administrador y dos privilegios especiales.Podemos asignar-
los a cualquier usuario, pero es aconsejable restringirlos según el nivel al que
pertenezca el receptor. Solo concederemos a los usuarios aquellos permisos
mı́nimos necesarios para poder trabajar con la base de datos y sus tablas.
No daremos acceso a la base de datos mysql si no estamos tratando con un
administrador. En esta base de datos se almacenan toda la información im-
portante del sistema.

3.2.4. El comando REVOKE


Al hablar del comando REVOKE, estamos explicando el comando opues-
to a GRANT. Con él, conseguiremos retirar todos aquellos privilegios que
han sido concedidos a usuarios de la base de datos. Su sintaxis es muy simi-
lar a la de GRANT:

REVOKE privilegios [columnas]

ON elemento

FROM nombreusuario

En la siguiente sección del tema, vamos a mostrar unas serie de ejem-


plo donde podremos ver cláramente el uso y la sintaxis de ambas órdenes
anteriormente enseñadas.

6
Privilegio Se aplica a Descripción
SELECT tablas y columnas Nos concede la posibilidad de seleccio-
nar ciertas filas (registros) de una de-
terminada tablas.
INSERT tablas y columnas Con este privilegio podremos insertar
sin problema sobre la tabla permitida.
UPDATE tablas y columnas Deja a los usuarios modificar valores de
filas pertenecientes a una tabla deter-
minada.
DELETE tablas Gracias a esta capacidad, podremos eli-
minar elementos de unas tablas fijadas
en el momento de la concesión.
INDEX tablas Con este privilegio cada usuario que lo
posea, podrá crear y eliminar los ı́ndi-
ces definidos sobre ciertas tablas.
ALTER tablas Con él, podemos alterar la estructu-
ra de tablas existentes agregando, por
ejemplo, columnas, cambiando el nom-
bre de las columnas o de las tablas y
modificando los tipos de datos de las
columnas.
CREATE bases de datos y tablas Gracias a este elemento, el usuario
podrá crear tablas y bases de datos.
DROP bases de datos y tablas Es la capacidad contraria a la anterior.
Nos permite eliminar tablas y bases de
datos.

Cuadro 3.1: Privilegios para usuarios.

7
Privilegio Descripción
RELOAD Deja al administrador que lo posea volver a cargar
tablas de concesión y eliminación de privilegios,
host, registros y tablas.
SHUTDOWN Gracias a este privilegios, un administrador podrı́a
apagar el servidor MySQL.
PROCESS Si un administrador posee esta capacidad,
podrá ver procesos que se están llevando a cabo
en el servidor y cerrarlos.
FILE Nos permitirı́a poder leer datos de tablas escritos
en un determinado archivo y al revés.

Cuadro 3.2: Privilegios para administradores.

Privilegio Descripción
ALL Al conceder este privilegio a un usuario, le estamos
concediendo todos los privilegios explicados en las
dos tablas anteriores. Podrı́amos poner ALL PRI-
VILEGES en vez de poner ALL.
USAGE Al concederlo, en verdad no concedemos ninguno.
Con él, el usuario solo podrá acceder al sistema.
Este privilegios se suele conceder cuando pensamos
asignarle otros privilegios posteriormente.

Cuadro 3.3: Privilegios especiales.

8
3.2.5. Ejemplos de uso de GRANT y REVOKE
Este apartado en el que ahora nos encontramos, tiene como finalidad
enseñar de una manera gráfica como deberemos actuar ante el sistema cuan-
do queramos asignar o revocar permisos. Primeramente vamos a mostrar el
ejemplo y posteriormente procederemos a su explicación.

Figura 3.4: Modelo de uso de GRANT y REVOKE

Una vez vista la muestra llegamos a la conclusión que la imagen tiene tres
partes bien diferenciadas. En la primera de ellas, podemos observar como
crearı́amos un administrador del sistema, el cual, gracias a la opción WITH
GRANT OPTION es capaz de conceder privilegios a nuevos usuarios. Si en
un momento determinado decidimos que este usuario deberı́a ocupar en la
empresa un puesto de trabajador normal, pasarı́amos a las partes siguiente
donde le revocamos los permisos de administrador y le damos los de usuario
normal.
Fı́jese en que no necesitamos especificar la contraseña de juanma
para realizar la última tarea.

9
3.3. Administración de tablas
3.3.1. Crear tablas de la base de datos
El paso siguiente a dar al crear una base de datos consiste en crear las
tablas que formarán la base de datos. Tras realizar el diseño de la base de
datos crearemos las tablas para cada relación obtenida. El comando utilizado
en MySQL para crear tablas es el siguiente:

CREATE TABLE nombretabla;

Continuando con el ejemplo de nuestra empresa necesitamos crear las si-


guientes tablas:

almacen(id almacen, nombre, direccion, provincia, cp, localidad)


producto(id producto, nombre, tipo, descripcion, pc, pv)
empleado(DN I, nombre, apellidos, telef ono, email, f echa nacimiento)

La sintaxis del comando para crear las tablas es el siguiete:

CREATE TABLE [IF NOT EXISTS] ’nombretabla’


(columna1 tipo(longitud) [ATRIBUTOS],
columna2 tipo(longitud) [ATRIBUTOS],
columna3 tipo(longitud) [ATRIBUTOS]
,[OPCIONES TABLA]
)[ENGINE=TIPO MOTOR];

Crearemos la primera de las tablas que necesitamos para nuestra base


de datos. La tabla tendrá 6 columnas todas ellas deberán contener datos
(serán NOT NULL). La clave primaria será id almacen. Esta columna además
tendrá la propiedad auto increment, por lo que si no se inserta el sistema
generará un identificador exclusivo.

10
Figura 3.5: Crear la tabla almacenes.

Podemos comprobar que la tabla se ha creado correctamente mediante el


comando describe.

DESCRIBE nombretabla;

Figura 3.6: Crear la tabla almacenes.

A continuación explicaremos en profundidad la sintaxis y las opciones que


nos ofrecen la creación de tablas en MySQL.

Tipos de datos

Los tipos de datos que podemos encontrar en MySQL son:

11
Tipo Rango Descripción
BOOL Tipo booleano.
31 31
INT −2 a 2 Enteros.
BIGINT −264 a 264 Enteros grandes.
FLOAT Números de coma flotante.
DOUBLE Números flotantes de doble precisión.
DATE Formato YYYY-MM-DD Fecha.
TIME Formato HH:MM:SS Hora.
DATETIME YYYY-MM-DD HH:MM:SS Fecha y hora.
YEAR Formato YYYY Año.
CHAR 0 a 255 caracteres Cadena de caracteres.
VARCHAR Idéntico pero de longitud variable.
16
TEXT 2 − 1 caracteres Campo de texto ancho.
ENUM 65,535 elementos Conjunto de valores.
SET 64 elementos Conjunto de valores.

Cuadro 3.4: Tabla de tipos de datos de columna en MySQL.

A parte de los tipos mencinados que son los más usuados existen otros
tipos disponibles tales como TINYINT, BIT, SMALLINT, MEDIUMINT,
REAL, DECIMAL, NUMERIC, DEC, FIXED, TIMESTAMP, TINYBLOD,
TINYTEXT, BLOB, TEXT, MEDIUMBLOB, MEDIUMTEXT, LONGBLOB,
LONGTEXT. Puede obtener mayor información de ellos en la documenta-
ción oficial de MySQL.

Atributos

A la hora de crear las tablas podemos agregarles atributos a las columnas


que la conforman. Estos atributos otorgan propiedades a las columnas. En
la tabla puede encontrar una descripción detallada de cada uno de ellos.

12
Atributo Descripción
NULL Columna que puede ser dejada en blanco al
insertar.
NOT NULL Es obligatorio que contenga algún dato la
columna.
AUTO INCREMENT Utilizada normalmente para identificadores,
permite generar un número exclusivo y si-
guiente número al último insertado en la
columna. Es válido para campos enteros.
PRIMARY KEY Indica que la columna es clave primaria de la
tabla.
UNSIGNED Utilizada sobre campos enteros y determina
que solo puede contener el 0 o números posi-
tivas.

Cuadro 3.5: Atributos de columna.

Tipos de motor

A la hora de almacenar tablas MySQL puede utilizar distintos motores


de almacenamiento. Cada tipo de motor otorga una serie de caracterı́sticas.
Las tablas por defecto que utiliza MySQL son las tablas MyISAM.

13
Motor Descripción
MyISAM Es el motor o tipo de tabla utilizado por
defecto en MySQL. Entre sus ventajas, tie-
ne numerosas utilidades de comprobación y
reparación de tablas, se pueden comprimir
y permite realizar búsquedas de texto com-
pleto. No admite el tratamiento de claves
foráneas.
InnoDB Son tablas compatibles con las transaccio-
nes (COMMIT, ROLLBACK). Admiten cla-
ves foráneas. No admiten búsquedas de texto
completas.
MEMORY Son tablas almacenadas en memoria e inde-
xadas mediante hashes. Son realmente rápi-
das, pero si se produce un fallo, los datos se
pierden. Son usadas para datos temporales.
MERGE Son colecciones de tablas MyISAM que per-
miten realizar consultas a varias tablas como
si fueran una sola.

Cuadro 3.6: Tipos de motor de almacenamiento de tablas.

Recomendamos utilizar las tablas InnoDB si en nuestra base de datos se


van a utilizar las referencias y claves secundarias. En cambio si se desean rea-
lizar búsquedas de texto en la base de datos recomendamos utilizar las tablas
MyISAM. Es posible usar distintos motores de almacenamiento en distintas
tablas.

Otros tipos de tablas son BDB, BerkeleyDB, HEAP, ISAM, MRG MyISAM.
Puede encontrar más información sobre ellos en la documentación oficial.

14
Continuando con nuestro ejemplo, crearemos las dos tablas restantes.

Figura 3.7: Crear las tablas productos y empleado.

Existen otras interesantes funciones que podemos ver en la creación de


la tabla ’ejemplo’. Podemos ver como crear tablas con una clave primaria de
más de un campo y como establecer el cotejamiento de caracteres. Además
en el siguiente ejemplo podemos comprobar como crear la estructura de una
tabla copiada de otra tabla existente en la base de datos.

15
Figura 3.8: Crear tabla con cotejamiento de caracteres.

Figura 3.9: Crear una tabla copia de otra.

16
3.3.2. Modificar tablas de la base de datos
MySQL nos permite modificar tablas una vez creadas mediante el coman-
do ALTER TABLE. Esto nos permite añadir columnas, modificarlas, borrar-
las, cambiar sus propiedades, etc. La sintaxis básica de la orden es:

ALTER TABLE nombretabla modificacion[,modicionacion [...]]

Modificación Commando
Añadir columna ADD columna definición [AFTER ó FIRST columna]
Modificar columna MODIFY columna definición
Borrar columna DROP columna
Modificar opciones tabla opciones tabla
Cambiar clave primaria ADD PRIMARY KEY (columna, columna, ...)
Eliminar clave primaria DROP PRIMARY KEY
Ordernar por columna ORDER BY columna

Cuadro 3.7: Otras modificaciones.

En los siguientes ejemplos añadiremos una columna, la modificaremos y


borraremos.

17
Figura 3.10: Añadir, modificar y borrar columnas de una tabla.

18
Claves secundarias
Algunas de las tablas que necesitamos para nuestra base de datos, están
relacionadas entre ellas. En concreto los productos estarán almacenados en
un determinado almacen. Para implementar esta propiedad es necesario el
uso de claves externas. El primer paso es convertir las dos tablas implicadas
al tipo de tabla InnoDB, ya que estas han sido creadas con el tipo por defecto
(MyISAM).

Figura 3.11: Convertir tablas a InnoDB.

Figura 3.12: Crear clave secundaria.

A continuación añadiremos la clave foránea. Al crear la clave secundaria


indicamos que el campo id almacen de la tabla productos hace referencia a
un id válido de un almacen. Podemos crear claves foráneas al crear la tabla
o modificarla posteriormente.

19
1

CREATE TABLE [IF NOT EXISTS] ’nombretabla’


(columna1 tipo(longitud) [ATRIBUTOS],
columna2 tipo(longitud) [ATRIBUTOS] REFERENCES tabla(columna referencia),
,[OPCIONES TABLA]
)ENGINE=INNODB;

3.3.3. Eliminar tablas


Dentro de la administración de tablas, podemos eliminar una tabla de la
base de datos mediante el comando DROP TABLE. La sintaxis de la orden
es la siguiente:

DROP TABLE nombretabla;

En la figura podemos observar el uso del comando DROP TABLE elimi-


nando la tabla ’compra’ anteriormente creada.

Figura 3.13: Eliminar tabla.

1
En caso de que la clave foránea sea de más de una columna se pondrá en OPCIONES
TABLA con foreign key(columna1, columna2, ...).

20
3.4. Índices
Cuando creamos una base de datos debemos tener en cuenta el uso que
va a recibir. En un principio puede parecer que las consultas se realizan de
forma bastante eficientes y rápidas, pero lo cierto es que con el uso de la base
de datos las tablas van aumentando su tamaño incrementando el número de
registros o filas. Además el número de consultas puede llegar con el tiempo
a ser realmente elevado. Una forma de mejorar los tiempos de respuesta de
las consultas a las tablas es mediante ı́ndices.

Cuando realizamos una búsqueda en una columna de una tabla sin ı́ndice
está busca en todas y cada una de las filas. Imaginemos la ineficiencia de esa
búsqueda en una tabla con 10.000, 100.000 registros. Si añadimos un ı́ndi-
ce en esa columna, se crea una estructura en la base de datos que indexa
los datos almacenados. MySQL almacenará estos datos de forma eficiente
(normalmente estructura de árbol) permitiendo localizar el registro de forma
rápida.

MySQL y otros sistemas de gestión de bases de datos nos ofrecen distintos


tipos de ı́ndices. Estos son:

1. Índices primarios.
2. Índices secundarios.
3. Índices únicos.
4. Índices de texto completo.

3.4.1. Índices primarios


Los ı́ndices primarios son creados autómaticamente al crear o modificar
una tabla con clave primaria. Es lógico que el sistema cree un ı́ndice para la
clave primaria (ya sea una columna o varias). Es casi imprescindible locali-
zar registros por su clave primaria. Las claves primarias no pueden contener
NULL

3.4.2. Índices secundarios


Los ı́ndices secundarios son aquellos que se añaden sobre una columna en
la que se van a realizar búsquedas. De esta forma las búsquedas de valores

21
en dicha columna se realizarán de forma rápida y eficiente. Siempre debemos
mantener un equilibrio entre lo que necesitamos y la eficiencia. No podemos
crear un ı́ndice sobre todas las columnas, de todas las tablas, ya que cada
ı́ndice ocupará un espacio extra y las operaciones de inserción y borrado se
verán afectadas. Por lo tanto crearemos ı́ndices sobre aquellas columnas que
exclusivamente sean necesarias y mejoren el rendimiento de la BD.

Añadamos ı́ndices a las tablas de nuestro ejemplo. Crearemos un ı́ndice


secundario sobre el nombre de un almacén y los apellidos de un emplea-
dos, ya que sobre ellos llevaremos a cabo búsquedas. Los ı́ndices pueden ser
añadidos al crear la tabla (añadiendo en opciones de tabla INDEX nombre
ı́ndice (columna1 [,columna2...]), modificando la tabla o mediante CREATE
INDEX.

Figura 3.14: Crear ı́ndices secundarios.

3.4.3. Índices únicos


Estos ı́ndices son exactamente idénticos que los anteriores excepto que no
se permiten valores duplicados en la columna. Su sintaxis es:

ALTER TABLE nombre tabla


ADD UNIQUE nombre ı́ndice (columna1[,columna2...])

2
Aunque en algunos casos no es necesario recomendamos utilizar un nombre al crear
los ı́ndices.

22
CREATE UNIQUE INDEX nombre ı́ndice
ON nombre tabla (columna1[,columna2...])

3.4.4. Índices de texto completo


Cuando utilicemos tablas MyISAM y deseemos realizar búsquedas sobre
uno o varios campos de texto (CHAR, VARCHAR, TEXT) utilizaremos ı́ndi-
ces FULLTEXT. Este tipo de ı́ndices permiten realizar búsquedas eficientes
sobre campos que continen gran cantidad de datos y de una forma sencilla.

Siguiendo nuestro ejemplo, eliminaremos el ı́ndice anteriormente creado


sobre ’apellidos’ de la tabla empleado y crearemos un ı́ndice de texto com-
pleto sobre los campos ’nombre’ y ’apellidos’.

Figura 3.15: Crear ı́ndice de texto completo.

23
3.5. Vistas
Las vistas de una base de datos son utilizadas como una tabla con filas y
columnas. La diferencia radica en que en una vista no se almacenan los datos,
sino una consulta. Esta consulta obtiene los datos de una tabla existente. Las
vistas son totalmente transparentes no conociendo el usuario si se trata de
una tabla normal o de una vista.

3.5.1. Creación de vistas


La sentencia para crear una vista en MySQL sigue la siguiente sintaxis.

CREATE [OR REPLACE] VIEW nombre vista [(columna1[,columna2...])]


AS sentencia [WITH CHECK OPTION]

with check option Evita insercciones o actualizaciones en los registros, ex-


cepto en los que cumplan la cláusula WHERE de la sentencia.

A modo de ejemplo crearemos una vista para nuestra base de datos sobre
los empleados, no mostrando los datos personales como la fecha de nacimien-
to, su teléfono o email.

Figura 3.16: Creación de una vista.

3.5.2. Modificación de vistas


Del mismo modo que con otros objetos podemos modificar las vistas. La
sentencia para editar una vista en MySQL sigue la siguiente sintaxis.

ALTER VIEW nombre vista [(columna1[,columna2...])]


AS sentencia [WITH CHECK OPTION]

24
with check option Evita insercciones o actualizaciones en los registros, ex-
cepto en los que cumplan la cláusula WHERE de la sentencia.

A modo de ejemplo cambiaremos la vista, cambiando el nombre de los


campos y añadiendo el email.

Figura 3.17: Modificación de una vista.

3.5.3. Eliminación de vistas


Podemos eliminar vistas mediante el comando DROP VIEW.

DROP VIEW nombre vista

Figura 3.18: Eliminación de una vista.

25
3.6. Copias de Seguridad
Podemos realizar copias de seguridad de nuestra base de datos de diversas
formas. Aquı́ estudiaremos dos de ellas: una a nivel de SQL, y otra mediante
la orden mysqldump.

3.6.1. Copia de seguridad usando SELECT y LOAD


DATA
La forma SELECT ... INTO OUTFILE ’file name’ de SELECT escribe
los registros seleccionados en un fichero. El fichero se crea en el equipo ser-
vidor, ası́ que debe tener el permiso FILE para usar esta sintaxis. El fichero
no puede existir, que entre otras cosas evita destruir ficheros cruciales tales
como /etc/passwd y tablas de la base de datos.

Es una forma adecuada de realizar copias de seguridad de tablas o consultas.

Veamos primero un ejemplo escrito aquı́ el cual, luego probaremos en el


sistema para ver la reacción del mismo. En esta secuencia de comandos le
indicamos al sistema, que nos realice una consulta de todos los clientes que
existan en la empresa para posteriormente, almacenar toda la información
en un fichero fijado por nosotros.
Más abajo encontraremos como restaurar, estos datos que se encuentran en
los ficheros creados.

SELECT *
FROM empresa.clientes
INTO OUTFILE ’copia_clientes.db’;

Para la restauración de los datos en una tabla usamos la orden LOAD


DATA.

LOAD DATA INFILE ’copia_clientes.db’


INTO TABLE empresa.clientes;

26
Figura 3.19: Copia de seguridad usando SELECT Y LOAD DATA.

3.6.2. Copia de seguridad usando mysqldump


Otra técnica para hacer copias de seguridad de una base de datos es uti-
lizar el programa mysqldump.
El cliente mysqldump puede utilizarse para volcar una base de datos o colec-
ción de bases de datos para copia de seguridad o para transferir datos a otro
servidor SQL (no necesariamente un servidor MySQL). EL volcado contiene
comandos SQL para crear la tabla y/o rellenarla.

Podemos llamar a mysqldump de estas tres formas:

shell> mysqldump [opciones] nombre_de_base_de_datos [tablas]


shell> mysqldump [opciones] --databases DB1 [DB2 DB3...]
shell> mysqldump [opciones] --all-databases

Si no se nombra ninguna tabla o se utiliza la opción –databases o –all-


databases, se vuelca bases de datos enteras.

Para obtener una lista de las opciones que soporta su versión de mysqldump,
ejecute mysqldump –help.

El ejemplo más clásico para realizar una copia de seguridad de nuestra


base de datos completa serı́a el siguiente:

shell> mysqldump --opt empresa > /home/ricardo/copia_de_empresa.sql

27
Si visualizamos el contenido del fichero con un editor de texto cualquiera
observaremos que contiene las sentencias de SQL que crean las tablas e in-
sertan los datos, con lo cual podemos usar el fichero en cualquier sistema de
gestión de base de datos, ya que el formato no es exclusivo de mysql.

Para restaurar la copia de la base de datos anterior hacemos:

shell> mysql empresa < /home/ricardo/copia_de_empresa.sql

Algunas de las opciones de mysqldump serı́an:

–add-locks

Bloqueamos las tablas durante toda la elaboración de la copia de seguri-


dad.

–add-drop-table

Con esta opción, borraremos cada tabla antes de crearla.

-A, –all-databases

Esta opción nos permite copiar la base de datos entera.

-B, –databases

Gracias a esta opción, podremos copiar varias bases de datos simplemente


especificándolas.

-f, –force

Indicando esto, conseguiremos que continue el backup aunque se produz-


ca algun error.

–opt
Realizamos la copia de seguridad de la forma más rápida y efectiva.

-v, –verbose

Mostraremos toda la información relacionada con las acciones que se va-


yan realizando. Esta opción ralentizarı́a un poco el funcionamiento del siste-

28
ma.

-X, –xml

Obtenemos la copia de seguridad en un documento XML.

Veamos dos ejemplos escritos en consola. El primero nos muestra como


realizar un backup de empresa y como restaurar en nuestro sistema Mysql
dicha base nuevamente. En el segundo, guardaremos toda la base de datos
creada en el fichero indicado. Posteriormente volvemos a introducirla.

Figura 3.20: Copia de empresa usando mysqldump

Figura 3.21: Copia completa usando mysqldump

3.7. Metadatos
Metadatos son datos acerca de los datos, tales como el nombre de la base
de datos o tabla, el tipo de datos de una columna, o permisos de acceso.
Otros términos que a veces se usan para esta información son diccionario de
datos o catálogo del sistema.

INFORMATION SCHEMA es la base de datos de información, que alma-


cena información acerca de todas las otras bases de datos que mantiene el
servidor MySQL. Dentro del INFORMATION SCHEMA hay varias tablas
de sólo lectura. En realidad son vistas, no tablas, ası́ que no puede ver ningún
fichero asociado con ellas.

Cada usuario MySQL tiene derecho a acceder a estas tablas, pero sólo a
los registros que se corresponden a los objetos a los que tiene permiso de
acceso. Para ello puede hacer uso del comando SELECT, o de los comandos
SHOW y DESCRIBE de una forma más simple.

29
3.7.1. La sentencia SHOW
SHOW tiene varias formas que proporcionan información acerca de bases
de datos, tablas, columnas o información de estado acerca del servidor:

SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [LIKE ’pattern’]


SHOW CREATE DATABASE db_name
SHOW CREATE TABLE tbl_name
SHOW DATABASES [LIKE ’pattern’]
SHOW ENGINE engine_name {LOGS | STATUS }
SHOW [STORAGE] ENGINES
SHOW ERRORS [LIMIT [offset,] row_count]
SHOW GRANTS FOR user
SHOW INDEX FROM tbl_name [FROM db_name]
SHOW INNODB STATUS
SHOW [BDB] LOGS
SHOW PRIVILEGES
SHOW [FULL] PROCESSLIST
SHOW [GLOBAL | SESSION] STATUS [LIKE ’pattern’]
SHOW TABLE STATUS [FROM db_name] [LIKE ’pattern’]
SHOW [OPEN] TABLES [FROM db_name] [LIKE ’pattern’]
SHOW TRIGGERS
SHOW [GLOBAL | SESSION] VARIABLES [LIKE ’pattern’]
SHOW WARNINGS [LIMIT [offset,] row_count]

Comentemos algunas de las funciones más útiles de la sentencia SHOW:

SHOW CREATE TABLE tbl_name

Muestra un comando CREATE TABLE que crea la tabla dada.

SHOW {DATABASES | SCHEMAS} [LIKE ’pattern’]

SHOW DATABASES lista la base de datos en el servidor MySQL . Puede


obtener esta lista usando el comando mysqlshow . En MySQL 5.0, ve sólo
las bases de datos para las que tiene alguna clase de permiso, si no tiene el
permiso SHOW DATABASES .

SHOW GRANTS FOR user

Este comando lista el comando GRANT que debe realizarse para duplicar
los permisos para una cuenta de usuario MySQL.

30
SHOW TRIGGERS [FROM db_name] [LIKE expr]

SHOW TRIGGERS lista los disparadores definidos en el MySQL server.

SHOW [FULL] TABLES [FROM db_name] [LIKE ’pattern’]

SHOW TABLES lista las tablas no TEMPORARY en una base de datos


dada. Puede obtener esta lista usando el comando mysqlshow db name .

SHOW [GLOBAL | SESSION] VARIABLES [LIKE ’pattern’]

SHOW VARIABLES muestra los valores de algunas variables de sistema


de MySQL. Esta información puede obtenerse usando el comando mysqlad-
min variables.

Con la opción GLOBAL, obtiene los valores que se usan para nuevas cone-
xiones de MySQL. Con SESSION, obtiene los valores que hay en efecto para
la conexión actual. Si no usa estas opciones, por defecto es SESSION.

LOCAL es sinónimo de SESSION.

3.7.2. La sentencia DESCRIBE


{DESCRIBE | DESC} tbl_name [col_name | wild]

DESCRIBE proporciona información acerca de columnas en una tabla.


Es una abreviación de SHOW COLUMNS FROM. Desde MySQL 5.0.1, estos
comandos también muestran información para vistas.

El comando DESCRIBE se proporciona por compatibilidad con Oracle.

Nuestro siguiente ejemplo, nos proporciona una forma de usar juntas las
órdenes DESCRIBE Y SHOW, las cuales, nos son muy útiles para recabar
información importante de nuestro sistema.
Primero miramos cuantas bases de datos existen en nuestra máquina, selec-
cionamos que elemento queremos manipular con la orden USE. Lo siguiente
que hacemos es observar cuantas tablas existen, para acabar viendo que es-
tructura tiene la tabla que deseamos alterar.

31
Figura 3.22: Usando DESCRIBE Y SHOW.

3.7.3. Tablas de INFORMATION SCHEMA


El comando SELECT ... FROM INFORMATION SCHEMA es una for-
ma más consistente de proporcionar acceso a la información proporcionada
por los comandos SHOW que soporta MySQL (SHOW DATABASES, SHOW
TABLES, y ası́).

Veamos algunas de las tablas de la base de datos INFORMATION SCHEMA.

INFORMATION_SCHEMA.SCHEMATA

32
INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.COLUMNS
INFORMATION_SCHEMA.STATISTICS
INFORMATION_SCHEMA.USER_PRIVILEGES
INFORMATION_SCHEMA.SCHEMA_PRIVILEGES
INFORMATION_SCHEMA.TABLE_PRIVILEGES
INFORMATION_SCHEMA.COLUMN_PRIVILEGES
INFORMATION_SCHEMA.CHARACTER_SETS
INFORMATION_SCHEMA.COLLATIONS
INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
INFORMATION_SCHEMA.ROUTINES
INFORMATION_SCHEMA.VIEWS
INFORMATION_SCHEMA.TRIGGERS

El usuario puede mostrar el esquema de cada tabla con la sentencia DES-


CRIBE, y consultar sus datos con la sentencia SELECT ... FROM INFOR-
MATION SCHEMA.tabla

La última imagen que vamos a mostrar en este capı́tulo, nos enseña como
poder obtener información muy importante de la base de datos, mirando las
tablas anteriores.
Los primero que haremos sera seleccionar la base de datos information scheme
para ya luego movernos sin problemas.

No debemos olvidar que para poder obtener la información,


tendremos que tener los permisos pertinentes.

33
Figura 3.23: INFORMATION SCHEME.

34

Potrebbero piacerti anche