数据库安全性问题的演示

1.演示脏读

一个事物里面读到了另外一个事物没有提交的数据: read uncommitted两次读取的数据一样,为脏读。A未提交读取的仍一致。

  • 1.开启A,B窗口

  • 2.分别查询A,B的隔离级别

    select @@tx_isolation;
    
  • 3.设置A窗口的隔离级别为read uncommitted(读未提交)

    set session transaction isolation level read uncommitted;
    
  • 4.A,B都开启事物

    start transaction;
    
  • 5.在B中zs向ls转账100,事物不提交

    update account set money = money - 100 where name = 'zs';
    update account set money = money + 100 where name = 'ls';
    
  • 6.在A中查询账户

    select * from account;
    
2.演示不可重复读(解决脏读)

​ 不可重复读: 在一个事物里面,同一条语句,两次查询的结果不一致.B未提交,两次读取的结果一致,意思就是读不到B未提交的数据,解决了脏读,脏读就是读到了B提交的数据。

  • 1.开启A,B窗口

  • 2.分别查询A,B的隔离级别

    select @@tx_isolation;
    
  • 3.设置A窗口的隔离级别为Read committed(读已提交)

    set session transaction isolation level Read committed;
    
  • 4.A,B都开启事物

    start transaction;
    
  • 5.在B中张三向李四转账100,事物不提交

    update account set money = money - 100 where name = 'zs';
    update account set money = money + 100 where name = 'ls';
    
  • 6.在A中查询账户(避免脏读发生,只要B不提交,A读到的数据就是一样)

    select * from account;
    
3.演示避免不可重复读
  • 1.开启A,B窗口

  • 2.分别查询A,B的隔离级别

    select @@tx_isolation
    
  • 3.设置A窗口的隔离级别为Repeatable read

    set session transaction isolation level Repeatable read;
    
  • 4.A,B都开启事物

    start transaction;
    
  • 5.在B中张三向李四转账100,事物不提交

    update account set money = money - 100 where name = 'zs';
    update account set money = money + 100 where name = 'ls';
    
  • 6.A中查询账户

    select * from account;
    
  • 7.B中提交

    commit;
    
  • 8.A中查询账户

    select * from account;
    
  • 9.A中结束事物,再重新查询,A结束后才能查询到B中的结果,A查询的结果始终是一样的。

    commit;
    select * from account;
    
4.演示隔离级别Serializable
  • 1.开启A,B窗口

  • 2.分别查询A,B的隔离级别

    select @@tx_isolation
    
  • 3.设置A窗口的隔离级别为Serializable

    set session transaction isolation level Serializable;
    
  • 4.A,B都开始事物

    start transaction;
    
  • 5.B中向account账户插入一条数据,不提交

    insert into account values (null,'zl',1000);
    
  • 6.A中查询

    select count(*) from account;
    
  • 7.在B中结束事物

    commit;
    
  • 8.A中查询

    select count(*) from account;
    
  • 9.B中不结束事物,A中无法查询。

    commit;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值