Listado completo de tutoriales
41 - Típos de índices (create y drop) |
Dijimos que hay 3 tipos de índices:
El índice llamado primary se crea automáticamente cuando establecemos un campo como clave primaria.
Los valores indexados deben ser únicos y además no pueden ser nulos. Una tabla solamente puede tener una clave primaria. Puede ser multicolumna, es decir, pueden estar formados por más de un campo.
Vamos a otro tipo de índice común. Un índice común se crea con "create index", los valores no necesariamente son únicos y aceptan valores "null". Puede haber varios por tabla.
Vamos a trabajar con nuestra tabla "libros".
create table libros( codigo int not null, titulo varchar(40), autor varchar(30), editorial varchar(15), precio decimal(6,2) );
Un campo por el cual realizamos consultas frecuentemente es "editorial", indexar la tabla por ese campo sería útil.
Creamos un índice:
create index I_libros_editorial on libros(editorial);
Debemos definir un nombre para el índice (en este caso utilizamos como nomenclatura el carater I, luego el nombre de la tabla y finalmente el o los nombres del campo por el cual creamos el índice. Luego de la palabra clave on indicamos el nombre de la tabla y entre paréntesis el nombre del campo o los campos por el cual se indexa.
Veamos otro tipo de índice llamado "único". Un índice único se crea con "create unique index", los valores deben ser únicos y diferentes, aparece un mensaje de error si intentamos agregar un registro con un valor ya existente. Permite valores nulos y pueden definirse varios por tabla.
Crearemos un índice único por los campos titulo y editorial:
create unique index I_libros_tituloeditorial on libros(titulo,editorial);
Para eliminar un índice usamos "drop index". Ejemplo:
drop index I_libros_editorial; drop index I_libros_tituloeditorial;
Se elimina un índice con "drop index" seguido de su nombre.
Podemos eliminar los índices creados, pero no el creado automáticamente con la clave primaria.
drop table if exists libros; create table libros( codigo serial, titulo varchar(40) not null, autor varchar(30), editorial varchar(15), primary key(codigo) ); -- Creamos un índice común por el campo editorial: create index I_libros_editorial on libros(editorial); -- Ahora crearemos un índice único por los campos titulo y editorial: create unique index I_libros_tituloeditorial on libros(titulo,editorial); -- Borramos los dos índices que acabamos de crear: drop index I_libros_editorial; drop index I_libros_tituloeditorial;
La ejecución de este lote de comandos SQL genera una salida similar a: