Diretório de artigos
definição
Uma transação é uma coleção de operações e uma unidade indivisível de trabalho. Uma transação envia ou revoga uma solicitação de operação para o sistema como um todo, ou seja, essas operações são bem-sucedidas ao mesmo tempo (lotes de instruções SQL são todos executados), ou Ambos falham (ou nenhum executa).
Quatro características do negócio
-
Atomicidade: Todas as operações em uma transação são concluídas ou não concluídas e não terminarão em um determinado link no meio. Se ocorrer um erro durante a execução da transação, ela será revertida (Rollback) para o estado anterior ao início da transação, como se a transação nunca tivesse sido executada.
-
Consistência: A integridade do banco de dados não é violada antes do início da transação e após o término da transação. Isso significa que os dados escritos devem cumprir integralmente todas as regras predefinidas, incluindo precisão de dados, serialidade e o banco de dados subsequente pode concluir espontaneamente o trabalho agendado.
-
Isolamento: A capacidade do banco de dados de permitir que várias transações simultâneas leiam, gravem e modifiquem seus dados ao mesmo tempo. O isolamento pode impedir a inconsistência de dados causada pela execução cruzada quando várias transações são executadas simultaneamente. O isolamento da transação é dividido em diferentes níveis, incluindo leitura não confirmada (leitura não confirmada), leitura confirmada (leitura confirmada), leitura repetida (leitura repetida) e serialização (Serializable).
-
Persistência: Após o término do processamento da transação, a modificação dos dados é permanente, mesmo que o sistema falhe, eles não serão perdidos.
Duas maneiras de usar transações
Exibir e definir o método de envio da transação
selecione @@ confirmação automática;
definir @@autocommit=0;
cometer transação
comprometer-se;
transação de reversão
reversão
transação aberta
iniciar transação ou iniciar
exemplo
- 数据准备
create table account(
id int auto_increment primary key comment '主键ID',
name varchar(10) comment '姓名',
money int comment '余额'
) comment '账户表';
insert into account(id, name, money) VALUES (null,'张三',2000),(null,'李四',2000);
-- 恢复数据
update account set money = 2000 where name = '张三' or name = '李四';
select @@autocommit;
set @@autocommit = 0; -- 设置为手动提交
-- 转账操作 (张三给李四转账1000)
-- 1. 查询张三账户余额
select * from account where name = '张三';
-- 2. 将张三账户余额-1000
update account set money = money - 1000 where name = '张三';
程序报错.....
-- 3. 将李四账户余额+1000
update account set money = money + 1000 where name = '李四';
-- 提交事务
commit;
-- 回滚事务
rollback ;
-- 方式二
-- 转账操作 (张三给李四转账1000)
start transaction ;
-- 1. 查询张三账户余额
select * from account where name = '张三';
-- 2. 将张三账户余额-1000
update account set money = money - 1000 where name = '张三';
-- 3. 将李四账户余额+1000
update account set money = money + 1000 where name = '李四';
-- 提交事务
commit;
-- 回滚事务
rollback;
-- 查看事务隔离级别
select @@transaction_isolation;
-- 设置事务隔离级别
set session transaction isolation level read committed ;
set session transaction isolation level read uncommitted ;
set session transaction isolation level repeatable read ; -- 默认级别
set session transaction isolation level serializable ;