Conceptos básicos de MySQL: detalles de la transacción

Este artículo presenta principalmente las transacciones MySQL.

prefacio

Link de referencia:

definición de transacción

Una transacción es una colección de operaciones, es una unidad de trabajo indivisible, una transacción enviará o retirará una solicitud de operación al sistema en su conjunto, es decir, estas operaciones tendrán éxito o fracasarán al mismo tiempo .

La transacción predeterminada de MySQL se confirma automáticamente, es decir, cuando se ejecuta un DML (lenguaje de manipulación de datos), MySQL confirmará la transacción de forma inmediata e implícita.

Cuatro características de las transacciones (ACID)

  • Atomicidad : una transacción es una unidad mínima de operación indivisible, o todas tienen éxito o todas fallan.
  • Coherencia : cuando se completa la transacción, todos los datos deben mantenerse en un estado consistente
  • Aislamiento : el mecanismo de aislamiento proporcionado por el sistema de base de datos garantiza que las transacciones se ejecuten en un entorno independiente que no se vea afectado por operaciones concurrentes externas.
  • Durabilidad : una vez que una transacción se confirma o revierte, sus cambios en los datos de la base de datos son permanentes.

operación de transacción

#表准备
drop table if exists account; 
create table account( 
    id int primary key AUTO_INCREMENT comment 'ID', 
    name varchar(10) comment '姓名', 
    money double(10,2) comment '余额' ) comment '账户表'; 
insert into account(name, money) VALUES ('张三',2000), ('李四',2000);

Operación básica:

-- 1. 查询张三账户余额
select * from account where name = '张三';

-- 2. 将张三账户余额-1000
update account set money = money - 1000 where name = '张三';
-- 此语句出错后张三钱减少但是李四钱没有增加
模拟sql语句错误

-- 3. 将李四账户余额+1000
update account set money = money + 1000 where name = '李四';

-- 查看事务提交方式
SELECT @@AUTOCOMMIT;

-- 设置事务提交方式,1为自动提交,0为手动提交,该设置只对当前会话有效
SET @@AUTOCOMMIT = 0;

-- 提交事务
COMMIT;

-- 回滚事务
ROLLBACK;

-- 设置手动提交后上面代码改为:
select * from account where name = '张三';
update account set money = money - 1000 where name = '张三';
update account set money = money + 1000 where name = '李四';
commit;

Método de operación 2:
Iniciar una transacción:
START TRANSACTION 或 BEGIN TRANSACTION;
Confirmar una transacción:
COMMIT;
Revertir una transacción:
ROLLBACK;

Ejemplo de operación:

start transaction;
select * from account where name = '张三';
update account set money = money - 1000 where name = '张三';
update account set money = money + 1000 where name = '李四';
commit;

problemas de simultaneidad de transacciones

inserte la descripción de la imagen aquí

nivel de aislamiento de transacciones

Un nivel más alto proporciona un mayor aislamiento. El estándar permite que las transacciones se ejecuten con un nivel de aislamiento de transacciones más sólido. (Por ejemplo, no es un problema ejecutar transacciones que confirman lecturas (LECTURA COMPROMETIDA) en el nivel de aislamiento de LECTURA REPETIBLE).

inserte la descripción de la imagen aquí

  • √ indica que el problema ocurrirá bajo el nivel de aislamiento actual
  • Serializable tiene el rendimiento más bajo; Read no confirmado tiene el rendimiento más alto y la peor seguridad de datos.
#查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;

#设置事务隔离级别
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {
    
    READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

Supongo que te gusta

Origin blog.csdn.net/baidu_33256174/article/details/130672016
Recomendado
Clasificación