Manual de Bases de datos. Primera Version

download Manual de Bases de datos. Primera Version

of 24

Transcript of Manual de Bases de datos. Primera Version

  • 7/24/2019 Manual de Bases de datos. Primera Version

    1/24

    1

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    Taller de bases de datos

    Con la finalidad de resumir los pasos del diseo correcto de una base de datos, a continuacin semuestran 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 culesvan 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 llamadaas. 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 dossentidos, en este caso, Un proveedor cuantas piezas suministra? y Una pieza por cuantos proveedoreses suministrada?

    Sabemos que un proveedor nos puede suministrar muchas piezas diferentes, pero tambin sabemosque 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:

    Escribimos el smbolo infinito para indicar muchos, aunque tambin se puede usar la letra n, debajo dela 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 llavesidentifican de manera nica a un registro y no deben ser nulos ni repetirse, y el nombre de un proveedorcumple 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 piezaNombre_prov (llave) Nombre_pieza (llave)Direccin ColorCiudad Categoraprovincia Precio

    cantidad

    suministra

  • 7/24/2019 Manual de Bases de datos. Primera Version

    2/24

    2

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    Para evitar problemas de redundancia de datos, sabemos que en las relaciones de muchos a muchos sedebe crear una tabla intermedia entre las dos relaciones, la cual contendr las llaves primarias de las dostablas, as como algunos otros atributos en caso de ser necesario.

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

    piezaNombre_pieza Color Categora Precio cantidadP01 verde C13 $250 36P02 Azul C16 $300 125P03 blanco C13 $250 14

    Si no se creara la entidad categora, se tendra un caso de redundancia de datos, con posible prdida alinsertar, 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 Unapieza a cuantas categoras pertenece? As nos damos cuenta que una categora puede tener muchaspiezas pero una pieza solo pertenece a una categora.

    Finalmente el atributo cantidad, de las piezas suministradas por el proveedor se debe colocar en la tablasuministra, ya de esta manera se puede saber cuntas piezas fueron suministradas por que proveedor.

    El modelo relacional queda de la siguiente manera.

    piezaNombre_pieza (llave)ColorCategoraPreciocantidad

    suministraNombre_provNombre_pieza

    Proveedor

    Nombre_prov (llave)DireccinCiudadprovincia

    1

    pertenece

    prov suministra categoriapiezan n n 1

  • 7/24/2019 Manual de Bases de datos. Primera Version

    3/24

    3

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    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 maneraen que ya van a quedar en la base de datos, las llaves primarias las subrayamos en lnea slida, y lasllaves forneas la subrayamos con lnea discontinua.

    A los nombres de las llaves primarias les colocamos al final pk para distinguirlas.

    proveedor pieza categora suministranombrepk nombrepiezapk categoriapk nombrepkdireccion color precio nombrepiezapkciudad centro cantidadprovincia

    Con la tabla anterior generamos el diccionario de datos

    Nombre Nulo Tipo Longitudnombrepk no varchar 60direccion no varchar 60ciudad no varchar 60provincia no varchar 60nombrepiezapk no varchar 60color si varchar 30centro si varchar 60categpk no varchar 60precio no numeric (18,2)cantidad no numeric 5

  • 7/24/2019 Manual de Bases de datos. Primera Version

    4/24

    4

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

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

  • 7/24/2019 Manual de Bases de datos. Primera Version

    5/24

    5

    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 msreciente de los tipos de datos.

  • 7/24/2019 Manual de Bases de datos. Primera Version

    6/24

    6

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    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 dedatos no debe permitir que ningn otro proveedor tenga el mismo valor de identificador. Si se tiene unacolumna 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 tecleenvalores que no se correspondan con esa definicin. Dos pasos importantes en el diseo de las tablasson la identificacin de valores vlidos para una columna y la determinacin de cmo forzar la integridadde los datos en la columna, de manera que se valide la mayor cantidad posible de datos desde la propiacreacin 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 Opciones recomendadasEntidad Restricciones PRIMARY KEY

    Restricciones UNIQUEPropiedad AUTO_INCREMENT

    Dominio Definicin predeterminada DEFAULTRestricciones FOREIGN KEYRestricciones NOT NULL, CHECK

    referencial Restricciones FOREIGN KEYRestricciones CHECK

    Definida por el usuario Triggers

    Store Procedures

    Integridad de Entidad

    La integridad de entidad define una fila como entidad nica para una tabla determinada. La integridadde entidad fuerza la integridad de la columna o columnas de los identificadores o la clave principal deuna tabla (mediante ndices, restricciones UNIQUE, restricciones PRIMARY KEY o propiedadesAUTO_INCREMENT).

    Las claves primarias no pueden contener valores nulos, y su valor debe ser nico. Una clave ha sidodiseada para identificar de manera nica a los registros de una tabla a travs de toda la estructura dela base de datos. La seleccin de una clave primaria es muy importante en el diseo de una base dedatos, ya que es un elemento clave de los datos que facilita la unin de tablas y el concepto total de unabase de datos relacional. Las claves primarias deben ser nicas y no nulas, de manera que garanticenque 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 clavesprimarias al momento de crear una tabla.

  • 7/24/2019 Manual de Bases de datos. Primera Version

    7/24

    7

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    Integridad de Dominio

    La integridad de dominio viene dada por la validez de las entradas para una columna determinada. Puedeforzar la integridad de dominio si restringe el tipo (mediante tipos de datos), el formato (mediante lasreglas RULE y las restricciones CHECK), o el intervalo de valores posibles (mediante restriccionesFOREIGN 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 eliminanregistros. La integridad referencial se basa en las relaciones entre las llaves forneas y las llaves primariaso entre las claves externas y las claves nicas. La integridad referencial garantiza que los valores claveson coherentes en las distintas tablas. Para conseguir esa coherencia, es preciso que no haya referenciasa valores inexistentes y que, si cambia el valor de una clave, todas las referencias a ella se cambien enconsecuencia 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 tablarelacionada. Eliminar registros de una tabla principal cuando hay registros relacionados coincidentes.

    Por ejemplo, tomemos la relacin entre pieza y categora

    Integridad Definida por el Usuario

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

    Nompieza Color Centro categpk

    P01 verde norte C13P02 Azul sur C16

    P03 blanco sur C13

    categpk precio

    C13 250

    C16 300

    C17 200El usuario no podr insertar un registro en la tabla piezas, si la categora de la pieza noexiste 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 valoresvinculados con la tabla pieza.

    DELETE FROM categoria WHERE categpk =C13;ERROR 1217: Cannot delete or update a parent row: a foreign key constraint fails

  • 7/24/2019 Manual de Bases de datos. Primera Version

    8/24

    8

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    Constraints Restricciones)

    Los constraints son restricciones que se le adicionan a la base de datos con el objeto de mantener laintegridad referencial de manera automtica (PRIMARY KEY Y FOREIGN KEY), as como la integridadde 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). SQLcomprueba si hay valores duplicados cuando se crea el ndice (si ya existen datos) y realiza lacomprobacin cada vez que se agregan datos con una instruccin INSERT o UPDATE. Si existen valoresde clave duplicados, se cancela la instruccin CREATE INDEX y se devuelve un mensaje de error con elprimer 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 deuna fila; para la indexacin, stas se tratan como valores duplicados.

    Cuando existe un ndice nico, las instrucciones UPDATE o INSERT que generen valores de claveduplicada se deshacen y SQL muestra un mensaje de error. Esto se cumple incluso si las instruccionesUPDATE 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 latabla.

    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 numricoconsecutivo, 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 momentode 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 llaveprimaria categpk est definida como CHAR (3), es decir acepta tres caracteres. Al ser as, el usuariopodra teclear tres caracteres cualquiera, pero si la compaa o el cliente tiene definido que sus

  • 7/24/2019 Manual de Bases de datos. Primera Version

    9/24

    9

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    categoras se escriben iniciando con la letra C mayscula seguida de dos numero entre 0 y 9, debemosencontrar un mecanismo que permita forzar al usuario a seguir esa definicin. En este tipo de casos sepuede utilizar una restriccin CHECK que revise antes de insertar si los datos cumplen o no con ciertasreglas. 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 insertalos datos aunque no cumplan la restriccin. Para resolver este problema se deben crear triggers paravalidar la entrada de datos.

    Categpk precio

    C01 200

    C02 250

    C03 300

    C04 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 delcampo nombrepk, ya que ser el usuario el que deber teclear el nombre y no debe haber nombrerepetidos 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 olor,

    centro varchar 60),

    PRIMARY KEY nombrepiezapk),

    FOREIGN KEY categpk) REFERENCES categoria categpk)

    );

    Categpk precio

    AAA 200

    C14 250

    Yt6 300

    C16 350

  • 7/24/2019 Manual de Bases de datos. Primera Version

    10/24

    10

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    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 maysculaseguida de dos nmeros del 0 al 9, se debe utilizar un trigger, el siguiente es un ejemplo de como sepuede crear:

    DELIMITER /

    CREATE TRIGGER chk_categpkBEFORE INSERT ON categoriaFOR EACH ROWBEGINIF NOT (NEW.categpk REGEXP 'C[0-9][0-9]')

    THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Mensaje de Error';

    END IF;END //

    DELIMITER ;

  • 7/24/2019 Manual de Bases de datos. Primera Version

    11/24

    11

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    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:

    Pieza

    nombrepiezapk categpk color centro

    Acetato C01 Blanco Norte

    Acrlico C01 Azul Norte

    Lana C02 Verde Sur

    Pao C04 Blanco Norte

    Categora

    categpk precio

    C01 120

    C02 150

    C03 180

    C04 200

  • 7/24/2019 Manual de Bases de datos. Primera Version

    12/24

    12

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

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

    Ahora vamos tratar de insertar un dato con la llave primaria duplicada, y despus un registro cuyocategpk 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 enla tabla de categora:

  • 7/24/2019 Manual de Bases de datos. Primera Version

    13/24

    13

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

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

    proveedor

    nombrepk direccin ciudad provincia

    Proveedora del centro s.a. de c.v AV juarez no. 201 Puebla PueblaDistribuidora mexico Boulevard ALM 517 Jalapa Veracruz

    Almacenes generales Zaragoza no. 365 Quertaro Quertaro

    Talleres Aguilar Valle de seora no. 547 Len Guanajuato

    suministra

    nombrepk nombrepiezapk cantidad

    Proveedora del centro s.a. de c.v acetato 1000

    Distribuidora mexico acetato 500

    Distribuidora mexico lana 600Distribuidora mexico pao 150

    Almacenes generales acrilico 5000

    Almacenes generales lana 300

    Talleres Aguilar lana 3000

  • 7/24/2019 Manual de Bases de datos. Primera Version

    14/24

    14

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    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]

  • 7/24/2019 Manual de Bases de datos. Primera Version

    15/24

    15

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    Esta instruccin actualiza los valores de las columnas de las filas ya existentes, en una tabla. La clusulaSET indica las columnas que se desea modificar y los valores que se deben dar. Cada valor se puede darcomo una expresin, o una instruccin DEFAULT para establecer una columna de forma explcita a suvalor predeterminado. La clusula WHERE, especifica las condiciones que identifican qu filas van aactualizarse. 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 defilas 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

    Pieza

    nombrepiezapk categpk color centro

    Acetato C01 Blanco Norte

    Acrlico C01 Azul Norte

    Lana C02 Verde Sur

    Pao C04 Blanco Norte

    Se debe tener cuidado al realizar la operacin UPDATE, ya que si no se incluye la clusula WHERE, seactualizarn 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 leindicamos con un WHERE a que proveedor vamos a actualizar, los actualiza a todos.

  • 7/24/2019 Manual de Bases de datos. Primera Version

    16/24

    16

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    Si lo que necesitamos es solo actualizar la informacin de Almacenes generales, la instruccin debequedar 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 nuestrosproveedores ya le vamos a comprar el producto pao, por lo tanto necesitamos borrar de la tablasuministra 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.

  • 7/24/2019 Manual de Bases de datos. Primera Version

    17/24

    17

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    SENTENCIA ALTER TABLE

    La sentencia ALTER TABLE es utilizada para agregar, borrar o modificar columnas en una tabla, tambinsirve 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_nameADD new_column_name column_definition[ FIRST | AFTER column_name ];

    Para agreagar una columna vamos a tomas como ejemplo la tabla proveedor para agregar una columnaque 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 celulara la tabla de proveedor, estos campos deben quedar despus de la direccin:

    ALTER TABLE proveedorADD tel_fijo numeric(10) NULL

    AFTER direccion,ADD tel_celular numeric (12) NULL

    AFTER tel_fijo;

  • 7/24/2019 Manual de Bases de datos. Primera Version

    18/24

    18

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    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_nameMODIFY 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 proveedorMODIFY tel_fijo numeric (12) NULL,MODIFY tel_celular numeric (12) NULL;

  • 7/24/2019 Manual de Bases de datos. Primera Version

    19/24

    19

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    Borrar columnasPara borrar columnas de una tabla, se utiliza la sentencia DROP, con la sintaxis siguiente:

    ALTER TABLE table_nameDROP COLUMN column_name;

    Renombrar columnas

    Para cambiar el nombre a una columna se utiliza la sentencia CHANGE COLUMN, con la sintaxissiguiente:

    ALTER TABLE table_nameCHANGE COLUMN old_name new_name

    column_definition[ FIRST | AFTER column_name ]

    Vamos a cambiar el nombre del campo tel_fijo por telfijo:

    ALTER TABLE proveedorCHANGE 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_nameRENAME TO new_table_name;

    Por ejemplo vamos a crear una tabla nueva con el nombre ejemplo, despus cambiaremos su nombrepor el de tabla1.

    CREATE TABLE ejemplo(llave numeric (10) NOT NULL,PRIMARY KEY (LLAVE)

    );

  • 7/24/2019 Manual de Bases de datos. Primera Version

    20/24

    20

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    ALTER TABLE ejemploRENAME TO tabla1;

    Borrar tablas

    Para borrar una tabla se utiliza la sentencia DROP, la sintaxisMas 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 dedatos generar un error (a menos que especifique la IF EXISTS en los parmetros de la sentencia DROPTABLE)

    El ejemplo anterior tambin se pudo escribir as:

    DROP TABLE IF EXISTS tabla1;

    MySQL Keys, Constraints and IndexesPrimary Keys Create, alter, and drop primary keysUnique Constraints Create, add, and drop unique constraintsIndexes Create, drop and rename indexes (performance tuning)

  • 7/24/2019 Manual de Bases de datos. Primera Version

    21/24

    21

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    NDICES

    El entendimiento de los ndices en los manejadores de bases de datos, es crucial tanto para losdesarrolladores, 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 unndice, MySQL debe comenzar con la primera fila y luego leer a travs de toda la tabla para buscar lasfilas correspondientes. Cuanto mayor sea la tabla, esto cuesta ms. Si la tabla tiene un ndice de lascolumnas en cuestin, MySQL puede determinar rpidamente la posicin de buscar en el medio delarchivo de datos sin tener que mirar todos los datos. Esto es mucho ms rpido que leer cada fila deforma secuencial.

    Las consultas a una base de datos pueden funcionar sin tener ndices, sin embargo, lo harn de unamanera ms lenta. Un ndice crea una entrada para cada valor que aparezca en las columnas puestas enun ndice.

    Crear un ndice

    Hay 2 maneras de crear un ndice. Se puede crear un ndice cuando se crea una tabla usando ladeclaracin de la CREATE TABLE, o puede utilizar la declaracin CREATE INDEX despus de que sehaya 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. Estadeclaracin sera tanto crear la tabla, as como el ndice al mismo tiempo.

  • 7/24/2019 Manual de Bases de datos. Primera Version

    22/24

    22

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    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 queconsiste en las columnas de apellido y nombre.

    A continuacin, se mostrar cmo crear la tabla primero y luego crear el ndice mediante la instruccinCREATE 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 INDEXcreara 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 lainstruccin DROP INDEX en MySQL es:

    DROP INDEX index_nameON table_name;

    Ejemplo

    DROP INDEX contacto_idxON 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 dossintaxis diferentes .

    La sintaxis para cambiar el nombre de un ndice utilizando la sentencia ALTER TABLE en MySQL 5.6 yanteriores es:

  • 7/24/2019 Manual de Bases de datos. Primera Version

    23/24

    23

    ISC. ISRAEL A. ESTRADA CORTS Taller de bases de datos

    ALTER TABLE table_nameDROP 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_nameRENAME 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 deMySQL, es necesario utilizar la sentencia ALTER TABLE para eliminar primero el viejo ndice y volver acrear el nuevo ndice.

    ALTER TABLE contactosDROP INDEX contacto_idx,ADD INDEX contacto_new_index (apellido, nombre);

    En este ejemplo, hemos renombrado el ndice denominado contacto_idx a contacto_new_index . Estose 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 paracambiar el nombre del ndice.

    Por ejemplo (MySQL 5.7 y posteriores):

    ALTER TABLE contactosRENAME INDEX contacto_idx TO contacto_new_index;

    Esto tambin podra cambiar el nombre del ndice de contacto_idx a contacto_new_index. Si no estseguro de qu versin de MySQL se est ejecutando, es ms seguro utilizar la primera sintaxis paracambiar el nombre de un ndice.

  • 7/24/2019 Manual de Bases de datos. Primera Version

    24/24

    24

    Clausulas MySQL

    DISTINCT Obtiene registros nicos

    La clusula DISTINCT se utiliza para eliminar los duplicados del conjunto de resultados. La clusulaDISTINCT slo se puede utilizar con las instrucciones SELECT.

    La sintaxis de la clusula DISTINCT en MySQL es:

    SELECT DISTINCT expressionsFROM tables[WHERE conditions];

    Nota

    Cuando se proporciona una nica expresin de la clusula DISTINCT, la consulta devolver los valoresnicos para esa expresin. Cuando se proporciona ms de una expresin en la clusula DISTINCT, laconsulta 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 DISTINCTpara 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 enla instruccin SELECT.

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