Iniciación al lenguaje SQL
<< Click to Display Table of Contents >> Navegación: Características avanzadas > Anexos > Iniciación al lenguaje SQL |
Contenidos
Notación empleada en los formatos
La base de datos de los ejemplos
Sentencia de selección o consulta
Cláusula SELECT. Alias de columnas
Cláusula FROM. Alias de tablas
Subconsultas o SELECT anidadas
Concatenación de cadenas de caracteres
Comparación de cadenas de caracteres
Intervalos de valores. Between
SQL es una herramienta para organizar, gestionar y recuperar datos almacenados en una base de datos relacional. El nombre "SQL" es una abreviatura de Structured Query Language (Lenguaje de consultas estructurado).
Su aprendizaje no solo sirve para esta aplicación sino también, para todas las existentes en el mercado que soporten este lenguaje ya que es un lenguaje estándar consolidado por el Instituto Americano de Normas (ANSI) y por la Organización de Estándares Internacional (ISO).
Tradicionalmente las sentencias SQL se agrupan en dos categorías:
Lenguaje de definición de datos (DLL), que no se tratarán en este tema, y comprende las siguientes sentencias:
CREATE para crear tablas e índices.
DROP para eliminar tablas e índices.
ALTER para modificar la definición de las tablas.
Lenguaje de manipulación de datos (DML) que comprende las sentencias:
SELECT para consultar los datos almacenados en las tablas.
INSERT para grabar nuevos datos.
UPDATE para modificar datos.
DELETE para eliminar datos.
Notación empleada en la sintaxis
MAYÚSCULAS: las palabras que figuren en mayúsculas se escribirán en la sentencia igual que se escriben en la sintaxis.
Minúscula cursiva: estas palabras deberán ser sustituidas en la sentencia por nombres o palabras elegidas por el usuario de acuerdo con las descripciones que se den en cada caso.
Barra vertical |: indicará la elección de una de las opciones que este separando.
Corchetes [ ]: encerrarán elementos opcionales de la sentencia que pueden incluirse o no.
Llaves { }: encerrarán elementos obligatorios de la sentencia que siempre deberán de ser especificados.
La base de datos de los ejemplos
En los ejemplos de este tema se utiliza la base de datos Neptuno.mdb que se incluye en la instalación de Microsoft Access. Esta base de datos esta diseñada para que la empresa ficticia Importadores Neptuno gestione sus pedidos de clientes. Consta de las siguientes tablas:
Categorías - familias de productos.
Clientes - codificación de los clientes de Importadores Neptuno.
Compañías de envíos - codificación de empresas que realizan la entrega del pedido.
Detalles de pedidos - detalle de los productos solicitados en los pedidos.
Empleados - empleados de Importadores Neptuno que gestionarán los pedidos.
Pedidos - datos generales del pedido.
Productos - codificación de los productos que vende Importadores Neptuno
Proveedores - proveedores de productos.
Las relaciones entre las tablas y los nombres de campos de cada tabla se muestran en la siguiente imagen:
Sentencia de selección o consulta
La sentencia SELECT solicita al motor de la base de datos que recupere determinada información y devuelve como resultado un conjunto de registros. Consta de seis cláusulas: las dos primeras (SELECT y FROM) obligatorias y las otras cuatro opcionales.
Sintaxis:
SELECT [DISTINCT] {* | expresión_columna, ...}
FROM nombretabla [alias_tabla] ...
[WHERE expresión1 operador expresion2]
[GROUP BY {expresión_columna, ...} ]
[HAVING {condición} ]
[ORDER BY {expresión_orden [DESC | ASC], ... ]
Para realizar esta operación, el motor de base de datos busca la tabla o las tablas especificadas, extrae las columnas elegidas, selecciona las filas que cumplen los criterios y ordena o agrupa las filas resultantes en el orden especificado.
Cláusula SELECT. Alias de columnas
La cláusula SELECT especifica los datos a recuperar, puede contener: nombres de los campos o columnas de la tabla o tablas a consultar, expresiones a calcular por SQL cuando efectúa la consulta, o un asterisco (*) para seleccionar todos los campos de una tabla.
SELECT * FROM Clientes
Retorna un conjunto de registros con todos los campos de o columnas de la tabla Clientes.
Si se incluye más de un dato, separados por comas, éstos se recuperan en el orden en que se han enumerado en la cláusula.
expresión_columna puede ser un simple nombre de campo (por ejemplo Apellidos), o expresiones más complejas que pueden incluir operaciones matemáticas o de manipulación de caracteres.
Opcionalmente puede especificarse un alias para el campo, de forma que dicho alias podrá ser utilizado en el resto de la sentencia SELECT. Por ejemplo:
SELECT PrecioUnidad*Cantidad*(1-Descuento) AS ImporteNeto FROM [Detalles de pedidos]
siendo ImporteNeto el alias para la expresión de columna PrecioUnidad*Cantidad*(1-Descuento).
Las reglas para nombrar tablas y campos son dependientes del motor de base de datos que utilice. Microsoft Access admite espacios, vocales acentuadas y la letra ñ en sus nombres, sin embargo muchas otras bases de datos no son tan flexibles en su nomenclatura. En Access cuando un nombre de tabla o campo tiene espacios hay que escribirlo entre corchetes ([]).
Cuando se quieren recuperar datos de varias tablas que tienen nombres de campo iguales, es necesario preceder el nombre del campo del nombre de la tabla seguido de un punto. Por ejemplo:
SELECT Clientes.NombreCompañia, Clientes.NombreContacto, Proveedores.NombreCompañia FROM Clientes, Proveedores
Este predicado elimina las filas o registros duplicados del resultado de la consulta. Por ejemplo la sentencia:
SELECT DISTINCT Ciudad FROM Clientes
mostrará las distintas ciudades de las que pertenecen los clientes de la empresa.
Las funciones de agrupamiento pueden ser también parte de una cláusula SELECT. Devuelven un único valor de un conjunto de registros. Pueden usarse con un nombre de campo, por ejemplo:
SELECT AVG(PrecioUnidad) FROM [Detalles de pedidos]
o en combinación con una expresión de columna más compleja:
SELECT AVG (PrecioUnidad*Cantidad*(1-Descuento)) AS ImporteMedio FROM [Detalles de pedidos]
Las funciones de agrupamiento permitidas son:
SUM devuelve la suma total de los valores de una expresión de columna o campo numérico. Por ejemplo:
SELECT SUM(PrecioUnidad*Cantidad*(1-Descuento)) FROM [Detalles de pedidos]
retorna la suma del importe neto de todos los pedidos.
AVG devuelve la media de los valores de una expresión de columna. Por ejemplo:
SELECT AVG(PrecioUnidad*Cantidad*(1-Descuento)) FROM [Detalles de pedidos]
devolverá la media del importe neto de los pedidos.
COUNT devuelve el número de valores en una expresión de columna. Por ejemplo:
SELECT COUNT(FechaNacimiento) FROM Empleados
devolverá el número de registros de la tabla Empleados con valores no nulos en el campo FechaNacimiento.
Un caso especial es COUNT(*), por ejemplo:
SELECT COUNT(*) FROM Empleados
retorna el número de registros de la tabla Empleados incluyendo aquellos registros con valores nulos.
MAX devuelve el valor más alto de los contenidos en una expresión de columna. Por ejemplo:
SELECT MAX(PrecioUnidad) FROM [Detalles de pedidos]
devolverá el precio unitario de venta mas elevado.
MIN devuelve el valor más bajo de los contenidos en una expresión de columna. Por ejemplo:
SELECT MIN(FechaNacimiento) FROM Empleados
retornará la fecha de nacimiento del empleado mas viejo de la empresa.
Cláusula FROM. Alias de tablas
La cláusula FROM identifica la tabla o tablas que contienen los campos con los datos a recuperar por la consulta.
Sintaxis:
FROM nombretabla [alias_tabla] ...
nombretabla puede ser una o mas nombres de tabla separados por comas, alias_tabla es un nombre que se usa para referirse a la tabla en el resto de la sentencia SELECT, utilizado normalmente para abreviar el nombre original y también para poder realizar consultas uniendo varias veces la misma tabla. Por ejemplo:
SELECT C.NombreCompañia, C.NombreContacto FROM Clientes C
se ha utilizado la letra C como alias de la tabla Clientes, y se referencian los campos precediéndolos por el alias de la tabla.
La cláusula WHERE determina las condiciones que tienen que cumplir los registros recuperados de la base de datos.
Sintaxis:
WHERE expresión
Donde expresión indica una condición que deben cumplir los registros para que se incluyan en el resultado de la consulta. Puede ser cualquier combinación de operadores, constantes, valores literales, funciones y nombres de campos que se evalúen a un valor sencillo. En la sección Criterios de selección de este tema se especifican los elementos que pueden constituir una expresión.
Por ejemplo, la siguiente sentencia muestra el nº de registros de Detalles de pedidos cuyo importe neto es superior a 500.
SELECT COUNT(IdPedido) FROM [Detalles de pedidos] WHERE (PrecioUnidad*Cantidad*(1-Descuento)) > 500
La cláusula ORDER BY ordena los resultados de la consulta en base a los datos de una o más columnas.
ORDER BY {expresión_orden [DESC | ASC], ... ]
expresión_orden puede ser el nombre de un campo, una expresión o el número de posición que ocupa la expresión de columna en la cláusula SELECT. Por defecto se ordenan ASCendentemente (de menor a mayor). Si se quiere ordenar de mayor a menor se empleará DESC (DESCendente). Por ejemplo, para obtener la lista de clientes ordenados alfabéticamente:
SELECT NombreCompañia, NombreContacto, Teléfono FROM Clientes ORDER BY NombreCompañia
Para obtener el listado de clientes ordenado por la Región y Ciudad a la que pertenecen:
SELECT Región, Ciudad, NombreCompañia, Teléfono FROM Clientes ORDER BY Región, Ciudad
o bien:
SELECT Región, Ciudad, NombreCompañia, Teléfono FROM Clientes ORDER BY 1, 2
Para obtener la lista de empleados ordenados por su edad ascendentemente:
SELECT Apellidos, Nombre FROM Empleados ORDER BY FechaNacimiento DESC
Combina en un único registro los registros con valores idénticos en el campo o campos especificados en la lista de campos que sigue a GROUP BY.
Sintaxis:
GROUP BY lista_de_campos
El siguiente ejemplo interroga sobre los pedidos en los que se ha vendido algún producto por un importe total neto superior a 500:
SELECT Count(IdPedido), IdPedido
FROM [Detalles de pedidos]
WHERE ([PrecioUnidad]*[Cantidad]*(1-[Descuento]))>500
GROUP BY [Detalles de pedidos].IdPedido;
Esta sentencia retornará un registro por cada pedido que cumpla la condición, mostrando el número de pedido o campo IdPedido y el número de productos cuya venta cumple la condición.
La cláusula HAVING especifica una condición aplicable a grupos obtenidos de la aplicación de la cláusula GROUP BY. Sólo es válida si previamente se ha especificado la cláusula GROUP BY.
Sintaxis:
HAVING expresión
Siendo expresión el criterio que determina qué registros agrupados se van a mostrar. No tiene que coincidir con una expresión de columna en la cláusula SELECT.
La sentencia siguiente muestra el identificador de los pedidos que tienen más de dos productos y el número total de productos incluidos en cada pedido.
SELECT IdPedido, Count(*)
FROM [Detalles de pedidos]
GROUP BY IdPedido
HAVING (((Count(*))>2));
El operador UNION combina el resultado de dos sentencias SELECT en un único resultado. Este resultado se compone de todos los registros devueltos en ambas sentencias. Por defecto los registros repetidos se omiten, para que no se omitan se empleará la palabra ALL.
Sintaxis:
SELECT sentencia UNION [ALL] SELECT sentencia
Con el operador UNION, la lista de selección para cada sentencia SELECT, debe tener el mismo número de expresiones de columnas, con el mismo tipo de datos y en el mismo orden. Por ejemplo:
SELECT Ciudad, NombreCompañía, NombreContacto
FROM Clientes
UNION SELECT Ciudad, NombreCompañía, NombreContacto
FROM Proveedores
ORDER BY Ciudad, NombreCompañía;
Retorna una lista única de los clientes y proveedores de la empresa por ciudades.
Subconsultas o SELECT anidadas
Existen consultas que requieren una restricción que sea el resultado de otra consulta.
El siguiente ejemplo devuelve los nombres de los empleados cuyos salarios son iguales o mayores que la media de los salarios de todos los empleados que tienen la misma categoría laboral. A la tabla Empleados se le asigna el alias "E":
SELECT Apellidos, Nombre, Cargo, Salario
FROM Empleados AS E
WHERE Salario >=
(SELECT Avg(Salario)
FROM Empleados
WHERE E.Cargo= Empleados.Cargo)
ORDER BY Cargo
Se utiliza el predicado ANY, para recuperar registros de la consulta principal que satisfagan la comparación con otros registros recuperados en la subconsulta. El siguiente ejemplo devuelve todos los productos cuyo precio por unidad es mayor que cualquier producto vendido con un descuento del 25 por ciento o mayor:
SELECT * FROM Productos
WHERE PrecioUnidad > ANY
(SELECT PrecioUnidad
FROM [Detalles de pedidos]
WHERE Descuento >= .25)
Se utiliza el predicado ALL para recuperar sólo los registros de la consulta principal que satisfagan la comparación con todos los registros recuperados en la subconsulta. Si cambia ANY a ALL en el ejemplo anterior, la consulta devolvería sólo aquellos productos cuyo precio por unidad fuese mayor que el de todos los productos vendidos con un descuento del 25 por ciento o mayor.
Las sentencias SELECT anidadas se utilizan con mucha frecuencia a la hora de actualizar o borrar registros de una tabla que requieran condiciones o restricciones en las que están implicadas otras tablas distintas de la que se va a actualizar o borrar.
Se utiliza el predicado EXISTS (con la palabra reservada opcional NOT) en comparaciones verdadero/falso para determinar si la subconsulta devuelve algún registro. La siguiente sentencia retorna el la lista de productos que no figuran en ningún pedido:
SELECT * FROM Productos As P
WHERE NOT EXISTS
(SELECT IdProducto
FROM [Detalles de pedidos]
WHERE P.IdProducto=[Detalles de pedidos].IdProducto )
Los ejemplos vistos hasta el momento extraen datos de una única tabla. El enlace o relación entre tablas para realizar una consulta, se conoce con el término de JOIN. La operación JOIN combina registros de dos tablas siempre que existan valores coincidentes en un campo común.
El siguiente ejemplo muestra cómo podría combinar las tablas Categorías y Productos por el campo IdCategoría para obtener la lista de productos ordenados por su categoría y por el nombre del producto:
SELECT NombreCategoría, NombreProducto
FROM Categorías, Productos
WHERE Categorías.IdCategoría = Productos.IdCategoría
ORDER BY NombreCategoría, NombreProducto
Algunas bases de datos, como Microsoft Access, admiten la siguiente sintaxis:
SELECT NombreCategoría, NombreProducto
FROM Categorías INNER JOIN Productos
ON Categorías.IdCategoría = Productos.IdCategoría
En el ejemplo anterior no aparecerán las categorías que no tengan ningún producto asociado. Para obtener la lista con todas las categorías, incluidas aquéllas que no contienen productos:
SELECT NombreCategoría, NombreProducto
FROM Categorías LEFT JOIN Productos
ON Categorías.IdCategoría = Productos.IdCategoría
Existen tres tipos de combinaciones entre tablas: INNER JOIN, LEFT JOIN, RIGHT JOIN. Para extraer los datos hay que buscar un campo que contenga información común en las dos tablas, es decir, aquel por el que están relacionadas ambas. Este campo es el código de categoría IdCategoría, que tiene el mismo nombre en las dos tablas.
Pueden utilizarse expresiones en las cláusulas WHERE y HAVING para seleccionar un conjunto de registros que cumpla unas determinadas condiciones.
Las expresiones utilizan los siguientes elementos:
Las constantes son valores que no cambian. Por ejemplo, en la expresión FechaNacimiento + 30, el valor 30 es una constante y FechaNacimiento es un nombre de campo.
Las constantes de caracteres o literales se deben encerrar con una comilla simple (‘) o una doble ("). Para que una comilla simple o doble aparezca en una constante se pone doble.(Por ejemplo, si la constante deseada es O’Donnel deberá figurar como ‘O’’Donnel’).
SELECT NombreCompañía, NombreContacto, Teléfono
FROM Clientes
WHERE Clientes.Ciudad)="Buenos Aires"
La sintaxis utilizada para las constantes de fecha es dependiente del motor de base de datos que utilice. Microsoft Access por ejemplo requiere que las constantes de fecha se expresen en formato dd/mm/aaaa y encerradas entre almohadillas (#). Por ejemplo el diez de mayo de 2001 se escribirá #10/05/2001#.
Para realizar operaciones numéricas se puede utilizar los operadores:
+ Suma
- Resta
* Multiplicación
/ División
** o ^ Exponenciación
Concatenación de cadenas de caracteres
Dos o más cadenas de caracteres pueden unirse mediante el operador de concatenación: si utiliza Access este operador es el signo &, otras bases de datos utilizan el signo + para la concatenación de cadenas. La siguiente sentencia devuelve la lista de empleados mostrando su nombre separado por un espacio en blanco de su apellido:
SELECT [Nombre] & " " & [Apellidos] AS Empleado
FROM Empleados
El operador + añade un número de días a una fecha y el operador - resta un número de días de una fecha o retorna la diferencia en días entre dos fechas.
Por ejemplo:
30/01/1990 + 5 resulta 04/02/90
30/01/1990 - 01/01/1990 resulta 29
30/01/1990 - 10 resulta 20/01/1990
Los operadores de relación que pueden separar dos expresiones pueden ser cualquiera de los siguientes:
= Igual a
<> Distinto de
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
El valor null es especial para las bases de datos SQL, es un valor que indica que el campo está vacío o tiene un valor desconocido. No se puede preguntar por el valor null de un campo utilizando el signo igual (=), hay que utilizar las expresiones Is Null o Is Not Null. La siguiente sentencia retorna la lista de clientes que tienen el campo Región con valor null:
SELECT NombreCompañía, NombreContacto, Teléfono
FROM Clientes
WHERE Región Is Null;
Comparación de cadenas de caracteres
El operador Like permite comparar una expresión de cadena con un patrón o modelo:
expresión [NOT]LIKE "patrón"
Para construir el patrón pueden utilizarse caracteres comodín. Los más utilizados son:
Comodín para hacer coincidir cualquier cadena de 0 o más caracteres. Access utiliza en este caso el asterisco (*), otras bases de datos utilizan el porcentaje (%). La siguiente sentencia muestra los clientes cuyo nombre de empresa contiene la palabra Comidas en cualquier posición:
SELECT NombreCompañía, NombreContacto, Teléfono
FROM Clientes
WHERE NombreCompañía LIKE "*Comidas*";
Comodín para seleccionar cualquier carácter. Access utiliza en este caso el signo de interrogación (?), otras bases de datos utilizan un guión bajo (_).
Intervalos de valores. Between
Determina si el valor de una expresión se encuentra entre un intervalo de valores especificado.
expresión [Not] BETWEEN valor1 AND valor2
La siguiente sentencia muestra la lista de empleados nacidos desde 1958 a 1968 ambos inclusive:
SELECT Nombre, Apellidos
FROM Empleados
WHERE FechaNacimiento BETWEEN #01/01/1958# AND #31/12/1968#;
Determina si el valor de una expresión es igual a cualquiera de los valores de una lista especificada.
expresión [Not] In(valor1, valor2, . . .)
Se utiliza IN en las subconsultas para recuperar sólo aquellos registros de la consulta principal para los cuales algún registro de la subconsulta contenga un valor igual. El siguiente ejemplo devuelve todos los productos con descuento del 25 por ciento o mayor:
SELECT * FROM Productos
WHERE IdProducto IN
(SELECT IdProducto FROM Detalles de pedidos
WHERE Descuento >= .25);
Además, puede utilizar NOT IN para recuperar solamente aquellos registros de la consulta principal para los que ningún registro de la subconsulta contenga un valor igual.
Dos o más condiciones pueden ser combinadas para formar expresiones más complejas con distintos criterios. Cuando existen dos o más condiciones deberán estar unidas por AND u OR. Por ejemplo:
SELECT * FROM Productos WHERE IdCategoría = 1 AND IdProveedor = 16
En expresiones con mas de una condición el orden en el que se evalúan es muy importante. La siguiente tabla muestra el orden en el que son evaluados los operadores. Los operadores que figuran en la primera línea se evalúan los primeros, luego los de la segunda y así sucesivamente. Los operadores que figuren en la misma línea se evalúan de izquierda a derecha según aparezcan en la expresión.
1 - unario, + unario
2 ** o ^
3 *, /
4 +, -
5 =, <>, <, >, >=, >=, Like, Not Like, Is Null, Is Not Null, Between, In, Exists, Any, All
6 NOT
7 AND
8 OR
Para forzar un orden distinto será necesario usar paréntesis para encerrar las condiciones que deban evaluarse primero.
La sentencia de INSERT se utiliza para añadir registros a las tablas de la base de datos. El formato de la sentencia es:
INSERT INTO nombre_tabla [(nombre_columna, ...)] VALUES (expr, ...)
nombre_tabla es nombre de la tabla de la base de datos.
nombre_columna es una lista opcional de nombres de campo en los que se insertarán valores en el mismo número y orden que se especificarán en la cláusula VALUES. Si no se especifica la lista de campos, los valores de expr en la cláusula VALUES deben ser tantos como campos tenga la tabla y en el mismo orden que se definieron al crear la tabla.
expr es una lista de expresiones o valores constantes, separados por comas, para dar valor a los distintos campos del registro que se añadirá a la tabla.
Ejemplo para añadir un registro a la tabla de empleados:
INSERT INTO Empleados (IdEmpleado, Apellidos, Nombre, Cargo, Tratamiento, FechaNacimiento, FechaContratación, TelDomicilio )
VALUES (10, "Vaquero", "Carmen", "Representante de ventas", "Srta.", #3/12/1955#, #8/8/2001#, "91 873 37 13")
Cada sentencia INSERT añade un único registro a la tabla. En el ejemplo solo se han especificado 8 campos con sus respectivos valores, el resto de campos quedaran a nulo. Un valor nulo NULL no significa blancos o ceros sino simplemente que el campo nunca ha tenido un valor.
También puede utilizar la sentencia INSERT INTO para anexar un conjunto de registros de otra tabla o consulta mediante la cláusula SELECT ... FROM utilizando la siguiente sintaxis:
INSERT INTO nombre_tabla [(nombre_columna1[, nombre_columna2[, ...]])]
SELECT expresión_columna1[, expresión_columna2[, ...]
FROM nombre_tabla1
La sentencia UPDATE se utiliza para cambiar el contenido de los registros de una tabla de la base de datos. Su formato es:
UPDATE nombre_tabla SET nombre_columna = expr, ...
[WHERE { condición }]
nombre_tabla nombre de la tabla a modificar
nombre_columna es el nombre de columna o campo cuyo valor se desea cambiar. En una misma sentencia UPDATE pueden actualizarse varios campos de cada registro de la tabla.
expr es el nuevo valor que se desea asignar al campo que le precede. La expresión puede ser un valor constante o una subconsulta.
La cláusula WHERE sigue el mismo formato que la vista en la sentencia SELECT y determina que registros se modificarán.
Por ejemplo, subir el precio unitario de los productos pertenecientes a la categoría 1:
UPDATE Productos SET PrecioUnidad = PrecioUnidad * 1.1 WHERE IdCategoría = 1
Otro ejemplo
UPDATE Productos SET PrecioUnidad =
(SELECT AVG(PrecioUnidad)
FROM Productos WHERE PrecioUnidad IS NOT NULL)
WHERE PrecioUnidad IS NULL
Con esta última sentencia se ha puesto precio a todos los productos que no lo tenían. Ese precio ha sido el resultante de calcular la medía entre los productos que si lo tenían.
La sentencia DELETE se utiliza para borrar registros de una tabla de la base de datos. El formato de la sentencia es:
DELETE FROM nombre_tabla [WHERE { condición }]
nombre_tabla nombre de la tabla
La cláusula WHERE sigue el mismo formato que la vista en la sentencia SELECT y determina que registros se borrarán.
Cada sentencia DELETE borra los registros que cumplen la condición impuesta, o todos si no se indica cláusula WHERE.
DELETE FROM Productos WHERE Suspendido = True
Con el ejemplo anterior se borrarían todos los productos marcados como suspendidos.
Una transacción es un conjunto de cambios en la base de datos que deben ser realizados como uno solo. Es decir, o se realizan todos los cambios o no se realiza ninguno. Las transacciones se utilizan para evitas que se produzcan inconsistencias en la base de datos.
Cuando no se tiene activada una transacción el gestor de base de datos ejecuta inmediatamente cada sentencia INSERT, UPDATE o DELETE que recibe, sin posibilidad de deshacer los cambio. Cuando se activa una transacción los cambios que se van realizando quedan en un estado de provisionalidad hasta que se realiza un COMMIT o un ROLLBACK.
La sentencia COMMIT hará definitivos los cambios, la sentencia ROLLBACK deshará todos los cambios producidos desde que se inició la transacción.