Mysql事物,权限

1. 事务
        DDL create alter drop truncate
        DML insert update delete select 
        TCL start transaction, commit, rollback

      1) start transaction 开始事务 (begin)

      2) commit 提交事务 
      3) rollback 回滚事务


       账户表account
           ID      balance(余额)
           1       50000.0       
           2       0.0           
      create table account (
            id int primary key,
            balance decimal(12,2) not null
      ); 
      insert into account(id,balance)values(1,50000.0),(2,0.0);

以下两条sql必须作为一个整体执行, 要么都成功,其中有一条失败,前面成功的也得撤销

update account set balance=balance+10000.0 where id=2; /*2号账户转入10000元*/ 成功
update account set balance=balance-10000.0 where id=1; /*1号账户转出10000元*/

 所谓的事务,就是指一个事务内,多条sql语句是作为一个整体执行的。
 一个事务内的多条sql是作为一个原子操作,不可以被分割。要么都成功,要么都不成功。

 start TRANSACTION;
 UPDATE
 UPDATE
 INSERT
 DELETE
 如果这个事务内多条sql全部成功 COMMIT(让更改都生效)
 如果这个事务内有sql失败了,Rollback(让更改都撤销)

 事务内所有更改,在结束之前,对于其它用户来讲都是不可见的。
 事务commit提交时,这些更改才会真正生效,其它用户才能看到你的更改。
 事务执行中如果出现意外情况,这时候可以执行rollback,可以撤销事务内所有更改,恢复到事务开始的时刻
 commit 和rollback都意味着事务结束


 事务有四大特性
 ACID
 A 原子性, 指事务内多条sql是作为一个整体执行
 C 一致性, 事务开始前后,整个数据的状态应当一致
 I 隔离性, 指事务的隔离级别(未提交读,提交读,可重复读,序列化读)
       1) 脏读(读取到了未提交的数据)
         客户1                                              客户2
         1 号账户余额 10000.0
         begin;
         update 1 号账户余额50000.0
                                                                 select 1 号账户余额 50000.0 脏读
         rollback;                                 
                                                                 select 1 号账户余额 50000.0
    
    
        2)避免脏读现象, 将隔离级别升级为提交读
           查询到的肯定是别人提交后的结果,提交读下不会有脏读,    但会有不可重复读现象:
           客户1 更新                                   客户2查询
           1 号账户余额 10000.0
                                                                 begin;
                                                                 select ... 10000.0
            begin;
            update 1 号账户余额50000.0;
             commit;
                                                                  select ... 50000.0
                                                                  commit;
    
     3) 为了避免不可重复和脏读的现象,可以将隔离级别升级可重复读(mysql默认隔离级别)    
     4) 幻读 (可以将隔离级别提高为序列化读,即可避免幻读现象)     
    
    客户1 新增                                  客户2查询
    原始记录是10条
    begin                                              begin;
         查询个数  10
         insert 1
    commit;    
                                                            查询个数  11
                                    
                                                              commit;
    
     5) mysql的【可重复读】隔离级别三种现象都可以避免
    
    
  D 持久性, 事务中做的更改必须在事务结束后永久生效

 增删改查(insert update delete select)
   CRUD    c  insert 插入
                 r  select 查询
                 u  update 更新
                 d  delete 删除
    
    
2. DCL 数据控制语言 (了解)
    grant 授权
    revoke 回收权限

    create user 'user1'@'localhost' identified by 'user1';
    登录之后执行use test3;
    会报告  Access denied for user 'user1' 含义是用户无权访问.

    使用root 给user1授权
     grant all on test3.* to 'user1'@'localhost'; 
     all 是代表所有权限:select,insert,update,delete...
     test3.* 是权限的范围:test3库中所有对象
     to 后面跟的是用户

     使用root回收权限
      revoke all on test3.* from 'user1'@'localhost';

      更细的权限分配
      grant select on test3.student to 'user1'@'localhost';  /*只让test1用户能够查询test3.student表*/


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值