Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2. Creacin de tablas
3. Motor de almacenamiento
4. Verificaciones
5. Eliminacin de tablas
La sintaxis del comando SQL que nos permite crear una base de datos es:
Una vez creada la base de datos, y para evitar tener que nombrar la base de datos
en cada comando SQL que ejecutemos, podemos poner la base de datos por defecto.
Para ello usaremos el comando USE:
2. Creacin de tablas
Para crear tablas usamos la sentencia CREATE TABLE.
En su forma ms simple, la sentencia CREATE TABLE crear una tabla con las
columnas que le indiquemos.
Con este comando hemos creado una tabla llamada "gente" con dos columnas:
"nombre" que puede contener cadenas de hasta 40 caracteres y "fecha" de tipo fecha.
MySQL distingue una serie de tipos de datos que podremos utilizar a la hora de
crear los campos que formarn nuestras tablas. Veamos a continuacin estos tipos:
Blob: Un tipo de datos Blob es un objeto binario que puede almacenar cualquier
tipo de datos o informacin, desde un archivo de texto con todo su formato (se
diferencia en esto del tipo Text) hasta imgenes, archivos de sonido o video, etc.
Al igual que el tipo Text, Blob admite hasta 65.535caracteres.
TinyBlob,MediumBlob,LongBlob: Son datos del mismo tipo que el anterior
pero que varan en cuanto a su tamao, as TinyBlob admite hasta 255 caracteres
mximo, MediumBlob acepta tamaos de hasta 16.777.215 de caracteres y
LongBlob4.294.967.295 caracteres (como vemos estos tamaos se corresponden
con los de TinyText, MediumText y LongText).
Int: Este es un tipo de datos numricos de tipo entero. Este tipo de datos guarda
valores enteros (no decimales) entre -2.147.483.648 y 2.147.483.647.
TinyiInt, SmallInt, MediumInt, BigInt: Son tipos de datos numricos enteros
(no decimal). TinyiInt agrupa un rango de nmeros entre -128 y 127. SmallInt
alcanza desde -32.768 hasta 32.767. MediumInt tiene un rango comprendido
entre -8.388.608 y 8.388.607. Finalmente el tipo de datos BigInt ocupa un rango
numrico entre -9.223.372.036.854.775.808 hasta 9.223.372.036.854.775.807.
Float (M,D): Nmero de coma flotante de precisin simple. El valor del
argumento M nos indica el nmero de dgitos decimales que se van a utilizar
para representar el nmero. As, un valor de 5 nos permitir representar nmeros
comprendidos entre -99 y 99 (Nmeros expresados en binario con 5 dgitos y
signo). El valor del argumento D nos indica el nmero de posiciones decimales
que se van a utilizar en la representacin del nmero. As, una representacin
tipo Float (5,2) nos permitir incluir nmeros entre -99,99 y 99,99. El rango de
los nmeros de coma flotante de precisin simple es de -3,402823466E+38 a -
1,175494351E-38, 0, y 1,175494351E-38 hasta 3,402823466E+38.
Double (M, D): Nmero de coma flotante de precisin doble. Es un tipo de
datos igual al anterior cuya nica diferencia es el rango numrico que abarca,
siendo este el comprendido entre 1,7976931348623157E+308 hasta -
2,.2250738585072014E-308, 0, y 2,2250738585072014E-308 hasta
1,7976931348623157E+308
Decimal (M, D): Su uso es similar al de los anteriores, pero, en este caso, D
puede tener valor 0. El rango de este nmero es el mismo que el de nmero con
coma flotante de precisin doble.
Valores nulos
Al definir cada columna podemos decidir si podr o no contener valores nulos.
Es importante esta opcin ya que, en el modelo relacional, las columnas que son
o forman parte de una clave primaria no pueden contener valores nulos.
La opcin por defecto es que se permitan valores nulos, NULL, y para que no se
permitan, se usa NOTNULL. Por ejemplo:
Por ejemplo, si queremos que el valor por defecto para poblacin sea 5000,
podemos crear la tabla como:
Claves primarias
Tambin se puede definir una clave primaria sobre una columna, usando la
palabra clave KEY o PRIMARY KEY.
Slo puede existir una clave primaria en cada tabla, y la columna sobre la que se
define una clave primaria no puede tener valores NULL. Si esto no se especifica de
forma explcita, MySQL lo har de forma automtica.
Usar NOT NULL PRIMARY KEY equivale a PRIMARY KEY, NOT NULL KEY o
sencillamente KEY.
Existe una sintaxis alternativa para crear claves primarias, que en general es
preferible, ya que es ms potente. De hecho, la que hemos explicado es un alias para la
forma general, que no admite todas las funciones (como por ejemplo, crear claves
primarias sobre varias columnas). Veremos esta otra alternativa un poco ms abajo.
Columnas autoincrementadas
En MySQL tenemos la posibilidad de crear una columna autoincrementada,
aunque esta columna slo puede ser de tipo entero.
Comentarios
ndices
Un ndice es un grupo de datos que MySQL asocia con una o varias columnas de
la tabla. En este grupo de datos aparece la relacin entre el contenido y el nmero de fila
donde est ubicado.
Los ndices sirven para optimizar las consultas y las bsquedas de datos en las
tablas, evitando que MySQL tenga que revisar todos los datos disponibles para devolver
el resultado. Mediante su uso es mucho ms rpido localizar filas con determinados
valores de columnas, o seguir un determinado orden. La alternativa es hacer bsquedas
secuenciales, que en tablas grandes requieren mucho tiempo.
Se deben crear ndices sobre aquellas columnas que vayan a ser usadas en una
clusula WHERE.
Son mejores candidatas a indexar aquellas columnas que presentan muchos
valores distintos, mientras que no son buenas candidatas las que tienen muchos
valores idnticos, como por ejemplo sexo (masculino y femenino) porque cada
consulta implicar siempre recorrer prcticamente la mitad del ndice.
Si necesitamos un select del tipo SELECT ... WHERE columna_1 = X AND
columna_2 = Y y ya tenemos un ndice con la columna_1, podemos crear un
segundo ndice con la columna 2 o, mejor todava, crear un nico ndice
combinado con las columnas 1 y 2. Estos son los ndices multicolumna, o
compuestos. No obstante los ndices multicolumna en las clasulas WHERE
deben incluir siempre de izquierda a derecha las columnas indexadas o el ndice
no se usar. No obstante si tienes ndices multicolumna y los utilizas en las
clausulas WHERE, debes incluir siempre de izquierda a derecha las columnas
indexadas o el ndice no se usar. Por ejemplo, supongamos que tenemos un
ndice USUARIO (ID, NOMBRE, DIRECCION), y una clusula SELECT ...
WHERE NOMBRE = x. Este select no aprovechar el ndice. Tampoco lo hara
un SELECT ... WHERE ID =x AND DIRECCION = y. Cualquier consulta que
incluya una columna parte del ndice sin incluir adems las columnas a su
izquierda, no usar el ndice. Por tanto en nuestro ejemplo solo sacaran
provecho del ndice las consultas SELECT ... WHERE ID = x, o WHERE ID = X
AND NOMBRE = y o WHERE ID = x AND NOMBRE = y AND DIRECCION =
Z.
Los ndices se actualizan cada vez que se modifica la columna o columnas que
utiliza. Por ello no es aconsejable usar como ndices columnas en las que sern
frecuentes operaciones de escritura (INSERT, UPDATE, DELETE).
Tampoco tendra sentido crear ndices sobre columnas cuando cualquier select
sobre ellos va a devolver una gran cantidad de resultados; por ejemplo una
columna booleana que admita los valores Y/N.
Tampoco es necesario usar ndices en tablas demasiado pequeas, ya que en
estos casos no hay ganancia de rapidez frente a una consulta normal.
Claves primarias
El ejemplo anterior que vimos para crear claves primarias, usando esta sintaxis,
quedara as:
Pero esta forma tiene ms opciones, por ejemplo, entre los parntesis podemos
especificar varios nombres de columnas, para construir claves primarias compuestas por
varias columnas:
CREATE TABLE mitabla1 (id1 CHAR(2) NOT NULL,id2 CHAR(2) NOT NULL,
texto CHAR(30),PRIMARY KEY (id1, id2));
ndices
El segundo tipo de ndice permite definir ndices sobre una columna, sobre
varias, o sobre partes de columnas. Para definir estos ndices se usan indistintamente las
opciones KEY o INDEX.
CREATE TABLE mitabla2 (id INT, nombre CHAR(19),INDEX (nombre));
O su equivalente:
Este ejemplo usar slo los cuatro primeros caracteres de la columna 'nombre'
para crear el ndice.
Se pueden aadir ndices a una tabla despus de creada con la sentencia ALTER
TABLE:
ndices nicos
El tercero permite definir ndices con claves nicas, tambin sobre una columna,
sobre varias o sobre partes de columnas. Para definir ndices con claves nicas se usa la
opcin UNIQUE. La diferencia entre un ndice nico y uno normal es que en los nicos
no se permite la insercin de filas con claves repetidas. La excepcin es el valor NULL,
que s se puede repetir.
ndices fulltext
Se usan en tablas del tipo MyISAM, que veremos un poco ms adelante qu tipo
de tablas son, y pueden contener uno o ms campos del tipo CHAR, VARCHAR y TEXT.
Las bsquedas de texto completo son ejecutadas con la funcin MATCH( ). Esta
funcin ejecuta la bsqueda de una cadena en una coleccin de texto (un conjunto de
una o ms columnas incluidas en un ndice FULLTEXT). La cadena que se busca es
dada como un argumento en la funcin AGAINST( ), y es ejecutada en modo no
sensitivo, es decir, no importa el uso de maysculas y minsculas.
INSERT INTO articulos VALUES (0,'MySQL con Java en Linux', 'Conozca como
utilizar estas dos herramientas ...');
Buscamos PHP, pero no se devuelve nada, ya que las palabras de menos de tres
caracteres se excluyen de los ndices.
Claves forneas
En MySQL slo existe soporte para claves forneas en tablas de tipo InnoDB.
Sin embargo, esto no impide usarlas en otros tipos de tablas.
Esta forma define una clave fornea en la columna 'id', que hace referencia a la
columna 'id' de la tabla 'personas' (3). La definicin incluye las tareas a realizar en el
caso de que se elimine una fila en la tabla 'personas'.
Existen cinco opciones diferentes. Veamos lo que hace cada una de ellas:
1 Fulanito 1998/04/14
2 Menganito 1975/06/18
3 Tulanito 1984/07/05
En la tabla telefonos, que tiene las columnas numero e id, nos encontramos los
siguientes valores:
12322132 1
12332221 1
55546545 3
55565445 3
personas:
1 Fulanito 1998/04/14
2 Menganito 1975/06/18
4 Tulanito 1984/07/05
telefonos:
12322132 1
12332221 1
55546545 4
55565445 4
3. Motor de almacenamiento
Al disear una base de datos con MySQL ser necesario decidir qu motores de
almacenamiento vamos a utilizar.
La sintaxis es:
{ENGINE} = {BDB|HEAP|ISAM|InnoDB|MERGE|MRG_MYISAM|MYISAM }
Ejemplo:
4. Verificaciones
Disponemos de varias sentencias para verificar o consultar caractersticas de
tablas.
Tambin podemos ver la instruccin usada para crear una tabla, mediante la
sentencia SHOW CREATE TABLE:
SHOW CREATE TABLE gente;
5. Eliminacin de tablas
Para eliminar una tabla se usa la sentencia DROP TABLE. La sintaxis es simple:
Por ejemplo:
Se pueden aadir las palabras IF EXISTS para evitar errores si la tabla a eliminar
no existe.
La sintaxis tambin es muy simple. Hay que tener cuidado, ya que al borrar
cualquier base de datos se elimina tambin cualquier tabla que contenga.
EJERCICIOS
Estacion:
Identificador MEDIUMINT UNSIGNED
Latitud VARCHAR(14)
Longitud VARCHAR(15)
Altitud MEDIUMINT
Muestra:
IdentificadorEstacion MEDIUMINT UNSIGNED
Fecha DATE
TemperaturaMinimaTINYINT
TemperaturaMaxima TINYINT
Precipitaciones SMALLINT UNSIGNED
HumedadMinima TINYINT UNSIGNED
HumedadMaxima TINYINT UNSIGNED
VelocidadVientoMinima SMALLINT UNSIGNED
VelocidadVientoMaxima SMALLINT UNSIGNED
Usar para ambas tablas el motor de almacenamiento InnoDB para que MySQL
permita el uso de claves ajenas.
ClaveLibro INT
Titulo VARCHAR(60)
Idioma VARCHAR(15)
Formato VARCHAR(15)
Categoria (libro) CHAR
ClaveEditorial SMALLINT
ClaveTema SMALLINT
Nombre (tema) VARCHAR(40)
ClaveAutor INT
Nombre (autor) VARCHAR(60)
ClaveEditorial SMALLINT
Nombre (editorial) VARCHAR(60)
Direccion (editorial) VARCHAR(60)
Telefono (editorial) VARCHAR(15)
ClaveLibro INT
NumeroOrden SMALLINT
Edicion SMALLINT
Ubicacion VARCHAR(15)
ClaveSocio INT
ClaveLibro INT
NumeroOrden SMALLINT
FechaPrestamo DATE
FechaDevolucion DATE
Notas BLOB
ClaveLibro INT
ClaveTema SMALLINT
ClaveLibro INT
ClaveAutor INT