Veamos el otro tipo de índice, ú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. Debemos darle un nombre.
Vamos a trabajar con nuestra tabla "libros".
drop table if exists libros;
Creamos la tabla con la siguiente estructura:
create table libros( codigo integer primary key, titulo text, autor text, editorial text, precio real );
Creamos un índice único sobre los campos titulo y editorial:
create unique index I_libros_tituloeditorial on libros(titulo,editorial);
Empleamos el comando create unique index para la creación, indicando seguidamente el nombre del índice, luego la palabra clave on, el nombre de la tabla y entre paréntesis el o los campos por el que se crea el índice.
Con este tipo de índice no podemos insertar dos filas que contengan en los campos titulo y editorial el mismo valor.
Insertamos algunos registros:
insert into libros (titulo, autor, editorial, precio) values('El aleph', 'Borges', 'Emece', null); insert into libros (titulo, autor, editorial, precio) values('Antología poética', 'Borges', 'Planeta', 39.50); insert into libros (titulo, autor, editorial, precio) values('Java en 10 minutos', 'Mario Molina', 'Planeta', 50.50); insert into libros (titulo, autor, editorial, precio) values('Alicia en el pais de las maravillas', 'Lewis Carroll', 'Emece', 19.90); insert into libros (titulo, autor, editorial, precio) values('Martin Fierro', 'Jose Hernandez', 'Emece', 25.90); insert into libros (titulo, autor, editorial, precio) values('Martin Fierro', 'Jose Hernandez', 'Paidos', 16.80); insert into libros (titulo, autor, editorial, precio) values('Aprenda PHP', 'Mario Molina', 'Emece', 19.50); insert into libros (titulo, autor, editorial, precio) values('Cervantes y el quijote','Borges', 'Paidos', 18.40);
Recuperamos todas las filas:
select * from libros;
Intentamos insertar una fila que tienen en los campos título y editorial los mismos valores que otra fila:
insert into libros (titulo, autor, editorial, precio) values('Cervantes y el quijote','Borges', 'Paidos', 18.40);
Se genera el error:
UNIQUE constraint failed: libros.titulo, libros.editorial: insert into libros (titulo, autor, editorial, precio) values('Cervantes y el quijote','Borges', 'Paidos', 18.40);
Eliminamos el índice:
drop index I_libros_tituloeditorial;
Intentamos de eliminar nuevamente el índice:
drop index I_libros_tituloeditorial;
Se genera un error:
no such index: I_libros_tituloeditorial: drop index I_libros_tituloeditorial;
Si cambiamos el comando anterior con la sintaxis:
drop index if exists I_libros_tituloeditorial;
No se genera error ya que no existe el índice.
Puede ejecutar comandos de SQLite directamente en el sitio sin tener que instalar nada en su computadora.
xxxxxxxxxx
drop table if exists libros;
create table libros(
codigo integer primary key,
titulo text,
autor text,
editorial text,
precio real
);
create unique index I_libros_tituloeditorial on libros(titulo,editorial);
insert into libros (titulo, autor, editorial, precio)
values('El aleph', 'Borges', 'Emece', null);
insert into libros (titulo, autor, editorial, precio)
values('Antología poética', 'Borges', 'Planeta', 39.50);
insert into libros (titulo, autor, editorial, precio)
values('Java en 10 minutos', 'Mario Molina', 'Planeta', 50.50);
insert into libros (titulo, autor, editorial, precio)
values('Alicia en el pais de las maravillas', 'Lewis Carroll', 'Emece', 19.90);
insert into libros (titulo, autor, editorial, precio)
values('Martin Fierro', 'Jose Hernandez', 'Emece', 25.90);
insert into libros (titulo, autor, editorial, precio)
values('Martin Fierro', 'Jose Hernandez', 'Paidos', 16.80);
insert into libros (titulo, autor, editorial, precio)
values('Aprenda PHP', 'Mario Molina', 'Emece', 19.50);
insert into libros (titulo, autor, editorial, precio)
values('Cervantes y el quijote','Borges', 'Paidos', 18.40);
select * from libros;
insert into libros (titulo, autor, editorial, precio)
values('Cervantes y el quijote','Borges', 'Paidos', 18.40);
drop index I_libros_tituloeditorial;
drop index I_libros_tituloeditorial;
drop index if exists I_libros_tituloeditorial;