Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Creación y administración de
bases de datos en MySQL
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.
mysql>use nombreBase;
Database changed
2
en dos ejemplos simples.
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.
4
∗ Nivel de tabla. Los permisos de tabla se aplican a todas las columnas
en una tabla dada.
ON elemento
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:
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.
ON elemento
FROM nombreusuario
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.
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.
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.
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.
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:
10
Figura 3.5: Crear la tabla almacenes.
DESCRIBE nombretabla;
Tipos de datos
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.
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
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.
Tipos de motor
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.
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.
15
Figura 3.8: Crear tabla con cotejamiento de caracteres.
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:
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
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).
19
1
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.
1. Índices primarios.
2. Índices secundarios.
3. Índices únicos.
4. Índices de texto completo.
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.
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...])
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.
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.
24
with check option Evita insercciones o actualizaciones en los registros, ex-
cepto en los que cumplan la cláusula WHERE de la sentencia.
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.
SELECT *
FROM empresa.clientes
INTO OUTFILE ’copia_clientes.db’;
26
Figura 3.19: Copia de seguridad usando SELECT Y LOAD DATA.
Para obtener una lista de las opciones que soporta su versión de mysqldump,
ejecute mysqldump –help.
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.
–add-locks
–add-drop-table
-A, –all-databases
-B, –databases
-f, –force
–opt
Realizamos la copia de seguridad de la forma más rápida y efectiva.
-v, –verbose
28
ma.
-X, –xml
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.
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:
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]
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.
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.
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
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.
33
Figura 3.23: INFORMATION SCHEME.
34