LENGUAJE DML DE SQL
TRATAMIENTO DE LOS DATOS
ING. YELENIA BOADA
DEFINICIONES BASICAS
El DML (Data Manipulation Language) es la parte de SQL dedicada a la
manipulación de los datos. Las sentencias DML son las siguientes:
• SELECT: se utiliza para realizar consultas y extraer información de la base de
datos.
• INSERT: se utiliza para insertar registros en las tablas de la base de datos.
• UPDATE: se utiliza para actualizar los registros de una tabla.
• DELETE: se utiliza para eliminar registros de una tabla.
DEFINICIONES BASICAS
DEFINICION DE TRANSACCION
•Una transacción SQL es un conjunto de sentencias
SQL que se ejecutan formando una unidad lógica
de trabajo (LUW del inglés Logic Unit of Work), es
decir, en forma indivisible o atómica.
TRANSACCION
•Una transacción SQL finaliza con un COMMIT, para
aceptar todos los cambios que la transacción ha
realizado en la base de datos, o un ROLLBACK para
deshacerlos.
TRANSACCIONES
MySQL nos permite realizar transacciones en sus
tablas si hacemos uso del motor de
almacenamiento InnoDB (MyISAM no permite el
uso de transacciones).
TRANSACCIONES
El uso de transacciones nos permite realizar operaciones de forma
segura y recuperar datos si se produce algún fallo en el servidor
durante la transacción, pero por otro lado las transacciones pueden
aumentar el tiempo de ejecución de las instrucciones.
TRANSACCIONES EN MYSQL
•Algunos Sistemas Gestores de Bases de Datos, como MySQL (si
trabajamos con el motor InnoDB) tienen activada por defecto la
variable AUTOCOMMIT. Esto quiere decir que automáticamente se
aceptan todos los cambios realizados después de la ejecución de
una sentencia SQL y no es posible deshacerlos.
TRANSACCIONES EN UNA BASE DE DATOS
•Se puede consultar el valor actual de AUTOCOMMIT haciendo:
• SELECT @@AUTOCOMMIT;
•Para desactivar la variable AUTOCOMMIT hacemos:
• SET AUTOCOMMIT = 0;
PASOS PARA REALIZAR TRANSACCIONES
Los pasos para realizar una transacción en MySQL son los siguientes:
1. Indicar que vamos a realizar una transacción con la sentencia START
TRANSACTION, BEGIN o BEGIN WORK.
2. Realizar las operaciones de manipulación de datos sobre la base datos
(insertar, actualizar o borrar filas).
3. Si las operaciones se han realizado correctamente y queremos que los
cambios se apliquen de forma permanente sobre la base de datos usaremos la
sentencia COMMIT. Sin embargo, si durante las operaciones ocurre algún error y
no queremos aplicar los cambios realizados podemos deshacerlos con la
setencia ROLLBACK.
SINTAXIS DE LAS TRANSACCIONES
START TRANSACTION [transaction_characteristic [,
transaction_characteristic] ...]
transaction_characteristic: {
WITH CONSISTENT SNAPSHOT
| READ WRITE
| READ ONLY
}
SINTAXIS DEL PROCESO DE
TRANSACCIONES
BEGIN [WORK]
COMMIT[WORK] [AND[NO] CHAIN] [[NO] RELEASE]
ROLLBACK[WORK] [AND[NO] CHAIN] [[NO] RELEASE]
SETautocommit ={0| 1}
PROCESO PARA EJECUTAR TRANSACCIONES
Ejemplo 1:
START TRANSACTION;
SELECT @A:=SUM(salary) FROMtable1 WHERE type=1;
UPDATEtable2 SET summary=@A WHERE type=1;
COMMIT;
Selecciona el salario y
lo suma de la tabla
1donde el tipo sea 1
Después actualiza la
sunma.
PROCESO PARA EJECUTAR TRANSACCIONES
Ejemplo 2:
DROP DATABASE IF EXISTS test;
CREATE DATABASEtest CHARACTER SETutf8mb4;
USE test;
CREATE TABLE cliente (
id INTUNSIGNED PRIMARY KEY, Crea la tabla cliente e
nombre CHAR(20) inserta unos valores en
);
START TRANSACTION;
la BD.
INSERT INTOcliente VALUES(1, 'Pepe');
COMMIT;
PROCESO PARA EJECUTAR TRANSACCIONES
Ejemplo 3:
DROP DATABASE IF EXISTS test; Crea la tabla CUENTAS
CREATE DATABASE test CHARACTER SET utf8mb4; donde el saldo debe ser
USE test; siempre mayor o igual a
cero,.
CREATE TABLE cuentas (
c
id INTEGER UNSIGNED PRIMARY KEY,
saldo DECIMAL(11,2) CHECK(saldo >= 0)
);
supongase que se quiere
realizar una transferencia
EJEMPLO 1. entre dos cuentas de Bs
1000.
START TRANSACTION;
UPDATE cuentas SET saldo =saldo - 1000 WHERE id = 1476;
UPDATE cuentas SET saldo =saldo + 1000 WHERE id = 1452;
COMMIT;
ACCESO CONCURRENTES A LOS DATOS
ACCESO CONCURRENTES A LOS DATOS
ACCESO CONCURRENTES A LOS DATOS
ACCESO CONCURRENTES A LOS DATOS
EJERCICIO PRACTICO
2. Ejecuta las siguientes instrucciones y resuelve las cuestiones que se plantean en
cada paso.
SETAUTOCOMMIT = 1; SELECT@@AUTOCOMMIT;
DROP DATABASE IF EXISTStest;
CREATE DATABASE test CHARACTER SET utf8mb4;
USE test;
CREATE TABLE producto (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL, precio DOUBLE
);
EJERCICIO PRACTICO
INSERT INTOproducto (id, nombre) VALUES(1, 'Primero'); INSERT
INTOproducto (id, nombre) VALUES(2, 'Segundo'); INSERT INTOproducto (id,
nombre) VALUES(3, 'Tercero');
SETAUTOCOMMIT = 1; SELECT@@AUTOCOMMIT;
DROP DATABASE IF EXISTStest;
CREATE DATABASE test CHARACTER SET utf8mb4;
USE test;
CREATE TABLE producto (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL, precio DOUBLE
);
EJERCICIO PRACTICO
sI se ejecuta la consulta para seleccionar precio e incrementarlos en 100,
se produciria un error?
Como se haria una eliminacion sin que se valide el check de la tabla?