SQL — Structured Query Language
El SQL o Lenguaje Estructurado de Consultas, define las reglas de comunicación entre bases de datos estructuradas y el ambiente externo, entendiendose como ambiente externo, cualquier herramientas de software que desee interacturar con una base de datos relacionales (también tenemos bases de datos no estructuradas).
SQL en algunos casos puede llegar a definirse como un lenguaje de programación, aunque no tenga todas las características de ello. En realidad SQL tiene disponible algunas opciones que vamos a ver más adelante que nos permiten desarrollar procesos programados.
SQL trabaja con comandos o sentencias, mediante la definición de su sintaxis podemos ejecutar todas las operaciones posibles.
Pero y qué es una base de datos relacional?
Empecemos por definir que es una base de datos. De acuerdo con el sitio web de oracle.com (Principal motor de base de datos SQL)
Una base de datos es una recopilación organizada de información o datos estructurados, que normalmente se almacena de forma electrónica en un sistema informático. Normalmente, una base de datos está controlada por un sistema de gestión de bases de datos (DBMS)
Un motor de base de datos o DBMS es un programa, dedicado a servir de intermediarios entre las bases de datos y las aplicaciones que las utilizan como función principal, cada uno de estos cumple una tarea especifica, que van desde crear la Base de Datos hasta administrar el uso y acceso a esta. Es a través del cliente DBMS que podemos ejecutar los comandos o sentencias SQL sobre unabase de datos.
Conceptos claves de una base de datos
Cuando almacenamos datos, realizamos el modelado de estos, de forma tal que identifiquemos que valores hacen parte de una entidad de información. Una entidad de información es un conjunto de valores que permiten definir un objeto, ente o persona. Entonces cuando trabajamos con bases de datos, modelamos las entidades de información y sus relaciones, por ello hablamos de bases de datos relacionales.
La unidad mínima de datos que podemos manejar es el campo. Un campo es cada uno de los valores que vamos identificar, cada uno de ellos tiene un nombre que permite conocer la naturaleza del valor almacenado.
El conjunto de campos que permiten definir una entidad de información, lo denominamos tabla, entonces una tabla será uno o más campos que juntos representan un modelo.
Luego podemos estas tablas relacionarlas por alguno de los campos de esta forma, podemos tenemos modelos de información mucho más elaborados.
Cada representación de modelo se guarda en la tabla como una entrada o línea, esto lo denominamos registro entonces una tabla puede contener 0 a n registros.
Qué procesos o acciones podemos realizar con SQL?
Vamos a dividir los procesos en las siguiente categorías:
- DDL (Data Definition Language) — Estructura de base de datos
- DML (Data Manipulation Language)— Gestión de registros
- DQL(Data Query Language) — Consulta de registros
- Procesos programados
DDL — Estructura de base de datos
Como indicamos anteriormente una base de datos, se organiza de forma que los datos sean estructurados y relacionados. Con esta premisa, entendamos como el SQL nos ayuda a realizar las siguientes operaciones sobre una base de datos:
Creación de base de datos:
Paso principal para iniciar la definición y estructuración de nuestros datos, la creación de una base de datos, se realiza desde el cliente DBMS, al cual nos conectamos mediante la autenticación de datos, todo DBMS tiene una gestión de seguridad, de forma tal que sea necesario indicar un usuario y clave para poder acceder al cliente.
Para crear una base de datos basta con ejecutar el siguiente comando:
CREATE DATABASE nombre;
En el comando anterior, nombre es el identificador con el cual el DBMS va a reconocer nuestra base de datos. Cada DBMS adicionalmente puede tener opciones adicionales, pero en esencia todo DBMS acepta la sintaxis anterior (SQL ANSI)
Modificación de base de datos
Las alteraciones o actualizaciones sobre la base de datos como estructura, van a depender del DBMS en que se esté trabajando, pero básicamente la mayoría de ellos acepta actualizar dos variables, la codificación de los caracteres o ENCODING (codificación) y a la forma forma en que se realizan las búsquedas y orden de resultados, que llamamos COLLATE (colación).
De acuerdo a las opciones del manejador, el comando será ajustado pero todo comando de ajuste sobre la base de datos tendrá al menos esta sintaxis:
ALTER DATABASE name <opciones>;
Opciones del comando ALTER DATABASE en los DBMSs mas populares:
Borrado de base de datos
Mediante el siguiente comando, podemos borrar la base de datos y todo su contenido. Es de especial cuidado este comando, pues luego de aplicado, todo lo relacionado a la base de datos será excluido sin posibilidad de recuperación.
El comando necesario para realizar esta operación es el siguiente:
DROP DATABASE name;
Ahora entremos en detalle de la estructura de una base de datos, como comentamos anteriormente, una base de datos está compuesta de tablas (que a su vez está compuesta por campos) y relaciones, cada tabla puede tener campos, índices, clave primaria y claves foráneas.
Creación de tablas
Para crear una tabla, definimos su nombre y campos que la componen. En este caso es importante recordar que las tablas se componen de campos, y cada campo puede tener un tipo de dato.
Los tipos de datos soportados por la mayoría de DBMS son los siguientes:
- Caracteres
- Cadena de Caracteres (hasta 512 caracteres)
- Enteros
- Decimales
- Textos o memo
- Binarios
Cada DBMS maneja nombres diferentes para los tipos de datos, así como poseen tipos de datos propios, por ello es importante revisar los siguientes enlaces donde podemos acceder a los tipos de datos de los DBMS más populares:
Para crear una tabla, definimos su nombre y sus campos, de esta forma un comando aceptado por la mayoría de los DBMSs sería el siguiente:
CREATE TABLE name (
field1 datatype,
field2 datatype,
field3 datatype,
....
);
En el script anterior, tanto name (nombre de la tabla) como field1, field2, field3, …, fieldn son los campos o columnas que componen las tablas, esos identificadores deben seguir reglas como:
- No usar caracteres especiales
- No deben contener espacios (algunos DBMS aceptan pero no se recomienda)
- Usar en la medida de posible letras minúsculas.
Ejemplo de creación de tablas en los DBMSs más populares:
Creando una tabla en MySQL.
CREATE TABLE personas (
id int,
apellidos varchar(255),
nombres varchar(255),
direccion varchar(255),
ciudad varchar(255)
);
Creando una tabla en PostgreSQL.
CREATE TABLE IF NOT EXISTS personas (
id INT PRIMARY KEY,
nombres VARCHAR(50) NOT NULL,
apellidos VARCHAR(50) NOT NULL,
genero CHAR(1),
email VARCHAR(100) UNIQUE,
pais_nacimiento VARCHAR(50)
);
Creando una tabla en SQL Server.
CREATE TABLE employees
( id INT NOT NULL,
nombres VARCHAR(50) NOT NULL,
apellidos VARCHAR(50),
salario MONEY
);
Observa que la sintaxis es bien similar, pero hay que tener cuidado con los tipos de datos, pues cada DBMS tiene su sintaxis, sobre todo en campos especializados o de trato especial.
Agregando campos a tablas existentes
Luego de definida una tabla es posible, es posible ajustar sus campos, sin necesidad de crearla nuevamente, esto significa que podemos agregar nuevos campos, o incluso podemos modificar los existentes, para ello vamos a hacer uso del comando:
ALTER TABLE name ....
El comando ALTER TABLE nos permite realizar cambios sobre la tabla indicada, nuevamente la sintaxis puede tener ligeros cambios entre DBMS, pero en esencia se mantiene su estructura, veamos por ejemplo como podemos agregar un campo:
ALTER TABLE nombre ADD fecha_nacimiento DATE;
El comando anterior, agrega el campo fecha_nacimiento de tipo DATE (fecha) a la tabla nombre. Es un comando ANSI valido en los 3 manejadores que estamos mencionando en la documentación.
Cambiando la definición de un campo
En este caso usamos nuevamente el comando ALTER TABLE
sólo que cada manejador implementa la forma de cambiar la definición de un campo, veamos las diferentes sintaxis:
- Cambiando un campo en MySQL
ALTER TABLE nombre MODIFY fecha_nacimiento VARCHAR(10)
- Cambiando un campo en PostgreSQL
ALTER TABLE nombre ALTER COLUMN fecha_nacimiento SET DATA TYPE VARCHAR(10);
- Cambiando un campo en SQL Server
ALTER TABLE nombre ALTER COLUMN fecha_nacimiento VARCHAR(10);
Observando los comandos, comprobamos que aunque los DBMSs intentan mantener una sintaxis similar, cada uno de ellos tiene opciones y manejos diferentes, por lo cual te dejo acá el link a la documentación oficial del comando.
Borrando campos
Así como realizamos ajustes sobre campos, ya sea agregando campos tiempo después de crear la tabla, o cambiando la definición de los existentes, con el comando ALTER TABLE
también es posible realizar borrado de campos.
El comando para realizar esta operación es:
ALTER TABLE nombre_tabla
DROP COLUMN nombre_campo;
Este comando es valido en los DBMS más conocidos del mercado como: MySQL, PostgreSQL y SQL Server.
Agregando claves primarias
Empecemos por recordar o entender que son las claves primarias. Una clave primaria es una característica que poseen las tablas de base de datos relacionales, que nos ayuda en la forma de organizar los datos, indicando que ese campo debe poseer valores únicos, es decir cada valor sólo va a estar asignado a un registro, de esta forma garantizamos que podemos identificar cada registro univocamente, de igual forma una clave primaria nos ayuda en las búsquedas y en la forma en que relacionamos los datos de una tabla con otra, pues a través de ella es que el DBMS sabe que registro está relacionado con quien.
Es posible tener tablas sin claves primarias? Si es posible pero es una mala práctica, porque en general siempre cada registro posee alguna forma de identificación única, luego al no definirla hacemos que el DBMS realice trabajo que impacta en el rendimiento de nuestras consultas y operaciones.
Una clave primaria puede ser creada en 2 momentos, tanto en la creación de la tabla como posteriormente, como una actualización. La sintaxis para crear una clave primaria sigue a continuación, aunque puede tener algunas opciones que pueden variar por DBMS, en general se aplica de la siguiente forma:
Al momento de crear la tabla. En este ejemplo usamos el campo id como identififcador de cada registro de las tablas.
CREATE TABLE nombre_tabla (
id int NOT NULL,
...
PRIMARY KEY (id)
);
Mediante la actualización de la tabla.
ALTER TABLE nombre_tabla ADD CONSTRAINT pk_nombre_tabla PRIMARY KEY (id)
Agregando claves foráneas
Una clave foránea o llave extranjera, lo que nos permite definir comportamientos o acciones a ejecutar cuando un registro tiene otros registros relacionados.
Algunas acciones que son soportadas por la mayoría de DBMS son:
- Restringir la actualización del campo relacionado o el borrado de registros si existen existen registros relacionados mediante una clave foránea.
- Actualizar el campo relacionado en cascada o borrar registros en cascada a partir del registro principal, es decir borrar los registros relacionados a partir del principal.
- Asignar valor null al campo relacionado en los registros relacionados al borrar.
Como agregamos una clave foránea? Esta sintaxis varía de DBMS pero vamos a intentar unificar una sintaxis, tanto en la creación como en la actualización de tablas.
Creando una tabla podemos crear una clave foránea de esta forma:
CREATE TABLE nombre_tabla (
id int NOT NULL,
PRIMARY KEY (id),
CONSTRAINT fk_tabla_relacionada FOREIGN KEY (id)
REFERENCES tabla_relacionada(campo_relacionado)
);
En la actualización mediante el comando ALTER TABLE
podemos crear claves foráneas de la siguiente forma:
ALTER TABLE nombre_tabla
ADD CONSTRAINT fk_tabla_relacionada
FOREIGN KEY (id) REFERENCES tabla_relacionada(campo_relacionado);
Veamos las acciones que podemos ejecutar, recordando que no todos los DBMS lo soportan:
Veamos la cláusula ON UPDATE:
ON UPDATE RESTRICT: el valor predeterminado: si intenta actualizar un id en la tabla principal, el DBMS rechazará la operación si al menos un relacionado se vincula a la tabla principal.
ON UPDATE NO ACTION: igual que RESTRINGIR.
ON UPDATE CASCADE: la mejor por lo general, si actualiza un id en un registro de la tabla principal, el DBMS lo actualizará en consecuencia en todas las filas de la tabla relacionada que hacen referencia a este (pero no se activan las relaciones en la tabla de relacionada, advertencia).
ON UPDATE SET NULL: si actualiza un id en un registro de la tabla principal, el motor establecerá el id relacionados en la tabla relacionada en NULL (debe estar disponible ese valor en el campo relacionado).
Y ahora en el lado ON DELETE:
ON DELETE RESTRICT: el valor predeterminado: si intenta eliminar un ID en la tabla princiapl, el motor rechazará la operación si al menos un registro relacionado existe, puede salvarle la vida.
ON DELETE NO ACTION: igual que RESTRINGIR
ON DELETE CASCADE: peligroso: si elimina un registro de la tabla principal, el motor también eliminará los registros relacionados. Esto es peligroso, pero se puede usar para realizar limpiezas automáticas en tablas secundarias.
ON DELETE SET NULL: si elimina una fila de la tabla principal, los registro relacionados tendrán automáticamente la relación con NULL.
Agregando indices
Los índices en las tablas son elementos que nos permiten mejorar el performance a la hora realizar búsquedas, además de permitir definir con campos valores únicos en cada registros, de tal forma ese valor no se repita.
Como agregamos un índice? Es sencillo, podemos realizar esta operación mediante la siguiente sintaxis:
CREATE [UNIQUE] INDEX <nombre_indice> ON <nombre_tabla> (<campo1...>);
Cuando creamos un indice podemos definir uno o más campos, de esta forma podemos definir conjunto de campos que su combinación sea única mediante la palabra UNIQUE
pero no siendo obligatorio su uso.
Borrando tablas
Con esta operación borramos una tabla (es decir todos sus campos), su clave primaria, sus claves foráneas (relaciones) e índices.
El comando necesario para realizar esta operación es el siguiente:
DROP table name;
DML — Gestión de registros
En este conjunto de operaciones, se encuentran los procesos de inserción de nuevos registros, actualización de registros o borrado de registros.
Comencemos por la inserción o ingreso de nuevos datos.
Inserción de registros
Para realizar la inserción o el ingreso de nuevos registros o filas a una tabla usamos el comando INSERT INTO
donde especificamos los campos o columnas y sus respectivos valores.
La sintaxis de este comando es similar en todos los DBMS populares. Sigue la anatomía de la sintaxis:
INSERT INTO nombre_tabla (campo1, campo2, ...)
VALUES (valorCampo1, valorCampo2, ...)
De esta forma conseguimos agregar un registro en la tabla nombre_tabla
, es importante entender que existen algunas reglas a seguir:
- Campos texto o fecha deben ir entre comillas simples su valor
- Campos númericos pueden ir o no entre comillas
- Ojo con los tipos de datos, si intentamos asignar un valor de texto a un campo numérico (entero o decimal) el DBMS nos va a dar un error.
- Si tenemos campos que no aceptan nulos, significa que debemos siempre mandar un valor, hasta puede ser vacío entre comillas pero debe enviarse un valor.
Actualización de registros
Cuando deseamos actualizar un registro, debemos tener en cuenta 2 aspectos:
- Campos a actualizar
- Condición que deben cumplir los registros que vamos a actualizar
Con las anteriores premisas, podemos mostrar la sintaxis que debe seguir el proceso de actualización:
UPDATE nombre_tabla SET campo1 = 'valor1', campo2 = 'valor2', ...
-- condicion
WHERE campoX = 'valorX' AND / OR campoY = 'valorY'
Otro punto interesante, entender sobre condiciones, cuando aplicamos la palabra WHERE
le indicamos al DBMS que queremos filtrar los registros, ese filtro puede ser por 1 o más campos, cuando usamos más de un campo entran en escena los operadores lógicos, estos se aplican tanto a la actualización, como al borrado como a la consulta. Más adelante tendremos una explicación detallada de eso.
Borrado de registros
El proceso de borrar o quitar registros, es importante entenderlo para no realizar operaciones que luego deriven en pérdida de datos. Cuando borramos registros o líneas, lo hacemos sobre una tabla aplicando una condición, que puede ser simple o compleja, entendiendo que una condición compleja amerita el uso de los operadores lógicos, tal como en el proceso de actualización y que vamos a ver en la siguiente sección.
Sintaxis o anatomía de una operación de borrado
DELETE FROM nombre_tabla
-- condición
WHERE campo1 = 'valor1' AND / OR campo2 = 'valor2' ...
Importante entender que debemos aplicar las condiciones correctas para evitar perdida de datos.
Operadores Lógicos en SQL
Los operadores lógicos son las terminos que nos van a permitir definir condiciones complejas, donde podemos involucrar n campos y usando operadores de precedencia como los parentesis, definir prioridad de la evalución de la condición.
Operadores lógicos soportados por la mayoría de los DBMS:
- ALL: Verdadero si el conjunto completo de comparaciones es Verdadero.
- AND: Verdadero si ambas expresiones booleanas son Verdaderas.
- ANY: Verdadero si cualquier miembro del conjunto de comparaciones es TRUE.
- BETWEEN: Verdadero si el operando está dentro de un intervalo de valores.
- EXISTS: Verdadero si una subconsulta contiene cualquiera de las filas.
- IN: Verdadero si el operando es igual a uno de la lista de expresiones.
- LIKE: Verdadero si el operando coincide con un patrón.
- NOT: Invierte el valor de cualquier otro operador booleano.
- OR: Verdadero si cualquiera de las dos expresiones booleanas es Verdadera.
- SOME: Verdadero si alguna de las comparaciones de un conjunto es Verdadera.
En la parte de consulta de registros veremos en detalle estos operadores, pero entendiendo que en actualización y borrado podemos hacer uso de ello, con algunas restricciones.
Operaciones de actualización y borrado con una tabla principal y tablas relacionadas.
Vimos que las operaciones sobre registros las aplicamos sobre una tabla siempre, pero tanto el UPDATE
como el DELETE
pueden ser aplicados sobre una tabla principal teniendo en cuenta condiciones de tablas relacionadas.
Actualizando una tabla con condición relacionada a otras tablas.
Esta operación varia de acuerdo al DBMS, veamos como funciona en MySQL
UPDATE nombre_tabla
JOIN tabla_relacionada
SET nombre_tabla.campo = 'valor'
WHERE nombre_tabla.campo_relacionado = tabla_relacionada.campo_relacionado
En otros DBMS, el comando usa otra sintaxis, como sigue a continuación:
UPDATE nombre_tabla
SET nombre_tabla.campo = 'valor'
FROM tabla_relacionada
WHERE nombre_tabla.campo_relacionado = tabla_relacionada.campo_relacionado
Borrando registros de una tabla con condición relacionada a otras tablas.
Esta operación varia de acuerdo al DBMS, veamos como funciona en MySQL
DELETE nombre_tabla FROM nombre_tabla
JOIN tabla_relacionada
WHERE nombre_tabla.campo_relacionado = tabla_relacionada.campo_relacionado
En otros DBMS, el comando usa otra sintaxis, como sigue a continuación:
DELETE FROM nombre_tabla
USING tabla_relacionada
WHERE nombre_tabla.campo_relacionado = tabla_relacionada.campo_relacionado
Consulta de registros
Para consultar registros aplicamos el comando SELECT
, este comando tiene diversas formas de ser usado, empecemos por entender su anatomía básica y vamos avanzando gradualmente en cuando a complejidad y en potencia de uso.
Consulta simple
Podemos iniciar el conocimiento del comando SELECT
consultando información de una sola tabla, sigue la anatomía a continuación:
SELECT
-- CAMPOS
tabla1.campo1, tabla1.campo2, ...
-- o podemos usar * para todos los campos
-- DESDE TABLA
FROM tabla1
-- CONDICION
WHERE tabla1.campo1 = 'valor1' AND / OR tabla1.campo2 = 'valor2' ...
En la parte de condición, es importante entender que podemos usar los operadores lógicos que vimos anteriormente.
Consulta con tablas relacionadas
Cuando realizamos una consulta, podemos relacionar diferentes tablas, siempre que ellas estén relacionadas entre sus campos, importante y recomendable en esos casos usar: claves foráneas e indices para mejorar el rendimiento de la consulta.
Forma de definir una consulta con tablas relacionadas:
SELECT
-- CAMPOS
tabla1.campo1, tabla2.campo2, ...
-- DESDE TABLAS
FROM tabla1, tabla2, ...
-- CONDICION
WHERE tabla1.campo1 = 'valor1' AND / OR tabla2.campo2 = 'valor2' ...
Consulta con tablas relacionadas aplicando criterios
En consultas relacionadas tenemos disponible una palabra reservada llamada JOIN
que permite realizar consultas con diferentes criterios y que permite recuperar los registros aplicando criterios.
Con JOIN
podemos definir la forma en que se relacionan las tablas, es decir el grado de relación entre las tablas:
- Si los registros deben estar en ambas tablas. Condición de intersección.
- Toda la tabla A y lo que cumpla la condición de la tabla B
- Toda la tabla B lo que cumpla la condición de la tabla A
- Tabla A menos lo que cumpla la condición de ambas tablas
- Tabla B menos lo que cumpla la condición de ambas tablas
- Tabla A y Tabla B cumplan o no la condición
- Tabla A y Tabla B siempre que no cumplan o no la condición
Veamoslo en forma gráfica:
Seleccionando campos de forma condicional
Cuando definimos que campos queremos recuperar, podemos definir condiciones que permiten recuperar un campo u otro. Para ello usamos la sintaxis con las palabras CASE
yWHEN
.
Entendamos la sintaxis de la consulta con campos condicionales:
SELECT
CASE
WHEN condicion1 THEN campo1
WHEN condicion2 THEN campo2
WHEN condicionN THEN campoN
ELSE campoY
END,
campo3, campo4 ...
FROM
nombre_tabla1, nombre_tabla2, ...
-- CONDICION
WHERE
...
En la sentencia anterior, también es posible usar la relación de tablas con JOIN
y en la parte de condición elWHERE
sigue las mismas que hemos visto anteriormente con operadores lógicos.
Consultas y subconsultas
Una Subconsulta (también conocida como SUBQUERY o SUBSELECT) es una sentencia SELECT dentro de otra sentencia SQL, que realiza consultas que, de otro modo, serían extremadamente complicadas o imposibles de realizar.
SELECT
-- CAMPOS
campo1, campo2, ...
FROM
tabla AS T
WHERE
campo1 IN
(
SELECT
campo1
FROM
tabla2 AS T2
WHERE
T.id = T2.id
)
En el ejemplo anterior, tenemos una primera declaración SELECT que realiza un filtro a través del operador lógico IN
dentro de otro SELECT, es decir, una consulta dentro del resultado de otra consulta.
Hay algunas maneras de usar subconsultas:
- Subconsulta como una nueva columna de consulta (SELECCIONAR COMO CAMPO);
- Subconsulta como filtro de consulta (usando IN, EXISTS o operadores de lógicos de comparación);
- Subconsulta como fuente de datos de una consulta principal (SELECT FROM SELECT).
Subconsulta como una nueva columna de consulta
Una de las formas posibles de realizar una subconsulta es convertir el resultado de otra consulta en una columna dentro de su consulta principal.
Veamos la sintaxis necesaria para realizar esta operación:
SELECT
campo1,
(SELECT
COUNT(campo2)
FROM
tabla_relacionada
WHERE
tabla_relacionada.id = tabla.id ) AS cantidad
FROM
tabla
GROUP BY
tabla.id
Subconsulta como filtro de una nueva consulta
Otro ejemplo de uso de subconsultas es filtrar los resultados de otras consultas. Para este modelo podemos utilizar cláusulas IN
, EXISTS
u operadores de comparación, como =, >=, <=, entre otros.
La sintaxis funciona de esta forma:
SELECT
campo1, campo2, ...
FROM
tabla
WHERE
tabla.campo1 IN
(
SELECT
campo2
FROM
tabla2
WHERE
tabla.campo1 = tabla2.campo2
);
Procesos programados
En SQL podemos realizar operaciones programadas a partir de eventos o a partir de la solicitud de ejecución, estas operaciones pueden ser complejas y son capaces realizar operaciones sobre tablas, veamos sus aplicaciones.
Triggers
Un trigger es una clase especial de procedimiento almacenado que se ejecuta automáticamente cuando se produce un evento en el servidor de bases de datos. Los trigger se ejecutan cuando un usuario intenta modificar datos mediante un evento de lenguaje de manipulación de datos (DML). Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista. Estos triggers se activan cuando se desencadena cualquier evento válido, con independencia de que las filas de la tabla se vean o no afectadas.
La sintaxis varia entre los DBMS pero siguen una estructura común:
CREATE TRIGGER nombre_trigger
AFTER INSERT/UPDATE/DELETE ON tabla
FOR EACH ROW
BEGIN
-- CODIGO A EJECUTARSE
END;
¿Para qué sirve un trigger?
La principal función de los trigger es contribuir a mejorar la gestión de la base de datos. Gracias a ellos muchas operaciones se pueden realizar de forma automática, sin necesidad de intervención humana, lo que permite ahorrar mucho tiempo.
Otra de sus funciones es aumentar la seguridad e integridad de la información. Esto lo consiguen gracias a la programación de restricciones o requerimientos de verificación que permiten minimizar los errores y sincronizar la información.
Por otra parte, entre sus principales ventajas es que todas estas funciones se pueden realizar desde la propia base de datos, es decir, no es necesario recurrir a lenguajes externos de programación.
Store Procedures
Un Store Procedure o procedimiento almacenado, es un conjunto de comandos SQL que se pueden ejecutar a la vez, como en una función. Almacena tareas repetitivas y acepta parámetros de entrada para que la tarea se realice de acuerdo a la necesidad individual.
Beneficios de usar procedimientos almacenados
Un procedimiento almacenado proporciona una importante capa de seguridad entre la interfaz de usuario y la base de datos. Admite seguridad a través de controles de acceso a datos porque los usuarios finales pueden ingresar o cambiar datos, pero no escribir procedimientos.
Un procedimiento almacenado preserva la integridad de los datos porque la información se ingresa de manera consistente. Mejora la productividad porque las declaraciones en un procedimiento almacenado solo deben escribirse una vez.
El uso de procedimientos almacenados puede reducir el tráfico de red entre clientes y servidores, porque los comandos se ejecutan como un solo lote de código. Esto significa que solo la llamada para ejecutar el procedimiento se envía a través de una red, en lugar de que cada línea de código se envíe individualmente.
Sintaxis básica de la creación de un procedimiento almacenado:
CREATE PROCEDURE nombre_procedimiento
AS
acciones
GO;
Luego para ejecutarlo hacemos lo siguiente:
EXEC nombre_procedimiento;
Clientes de bases de datos
La gestión de base de datos, depende fundamentalmente de herramientas que nos habilitan interfaces para realizar todas las operaciones arriba descritas.
Cada manejador en general posse su propio cliente, lo cual es importante porque de entrada podemos hacer gestión sin recurrir a herramientas externas, ahora bien cuando realizamos la gestión de bases de datos en múltiples tipos de servidores, esto se convierte en una tarea un poco tortuosa, en ese caso existen los clientes universales, herramientas maravillosas que nos facilitan la tarea de gestionar cualquier tipo de base de datos SQL.
En el siguiente video podrás conocer algunas de estas herramientas: