Aprendizagem de conhecimento básico do MySQL - transação (5)

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 ;

Acho que você gosta

Origin blog.csdn.net/weixin_45496521/article/details/129028564
Recomendado
Clasificación