Ejemplos de transacciones
Algunos ejemplos de transacciones
Ejemplo 1: Autocommit
DROP DATABASE IF EXISTS test;
CREATE DATABASE test CHARACTER SET utf8mb4;
USE test;
CREATE TABLE cliente (
id INT UNSIGNED PRIMARY KEY,
nombre CHAR (20)
);
START TRANSACTION;
INSERT INTO cliente VALUES (1, 'Pepe');
COMMIT;
-- 1. ¿Qué devolverá esta consulta?
SELECT * FROM cliente;
SET AUTOCOMMIT = 1;
INSERT INTO cliente VALUES (5, 'Eva');
-- 2. ¿Qué devolverá esta consulta?
SELECT * FROM cliente;
SET AUTOCOMMIT = 0;
INSERT INTO cliente VALUES (2, 'Maria');
INSERT INTO cliente VALUES (20, 'Juan');
DELETE FROM cliente WHERE nombre = 'Pepe';
-- 3. ¿Qué devolverá esta consulta?
SELECT * FROM cliente;
ROLLBACK;
-- 4. ¿Qué devolverá esta consulta?
SELECT * FROM cliente;
SET AUTOCOMMIT = 0;
INSERT INTO cliente VALUES (2, 'Maria');
INSERT INTO cliente VALUES (20, 'Juan');
DELETE FROM cliente WHERE nombre = 'Pepe';
-- 5. ¿Qué devolverá esta consulta?
SELECT * FROM cliente;
COMMIT;
-- 6. ¿Qué devolverá esta consulta?
SELECT * FROM cliente;
Ejemplo 2: Update
DROP DATABASE IF EXISTS test;
CREATE DATABASE test CHARACTER SET utf8mb4;
USE test;
CREATE TABLE cuentas (
id INTEGER UNSIGNED PRIMARY KEY,
saldo DECIMAL(11,2) CHECK (saldo >= 0)
);
SELECT @@AUTOCOMMIT;
SET AUTOCOMMIT = 1;
INSERT INTO cuentas VALUES (1, 1000);
INSERT INTO cuentas VALUES (2, 2000);
INSERT INTO cuentas VALUES (3, 0);
-- 1. Consultamos el estado actual de las cuentas
SELECT * FROM cuentas;
-- 2. Suponga que queremos realizar una transferencia de dinero entre dos cuentas bancarias con la siguiente transacción:
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
UPDATE cuentas SET saldo = saldo + 100 WHERE id = 2;
COMMIT;
-- 3. ¿Qué devolverá esta consulta?
SELECT * FROM cuentas;
-- 4. Suponga que queremos realizar una transferencia de dinero entre dos cuentas bancarias con la siguiente transacción y una de las dos cuentas no existe:
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 9999;
UPDATE cuentas SET saldo = saldo + 100 WHERE id = 2;
COMMIT;
-- 5. ¿Qué devolverá esta consulta?
SELECT * FROM cuentas;
-- 6. Suponga que queremos realizar una transferencia de dinero entre dos cuentas bancarias con la siguiente transacción y la cuenta origen no tiene saldo:
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 3;
UPDATE cuentas SET saldo = saldo + 100 WHERE id = 2;
COMMIT;
-- 7. ¿Qué devolverá esta consulta?
SELECT * FROM cuentas;
Ejemplo 3: Savepoint
DROP DATABASE IF EXISTS test; 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 ); SELECT @@AUTOCOMMIT; SET AUTOCOMMIT = 1; INSERT INTO producto (id, nombre) VALUES (1, 'Primero'); INSERT INTO producto (id, nombre) VALUES (2, 'Segundo'); INSERT INTO producto (id, nombre) VALUES (3, 'Tercero'); -- 1. Comprobamos las filas que existen en la tabla SELECT * FROM producto; -- 2. Ejecutamos una transacción que incluye un SAVEPOINT START TRANSACTION; INSERT INTO producto (id, nombre) VALUES (4, 'Cuarto'); SAVEPOINT sp1; INSERT INTO producto (id, nombre) VALUES (5, 'Cinco'); INSERT INTO producto (id, nombre) VALUES (6, 'Seis'); ROLLBACK TO sp1; COMMIT; -- 3. ¿Qué devolverá esta consulta? SELECT * FROM producto;
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.