Вы находитесь на странице: 1из 24

1

Taller de bases de datos


Con la finalidad de resumir los pasos del diseo correcto de una base de datos, a continuacin se
muestran los aspectos fundamentales que se deben seguir para lograrlo.
A manera de ejemplo, se tomar en cuenta el siguiente enunciado:
Dado un proveedor, queremos conocer su nombre, direccin, ciudad y provincia, as como las piezas que
suministra, conocindose color, categora, precio y cantidad (donde para cada categora hay un nico precio).
El primer paso es analizar con cuidado el texto que describe el problema a resolver para identificar cules
van a ser las entidades, sus atributos, identificar las llaves candidatas, etc.
Al leer el texto nos damos cuenta que la frase proveedor, nos indica que va a existir una entidad llamada
as. Tambin nos damos cuenta que sus posibles atributos sern nombre, direccin, ciudad y provincia.
Otra entidad va a ser piezas, ya que esas piezas tienen color, categora, precio y cantidad.
Hasta aqu tenemos dos entidades: proveedor y pieza.

Para determinar la relacin entre estas dos entidades, debemos hacernos una pregunta en los dos
sentidos, en este caso, Un proveedor cuantas piezas suministra? y Una pieza por cuantos proveedores
es suministrada?
Sabemos que un proveedor nos puede suministrar muchas piezas diferentes, pero tambin sabemos
que una pieza puede ser suministrada o vendida por varios proveedores.
Por lo tanto tenemos una relacin de muchos a muchos, la cual se representa as:

suministra

Escribimos el smbolo infinito para indicar muchos, aunque tambin se puede usar la letra n, debajo de
la lnea escribimos la accin que los relaciona, en este caso suministrar.
Para la tabla proveedor, la llave candidata es nombre, ya que recordemos que los datos de las llaves
identifican de manera nica a un registro y no deben ser nulos ni repetirse, y el nombre de un proveedor
cumple con estas caractersticas.
Para la tabla pieza, en nombre de la pieza tambin es la llave candidata por que tambin cumple con las
caractersticas antes mencionadas.
Hasta el momento estas seran nuestras tablas:
Proveedor
Nombre_prov (llave)
Direccin
Ciudad
provincia

ISC. ISRAEL A. ESTRADA CORTS

pieza
Nombre_pieza (llave)
Color
Categora
Precio
cantidad

Taller de bases de datos

Para evitar problemas de redundancia de datos, sabemos que en las relaciones de muchos a muchos se
debe crear una tabla intermedia entre las dos relaciones, la cual contendr las llaves primarias de las dos
tablas, as como algunos otros atributos en caso de ser necesario.
Proveedor
Nombre_prov (llave)
Direccin
Ciudad
provincia

pieza
Nombre_pieza (llave)
Color
Categora
Precio
cantidad

suministra
Nombre_prov
Nombre_pieza

Volviendo al texto del problema encontramos que dice para cada categora hay un nico precio. Por lo
tanto si dejamos as las tablas tendramos muchos datos repetidos en la tabla pieza, debemos convertir
categora en una tabla aparte, ya que cada categora debe tener un precio nico. As tendremos la nueva
entidad categora relacionada con pieza.

pertenece

Nombre_pieza
P01
P02
P03

Color
verde
Azul
blanco

pieza
Categora
C13
C16
C13

Precio
$250
$300
$250

cantidad
36
125
14

Si no se creara la entidad categora, se tendra un caso de redundancia de datos, con posible prdida al
insertar, actualizar o borrar datos como se muestra en l atabla anterior.
De nuevo nos hacemos la pregunta en ambos sentidos, Una categora cuantas piezas tiene? Y Una
pieza a cuantas categoras pertenece? As nos damos cuenta que una categora puede tener muchas
piezas pero una pieza solo pertenece a una categora.
Finalmente el atributo cantidad, de las piezas suministradas por el proveedor se debe colocar en la tabla
suministra, ya de esta manera se puede saber cuntas piezas fueron suministradas por que proveedor.
El modelo relacional queda de la siguiente manera.

prov

n
suministra

ISC. ISRAEL A. ESTRADA CORTS

pieza

categoria

Taller de bases de datos

3
El modelo relacional extendido queda de la siguiente manera:

A partir del modelo relacional extendido, empezamos a diseas de manera tabular las entidades de la
base de datos, para ello, en este punto escribimos los nombre de las tablas y sus atributos de la manera
en que ya van a quedar en la base de datos, las llaves primarias las subrayamos en lnea slida, y las
llaves forneas la subrayamos con lnea discontinua.
A los nombres de las llaves primarias les colocamos al final pk para distinguirlas.
proveedor
nombrepk
direccion
ciudad
provincia

pieza
nombrepiezapk
color
centro

categora
categoriapk
precio

suministra
nombrepk
nombrepiezapk
cantidad

Con la tabla anterior generamos el diccionario de datos


Nombre
nombrepk
direccion
ciudad
provincia
nombrepiezapk
color
centro
categpk
precio
cantidad

ISC. ISRAEL A. ESTRADA CORTS

Nulo
no
no
no
no
no
si
si
no
no
no

Tipo
varchar
varchar
varchar
varchar
varchar
varchar
varchar
varchar
numeric
numeric

Longitud
60
60
60
60
60
30
60
60
(18,2)
5

Taller de bases de datos

4
En resumen los tipos de datos ms comunes del lenguaje SQL son:

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

Se debe consultar la documentacin de cada manejador de base de datos para tener la versin ms
reciente de los tipos de datos.

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

6
Integridad de los Datos
La Integridad de los Datos garantiza la calidad de los datos de la base de datos.
Por ejemplo, si se especifica para un proveedor el valor de su columna nombrepk = P01, la base de
datos no debe permitir que ningn otro proveedor tenga el mismo valor de identificador. Si se tiene una
columna categpk para la que se prevea que contenga datos como C02, C08, etc, en la cual la primer
letra es una C seguida de dos nmeros entre 0 y 9, la base de datos no debe aceptar que se tecleen
valores que no se correspondan con esa definicin. Dos pasos importantes en el diseo de las tablas
son la identificacin de valores vlidos para una columna y la determinacin de cmo forzar la integridad
de los datos en la columna, de manera que se valide la mayor cantidad posible de datos desde la propia
creacin de la base.
Hay cuatro categoras de integridad de datos:

Integridad de entidad.
Integridad de dominio.
Integridad referencial.
Integridad definida por el usuario.

Hay varias maneras de forzar cada tipo de integridad.


Tipo de integridad
Entidad
Dominio
referencial
Definida por el usuario

Opciones recomendadas
Restricciones PRIMARY KEY
Restricciones UNIQUE
Propiedad AUTO_INCREMENT
Definicin predeterminada DEFAULT
Restricciones FOREIGN KEY
Restricciones NOT NULL, CHECK
Restricciones FOREIGN KEY
Restricciones CHECK
Triggers
Store Procedures

Integridad de Entidad
La integridad de entidad define una fila como entidad nica para una tabla determinada. La integridad
de entidad fuerza la integridad de la columna o columnas de los identificadores o la clave principal de
una tabla (mediante ndices, restricciones UNIQUE, restricciones PRIMARY KEY o propiedades
AUTO_INCREMENT).
Las claves primarias no pueden contener valores nulos, y su valor debe ser nico. Una clave ha sido
diseada para identificar de manera nica a los registros de una tabla a travs de toda la estructura de
la base de datos. La seleccin de una clave primaria es muy importante en el diseo de una base de
datos, ya que es un elemento clave de los datos que facilita la unin de tablas y el concepto total de una
base de datos relacional. Las claves primarias deben ser nicas y no nulas, de manera que garanticen
que una fila de una tabla pueda ser siempre referenciada a travs de su clave primaria.
MySQL requiere que se especifique NOT NULL para las columnas que se van a utilizar como claves
primarias al momento de crear una tabla.

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

7
Integridad de Dominio
La integridad de dominio viene dada por la validez de las entradas para una columna determinada. Puede
forzar la integridad de dominio si restringe el tipo (mediante tipos de datos), el formato (mediante las
reglas RULE y las restricciones CHECK), o el intervalo de valores posibles (mediante restricciones
FOREIGN KEY, restricciones CHECK, definiciones DEFAULT, definiciones NOT NULL y reglas).
Integridad Referencial
La integridad referencial protege las relaciones definidas entre las tablas cuando se crean o se eliminan
registros. La integridad referencial se basa en las relaciones entre las llaves forneas y las llaves primarias
o entre las claves externas y las claves nicas. La integridad referencial garantiza que los valores clave
son coherentes en las distintas tablas. Para conseguir esa coherencia, es preciso que no haya referencias
a valores inexistentes y que, si cambia el valor de una clave, todas las referencias a ella se cambien en
consecuencia en toda la base de datos.
Cuando se fuerza la integridad referencial, SQL impide a los usuarios:
Agregar registros a una tabla relacionada si no hay ningn registro asociado en la tabla principal.
Cambiar valores en una tabla principal de manera que queden registros hurfanos en una tabla
relacionada.
Eliminar registros de una tabla principal cuando hay registros relacionados coincidentes.
Por ejemplo, tomemos la relacin entre pieza y categora
Nompieza
P01
P02
P03

Color
verde
Azul
blanco

Centro
norte
sur
sur

categpk
C13
C16
C13

categpk
C13
C16
C17

precio
250
300
200

El usuario no podr insertar un registro en la tabla piezas, si la categora de la pieza no


existe an en la tabla categora:
INSERT INTO pieza VALUES (P04, 'blanco', norte, C20);
ERROR 1216: Cannot add or update a child row: a foreign key constraint fails
El usuario no podr eliminar un registro de la tabla categora si an quedan valores
vinculados con la tabla pieza.
DELETE FROM categoria WHERE categpk =C13;
ERROR 1217: Cannot delete or update a parent row: a foreign key constraint fails

Integridad Definida por el Usuario


La integridad definida por el usuario le permite definir reglas de la compaa especficas que no
pertenecen a ninguna otra categora de integridad. Todas las categoras de integridad son compatibles
con la integridad definida por el usuario.

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

8
Constraints (Restricciones)
Los constraints son restricciones que se le adicionan a la base de datos con el objeto de mantener la
integridad referencial de manera automtica (PRIMARY KEY Y FOREIGN KEY), as como la integridad
de Dominio a travs de Defaults y Checks.
Creando una restriccin de ndice UNIQUE
Crea un ndice nico (uno en el que no se permite que dos filas tengan el mismo valor de ndice). SQL
comprueba si hay valores duplicados cuando se crea el ndice (si ya existen datos) y realiza la
comprobacin cada vez que se agregan datos con una instruccin INSERT o UPDATE. Si existen valores
de clave duplicados, se cancela la instruccin CREATE INDEX y se devuelve un mensaje de error con el
primer duplicado. Un ndice nico no se puede crear en una columna individual ni en columnas mltiples
(ndice compuesto) en las que la clave completa (todas las columnas de esa clave) sea NULL en ms de
una fila; para la indexacin, stas se tratan como valores duplicados.
Cuando existe un ndice nico, las instrucciones UPDATE o INSERT que generen valores de clave
duplicada se deshacen y SQL muestra un mensaje de error. Esto se cumple incluso si las instrucciones
UPDATE o INSERT cambian muchas filas pero crean un nico duplicado.
En el siguiente ejemplo se crea un ndice nico sobre la columna RFCCliente al momento de crear la
tabla.
create table cliente (
clientepk int not null auto_increment,
nomcliente varchar (60),
domcliente varchar (60),
telcliente varchar (15),
RFCcliente char (15),
negociopk tinyint not null,
constraint unRFCcliente UNIQUE NONCLUSTERED (RFCcliente),
primary key (clientepk),
foreign key (negociopk) references negocio (negociopk)
);
La instruccin UNIQUE tambin puede ser utilizada en la llave primaria.
La instruccin AUTO_INCREMENT
Cuando una columna est definida como AUTO_INCREMENT, se le asigna un valor numrico
consecutivo, inicia con 1. Normalmente se utiliza para generar identificadores como llaves primarias,
para que el usuario no tenga que teclearlos y tenga que recordar que numero el que sigue al momento
de insertar un nuevo registro.
Restricciones CHECK
Las restricciones CHECK se pueden:
Crear cuando se crea la tabla, durante el proceso de definicin de la misma.
Generar a travs de un disparador (trigger) al ejecutarse una accin.
Para explicar la funcionalidad del CHECK tomemos como ejemplo la tabla categora, en la cual la llave
primaria categpk est definida como CHAR (3), es decir acepta tres caracteres. Al ser as, el usuario
podra teclear tres caracteres cualquiera, pero si la compaa o el cliente tiene definido que sus

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

9
categoras se escriben iniciando con la letra C mayscula seguida de dos numero entre 0 y 9, debemos
encontrar un mecanismo que permita forzar al usuario a seguir esa definicin. En este tipo de casos se
puede utilizar una restriccin CHECK que revise antes de insertar si los datos cumplen o no con ciertas
reglas. Si bien en MYSQL se pueden crear restricciones del tipo CHECK al momento de crear la tabla,
no revisa este tipo de restricciones al insertar datos, solamente manda una advertencia pero s inserta
los datos aunque no cumplan la restriccin. Para resolver este problema se deben crear triggers para
validar la entrada de datos.
Categpk
C01
C02
C03
C04

precio
200
250
300
350

Categpk
AAA
C14
Yt6
C16

precio
200
250
300
350

A continuacin se muestra el cdigo para la creacin de la base de datos y las tablas de proveedor,
con una breve descripcin de los detalles ms importantes.
create database proveedor;
use proveedor;
create table proveedor
(
nombrepk varchar (60) UNIQUE NOT NULL,
direccion varchar (60) NOT NULL,
ciudad varchar (60) NOT NULL,
provincia varchar (60) NOT NULL,
PRIMARY KEY (nombrepk)
);
Al crear la tabla proveedor, se utiliz la instruccin UNIQUE para que no se dupliquen los datos del
campo nombrepk, ya que ser el usuario el que deber teclear el nombre y no debe haber nombre
repetidos al ser la llave primaria.
create table categoria
(
categpk char (3) UNIQUE NOT NULL,
precio numeric (18,2) NOT NULL,
PRIMARY KEY (categpk)
);
create table pieza
(
nombrepiezapk varchar (60) UNIQUE NOT NULL,
categpk varchar (3) NOT NULL,
color varchar (30) DEFAULT sin color,
centro varchar (60),
PRIMARY KEY (nombrepiezapk),
FOREIGN KEY (categpk) REFERENCES categoria(categpk)
);
ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

10

El campo color al no ser NOT NULL, se le agreg la instruccin DEFAULT, para efecto de que si se
deja en blanco, asigne sin coloral campo.
La tabla pieza tiene como llave fornea el campo categpk que pertenece a la tabla categora, tome en
cuenta que en la tabla original, el campo categpk fue declarado de la siguiente manera:
categpk char (3) UNIQUE NOT NULL,
Sin embargo, cuando se declara como llave fornea, se debe declarar de la siguiente manera:
categpk varchar (3) NOT NULL,
Es decir sin la instriccion UNIQUE.

create table suministra


(
nombrepk varchar (60) NOT NULL,
nombrepiezapk varchar (60) NOT NULL,
cantidad numeric (5) NOT NULL,
PRIMARY KEY (nombrepk, nombrepiezapk),
FOREIGN KEY (nombrepk) REFERENCES proveedor (nombrepk),
FOREIGN KEY (nombrepiezapk) REFERENCES pieza (nombrepiezapk)
);
Para poder forzar que el campo categpk de la tabla categora inicie simpre con una C mayscula
seguida de dos nmeros del 0 al 9, se debe utilizar un trigger, el siguiente es un ejemplo de como se
puede crear:
DELIMITER /
CREATE TRIGGER chk_categpk
BEFORE INSERT ON categoria
FOR EACH ROW
BEGIN
IF NOT (NEW.categpk REGEXP 'C[0-9][0-9]')
THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Mensaje de Error';
END IF;
END //
DELIMITER ;

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

11
OPERACIONES BSICAS EN BASES DE DATOS
INSERTAR DATOS
La instruccin INSERT INTO nos permite agregar filas de datos a nuestras tablas en la base de datos,
la sintaxis de la instruccin INSERT INTO es:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION (partition_name,...)]
[(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
Vamos a insertar datos a la base de datos proveedor.

Debemos insertar los siguientes datos:


Categora
nombrepiezapk
categpk precio
Acetato
C01
120
Acrlico
C02
150
C03
180
Lana
C04
200
Pao

ISC. ISRAEL A. ESTRADA CORTS

Pieza
categpk
C01
C01
C02
C04

color
Blanco
Azul
Verde
Blanco

centro
Norte
Norte
Sur
Norte

Taller de bases de datos

12
Como podemos ver los datos fueron agregados correctamente, para ver los datos en la tabla podemos
utilizar la instruccin SELECT:

Ahora vamos tratar de insertar un dato con la llave primaria duplicada, y despus un registro cuyo
categpk no cumpla con la regla C[0-9][0-9]

Ahora vamos insertar los siguientes datos a la tabla pieza y a visualizarlos:

Ahora vamos a ver qu sucede si queremos insertar una pieza con una categora que an no existe en
la tabla de categora:

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

13
Ahora vamos insertar los siguientes datos en las tablas de proveedor y suministra:

nombrepk
Proveedora del centro s.a. de c.v
Distribuidora mexico
Almacenes generales
Talleres Aguilar

proveedor
direccin
AV juarez no. 201
Boulevard ALM 517
Zaragoza no. 365
Valle de seora no. 547

ciudad
Puebla
Jalapa
Quertaro
Len

suministra
nombrepk
nombrepiezapk
Proveedora del centro s.a. de c.v acetato
Distribuidora mexico
acetato
Distribuidora mexico
lana
Distribuidora mexico
pao
Almacenes generales
acrilico
Almacenes generales
lana
Talleres Aguilar
lana

ISC. ISRAEL A. ESTRADA CORTS

provincia
Puebla
Veracruz
Quertaro
Guanajuato

cantidad
1000
500
600
150
5000
300
3000

Taller de bases de datos

14
Ahora con la tabla suministra:

Veamos que sucede si queremos insertar datos con valores que an no estn en las tablas principales:

ACTUALIZAR DATOS
La instruccin UPDATE se utiliza para modificar datos ya existentes en las tablas, la sintaxis es:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

15
Esta instruccin actualiza los valores de las columnas de las filas ya existentes, en una tabla. La clusula
SET indica las columnas que se desea modificar y los valores que se deben dar. Cada valor se puede dar
como una expresin, o una instruccin DEFAULT para establecer una columna de forma explcita a su
valor predeterminado. La clusula WHERE, especifica las condiciones que identifican qu filas van a
actualizarse. Sin clusula WHERE, todas las filas se actualizan. Si se especifica la clusula ORDER BY,
los registros se actualizan en el orden que se especifica. La clusula LIMIT es el lmite en el nmero de
filas que se pueden actualizar.
Vamos a actualizar el precio de la categora C04, cambiando su valor actual de 200 a 400.

Ahora vamos a actualizar la tabla pieza, estableciendo el valor centro =principal a todos los registros de
la categora C01

nombrepiezapk
Acetato
Acrlico
Lana
Pao

Pieza
categpk
C01
C01
C02
C04

color
Blanco
Azul
Verde
Blanco

centro
Norte
Norte
Sur
Norte

Se debe tener cuidado al realizar la operacin UPDATE, ya que si no se incluye la clusula WHERE, se
actualizarn todos los registros. Supongamos que uno de nuestros proveedores Almacenes generales,
se cambi de ciudad, y queremos actualizar esos datos. Si utilizamos una instruccin UPDATE y no le
indicamos con un WHERE a que proveedor vamos a actualizar, los actualiza a todos.

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

16

Si lo que necesitamos es solo actualizar la informacin de Almacenes generales, la instruccin debe


quedar as:

BORRAR DATOS
La sentencia DELETE remueve filas de una tabla, su sintaxis es:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[PARTITION (partition_name,...)]
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Vamos a utilizar la tabla suministra para ejemplificar el borrado, supongamos que a uno de nuestros
proveedores ya le vamos a comprar el producto pao, por lo tanto necesitamos borrar de la tabla
suministra los registros cuyo nombrepiezapk sea igual a pao:

Hay que tener en cuenta que si no se establece la clusula WHERE, se borrar todos los registros.

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

17
SENTENCIA ALTER TABLE
La sentencia ALTER TABLE es utilizada para agregar, borrar o modificar columnas en una tabla, tambin
sirve para cambiar el nombre de la tabla.
Agregar una columna: Podemos agregar una columna a una tabla ya existente mediante la sentencia
ALTER TABLA con la siguiente sintaxis:
ALTER TABLE table_name
ADD new_column_name column_definition
[ FIRST | AFTER column_name ];
Para agreagar una columna vamos a tomas como ejemplo la tabla proveedor para agregar una columna
que contenga el cdigo postal, sta nueva columna debe estar entre los campos direccin y ciudad.
ALTER TABLE proveedor ADD codigo_p numeric (5) NOT NULL AFTER direccion;

Podemos agregar mltiples columnas en una sola instruccin, vamos a agregar el telfono fijo y el celular
a la tabla de proveedor, estos campos deben quedar despus de la direccin:
ALTER TABLE proveedor
ADD tel_fijo numeric(10) NULL
AFTER direccion,
ADD tel_celular numeric (12) NULL
AFTER tel_fijo;

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

18

Modificar columnas
La instruccin MODIFY se utiliza para cambiar la definicin de una columna, por ejemplo el tipo de dato,
longitud, etc. La sintaxis para modificar una columna de una tabla es:
ALTER TABLE table_name
MODIFY column_name column_definition
[ FIRST | AFTER column_name ];
Vamos a modificar la tabla proveedor para cambiar campo tel_celular de decimal (12,0) a decimal (10,0)

Tambin pueden realizarse modificaciones mltiples:


ALTER TABLE proveedor
MODIFY tel_fijo numeric (12) NULL,
MODIFY tel_celular numeric (12) NULL;

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

19

Borrar columnas
Para borrar columnas de una tabla, se utiliza la sentencia DROP, con la sintaxis siguiente:
ALTER TABLE table_name
DROP COLUMN column_name;

Renombrar columnas
Para cambiar el nombre a una columna se utiliza la sentencia CHANGE COLUMN, con la sintaxis
siguiente:
ALTER TABLE table_name
CHANGE COLUMN old_name new_name
column_definition
[ FIRST | AFTER column_name ]
Vamos a cambiar el nombre del campo tel_fijo por telfijo:
ALTER TABLE proveedor
CHANGE COLUMN tel_fijo telfijo numeric (12) NULL;

Renombrar una tabla


Para renombrar una tabla se utiliza la sentencia RENAME con la sintaxis siguiente:
ALTER TABLE table_name
RENAME TO new_table_name;
Por ejemplo vamos a crear una tabla nueva con el nombre ejemplo, despus cambiaremos su nombre
por el de tabla1.
CREATE TABLE ejemplo
(
llave numeric (10) NOT NULL,
PRIMARY KEY (LLAVE)
);

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

20
ALTER TABLE ejemplo
RENAME TO tabla1;

Borrar tablas
Para borrar una tabla se utiliza la sentencia DROP, la sintaxis
Mas simple es:
DROP TABLE table_name;
Vamos a borrar la tabla llamada tabla1:

DROP TABLE tabla1;

Nota: Si se utiliza la sentencia DROP TABLE para eliminar una o ms tablas que no existen, la base de
datos generar un error (a menos que especifique la IF EXISTS en los parmetros de la sentencia DROP
TABLE)
El ejemplo anterior tambin se pudo escribir as:
DROP TABLE IF EXISTS tabla1;
MySQL Keys, Constraints and Indexes
Primary Keys Create, alter, and drop primary keys
Unique Constraints
Create, add, and drop unique constraints
Indexes
Create, drop and rename indexes (performance tuning)

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

21
NDICES
El entendimiento de los ndices en los manejadores de bases de datos, es crucial tanto para los
desarrolladores, como para los administradores de bases de datos. Una mala eleccin al crear los ndices,
producir una gran cantidad de problemas al manipular los datos.
Los ndices se utilizan para encontrar filas con valores especficos de las columnas rpidamente. Sin un
ndice, MySQL debe comenzar con la primera fila y luego leer a travs de toda la tabla para buscar las
filas correspondientes. Cuanto mayor sea la tabla, esto cuesta ms. Si la tabla tiene un ndice de las
columnas en cuestin, MySQL puede determinar rpidamente la posicin de buscar en el medio del
archivo de datos sin tener que mirar todos los datos. Esto es mucho ms rpido que leer cada fila de
forma secuencial.
Las consultas a una base de datos pueden funcionar sin tener ndices, sin embargo, lo harn de una
manera ms lenta. Un ndice crea una entrada para cada valor que aparezca en las columnas puestas en
un ndice.
Crear un ndice
Hay 2 maneras de crear un ndice. Se puede crear un ndice cuando se crea una tabla usando la
declaracin de la CREATE TABLE, o puede utilizar la declaracin CREATE INDEX despus de que se
haya creado la tabla.
La sintaxis para crear un indice al momento de la creacin de una tabla es:
CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
column_n datatype [ NULL | NOT NULL ],
INDEX index_name [ USING BTREE | HASH ]
(index_col1 [(length)] [ASC | DESC],
index_col2 [(length)] [ASC | DESC],
...
index_col_n [(length)] [ASC | DESC])
);

La sintaxis para crear un indice despus de crear la tabla es:


CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
[ USING BTREE | HASH ]
ON table_name
(index_col1 [(length)] [ASC | DESC],
index_col2 [(length)] [ASC | DESC],
...
index_col_n [(length)] [ASC | DESC]);

Veamos un ejemplo de cmo crear un ndice en MySQL utilizando la sentencia CREATE TABLE. Esta
declaracin sera tanto crear la tabla, as como el ndice al mismo tiempo.

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

22
CREATE TABLE contactos
(
contacto_id INT(11) NOT NULL AUTO_INCREMENT,
apellido VARCHAR(30) NOT NULL,
nombre VARCHAR(25),
fecha_nac DATE,
PRIMARY KEY (contacto_id),
INDEX contacto_idx (apellido, nombre)
);

En este ejemplo, hemos creado la tabla de contactos, as como un ndice idx llamado contacto que
consiste en las columnas de apellido y nombre.
A continuacin, se mostrar cmo crear la tabla primero y luego crear el ndice mediante la instruccin
CREATE INDEX.

CREATE TABLE contactos


(
contacto_id INT(11) NOT NULL AUTO_INCREMENT,
apellido VARCHAR(30) NOT NULL,
nombre VARCHAR(25),
fecha_nac DATE,
PRIMARY KEY (contacto_id)
);
CREATE INDEX contacto_idx ON contactos (apellido, nombre);

En este ejemplo, la sentencia CREATE TABLE crear la tabla de contactos. La sentencia CREATE INDEX
creara un ndice llamado contacto_idx que consiste en las columnas apellidos y nombre.
Borrar un ndice
Para borrar un ndice, se utiliza la sentencia DROP INDEX. La sintaxis para borrar un ndice mediante la
instruccin DROP INDEX en MySQL es:
DROP INDEX index_name
ON table_name;
Ejemplo
DROP INDEX contacto_idx
ON contactos;
En este ejemplo, se ha borrado un ndice llamado contacto_idx de la tabla de contactos.
Cambiar el nombre de un ndice
Puede cambiar el nombre de un ndice en MySQL. Dependiendo de la versin de MySQL, hay dos
sintaxis diferentes .
La sintaxis para cambiar el nombre de un ndice utilizando la sentencia ALTER TABLE en MySQL 5.6 y
anteriores es:
ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

23
ALTER TABLE table_name
DROP INDEX index_name,
ADD INDEX new_index_name [ USING BTREE | HASH ]
(index_col1 [(length)] [ASC | DESC],
index_col2 [(length)] [ASC | DESC],
...
index_col_n [(length)] [ASC | DESC]);

La sintaxis para renombrar un ndice en MySQL 5.7 o ms reciente es:


ALTER TABLE table_name
RENAME INDEX index_name TO new_index_name;
Ejemplo
Veamos un ejemplo de cmo cambiar el nombre de un ndice en MySQL. En las versiones anteriores de
MySQL, es necesario utilizar la sentencia ALTER TABLE para eliminar primero el viejo ndice y volver a
crear el nuevo ndice.
ALTER TABLE contactos
DROP INDEX contacto_idx,
ADD INDEX contacto_new_index (apellido, nombre);
En este ejemplo, hemos renombrado el ndice denominado contacto_idx a contacto_new_index . Esto
se hizo borrando el antiguo ndice y luego aadiendo el nuevo ndice.
A partir de MySQL 5.7, puede utilizar la sentencia ALTER TABLE con la clusula RENAME INDEX para
cambiar el nombre del ndice.
Por ejemplo (MySQL 5.7 y posteriores):
ALTER TABLE contactos
RENAME INDEX contacto_idx TO contacto_new_index;
Esto tambin podra cambiar el nombre del ndice de contacto_idx a contacto_new_index. Si no est
seguro de qu versin de MySQL se est ejecutando, es ms seguro utilizar la primera sintaxis para
cambiar el nombre de un ndice.

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

24
Clausulas MySQL
DISTINCT

Obtiene registros nicos

La clusula DISTINCT se utiliza para eliminar los duplicados del conjunto de resultados. La clusula
DISTINCT slo se puede utilizar con las instrucciones SELECT.
La sintaxis de la clusula DISTINCT en MySQL es:
SELECT DISTINCT expressions
FROM tables
[WHERE conditions];

Nota
Cuando se proporciona una nica expresin de la clusula DISTINCT, la consulta devolver los valores
nicos para esa expresin. Cuando se proporciona ms de una expresin en la clusula DISTINCT, la
consulta recuperar combinaciones nicas para las expresiones enumeradas.
En MySQL, la clusula DISTINCT no ignora los valores NULL. As que cuando se utiliza la clusula
DISTINCT en la instruccin SQL, el conjunto de resultados incluir NULL como un valor distinto.
Veamos el ejemplo ms simple de MySQL clusula DISTINCT. Podemos utilizar la clusula DISTINCT
para devolver un solo campo que elimina los duplicados del conjunto de resultados.

Ejemplo - Con Expresiones Mltiples


Veamos cmo se puede utilizar la clusula DISTINCT para eliminar duplicados de ms de un campo en
la instruccin SELECT.

Este ejemplo la clusula DISTINCT volvera cada provincia nica y la combinacin de ciudad de la tabla
de proveedor. En este caso, DISTINCT se aplica a cada campo que aparece despus de la palabra clave
DISTINCT, y por lo tanto devuelve combinaciones distintas.

ISC. ISRAEL A. ESTRADA CORTS

Taller de bases de datos

Вам также может понравиться