domingo, 24 de abril de 2016

Restricciones NOT NULL, Check, Default, AutoIncrement y Unique en MariaDB (MySQL) Parte I

Buenos días queridos lectores, el día de hoy hablaremos de varios temas de utilidad, hablaremos de las restricciones al crear las tablas, ya dejamos atrás aquellos primeros pasos, donde solo creamos tablas, insertamos valores y mostramos datos, ahora entraremos más en forma a lo que es MariaDB, y muchas utilidades y restricciones que nos permitirán crear bases de datos complejas y funcionales. Pero vamos poniendo manos a la obra, que eso es lo que nos gusta.

NOT NULL

La restricción NOT NULL, nos ayudará a exigir que un campo en una base de datos, deba ser llenado forzosamente, en un campo que sea llave primaria, es obligatorio que el campo tenga algún dato, pero en un campo que no es llave, debemos indicarle a la base de datos que deseamos que ese campo, aunque no sea campo llave, queremos que sea llenado obligatoriamente, pero vamos por pasos y veremos un ejemplo más adelante.

Check

La restricción Check, nos permitirá indicarle a la base de datos, que se cerciore que la información contenida en el campo es congruente, y no vaya a causar alguna inconsistencia lógica en los datos, esta restricción podría utilizarse por ejemplo en un partido de futbol, para que la base de datos verifique el el equipo local no es el mismo que el equipo visitante.

Default

La restricción Default se encarga de asignar un valor predeterminado al campo especificado, en caso de que no se le asigne valor al momento de ingresar los datos, la base de datos ingresará el valor que le hayamos indicado en la restricción Default, pero si no entienden en este momento, no desesperen, ya entenderán con los ejemplos que veamos.

Autoincrement

La restricción autoincrement nos ayudará a incrementar un valor numérico automáticamente, se utiliza mucho al asignar id's a los registros, nos permite ir aumentando automáticamente el valor de la columna especificada.

Unique

La restricción Unique es realmente un índice (tema que veremos más adelante), nos ayuda a indicarle a la base de datos que el dato en ese campo es único y no puede repetirse, es parecido a una llave primaria con la diferencia que en una llave primaria el campo no puede estar vacío y en unique, puede existir solo un registro con ese dato vacío.

Bien, pasemos a los ejemplos.

Crearemos una base de datos nueva llamada resultados, en ella podremos guardar los resultados de los partidos de futbol de cualquier liga, copa o mundial, la iremos creando a lo largo de varios post. Pero empezaremos con lo básico.

create database resultados;
use resultados;

create table paises(
idpais int auto_increment primary key,
codigopais varchar(4) unique not null,
nombre varchar(100) unique not null,
bandera varchar(100),
fecha_creacion date,
fecha_modificacion date);


En el script creamos la base de datos resultados y le agregamos la tabla  paises, como vemos el campo idpais es la llave primaria (primary key) y también es un campo auto_increment, creamos un indice con la clausula unique a los campos codigopais y nombre, esto quiere decir que no se puede repetir ni el mismo código, ni el mismo nombre de otro país, también tenemos declarados esos campos de codigopais y nombre como NOT NULLde esta manera, la base de datos exigirá un valor para poder continuar, pero hagamos la prueba, y para eso le insertaremos datos a esa tabla país.

insert into paises (codigopais, nombre, bandera, fecha_creacion) values
('MEX', 'MEXICO', 'mexico.png', now());

Esta sentencia INSERT es un poco distinta a la que habíamos visto en los primeros pasos, esta sentencia INSERT es un poco más compleja y un poco mas profesional, aquí le estamos diciendo que insertaremos los valores a las columnas que están entre los primeros paréntesis, nótese que no estamos declarando el idpais, recordemos que es auto_increment y su valor será asignado directamente de la base de datos, tampoco estamos insertando la fecha_modificacion, ya que será ingresada cuando el registro se modifique, tenemos la funcion NOW(), que obtiene la fecha y la hora actual, es una función de sistema como muchas otras, pero que veremos mas adelante, en la sentencia INSERT que veíamos anteriormente no especificabamos las columnas, ya que las añadiamos todas, en esta ocasión, solo las que necesitamos. 

Verificamos que el registro se hizo correctamente, con la sentencia SELECT

select * from paises;

El resultado de la siguiente consulta se muestra en la siguiente imagen:


Como ven la llave primaria es de color amarllo, y los índices únicos son de color rojo, anteriormente habíamos visto también que las llaves foráneas eran de color verde, pero por el momento, no tenemos ninguna llave foránea, veamos también, como el id_pais es 1, se pudo automáticamente debido a la restricción auto_increment, pero ¿que pasaría si quisiera "engañar" a la base de datos y volver a agregar a México, pero con otro código?. Intentémoslo a ver que pasa

insert into paises (codigopais, nombre, bandera, fecha_creacion) values
('MX', 'MEXICO', 'mexico.png', now());


Como ven, al intentar ingresar a MEXICO con otro código, no nos permite, debido a que MEXICO ya existe, y no lo puede duplicar, porque lo declaramos como UNIQUE, lo mismo pasaría si intentara agregar el código MEX en otro registro.

Ahora vamos a ingresar otro país, para comprobar, que el idpais ahora será de 2

insert into paises (codigopais, nombre, bandera, fecha_creacion) values
('EUA', 'Estados Unidos', 'eua.png', now());

Y ahora comprobamos que se haya insertado correctamente

select * from paises;


Pero ¿Que paso con el idpais 2?, si se fijan del 1 se brinca al 3, ¿cual es la razón?, recordemos que intentamos ingresar nuevamente el país MEXICO, la base de datos lo impidió debido a la restricción UNIQUE, sin embargo, el idpais 2, iba en el registro, al fallar la inserción, también se descarta ese idpais que traía el error, si queremos agregar ese idpais 2 en la base de datos, necesitaremos agregarlo manualmente, y para eso insertaremos la siguiente consulta.

insert into paises (idpais, codigopais, nombre, bandera, fecha_creacion) values
(2,'ARG', 'Argentina', 'argentina.png', now());

select * from paises;


Como ven, le asignamos al nuevo país el idpais que se había descartado, y para eso en el INSERT INTO añadimos la columna idpais y le asignamos el valor manualmente, Si ahora insertamos un nuevo país, y dejamos que la base de datos asigne nuevamente el idpais de manera automática obtendremos el siguiente resultado:

insert into paises (codigopais, nombre, bandera, fecha_creacion) values
('PAR', 'Paraguay', 'paraguay.png', now());


Si dejamos que la base de datos vuelva a asignar los valores automáticamente, tenemos que continua de manera normal.

Hasta aquí el post queridos lectores y estudiantes, espero que haya sido de su agrado y de su utilidad. Espero compartan, comenten, den +1, o clic en algún anuncio que les interese. Hasta pronto




Banderas de Visitantes

Flag Counter