mysql数据库学习笔记10-事务、视图、索引

事务

============================================
    *) 事务是数据操作的最小单元

    *) 多个数据增删改操作,完成的一项业务处理
    *) 如果事务事务成功,其中每一项操作都生效
        如果事务事务失败,其中每一项操作都失败
    *) 数据库数据操作,以事务为一个最小操作单元,
        不应该以一个sql语句为一个操作单元;
        要么整个事务成功,要么整个事务失败
    *) 事务的原子性
    *) 在当前事务中对数据的修改,只对当前连接可见

    *) ACID
        ------------
            A - 原子性 Atomic
            C - 一致性 Consistency
                    转账前 a+b = 100
                    转帐后 a+b = 100
            I - 隔离性 Isolation
                    一个事物进行中时,
                    另一事物不能操作数据
            D - 持久性 Durancy
                    提交事务之后,
                    数据持久生效

*)事务操作

 *)开始事务
            
            start transaction;
            
            set autocommit=0;
        
        *)提交事务,事务结束
            
            commit;   
        
        *)回滚事务,事务结束
        
            rollback;
     
    *) mysql 默认不开始事务,需要手动启动事务
        
        *)每一步数据修改都直接生效
        
        *)查看事务是否开启
            
            show variables like 'autocommit';
            
               自动提交开启,没有事务
               自动提交关闭,开始事务

        *)innodb 提供行级锁
            
            一个事务修改一行数据未提交时,
            该行数据会被锁定,
            不允许其他事务修改

    
    *)事务隔离级别(针对的是事务之间的)
          set tx_isolation='READ-UNCOMMITTED';
          set tx_isolation='read-committed';
          set tx_isolation='repeatable-read';
          set tx_isolation='serializable';
        
        1) 脏读  READ-UNCOMMITTED 读未提交数据
              
              一个事务修改一半的数据
              被其他事务读取
        
        2) 不允许脏读 read-committed 读提交数据
              
              只能读取其他事务已提交的数据
              
              虚读 update
              幻读 insert,delete
              
        
        3) 可重复读 (mysql 默认) repeatable-read
              
              事务过程中,
              前后读取的数据一致,
              
              即使过程中数据已被其他事务修改,
              也读取旧的数据
        
        4) 串行化 serializable
              
              所有事务排队依次执行,
              不能同时执行

        
        *) 查看隔离级别
              
             show variables like 'tx%';

视图 view

============================================
  * 将一个查询的查询结果当做表
  * 可以从这个虚拟的表查询
  
    drop view if exists v1;
    
    create [or replace] view v1
    as
    selet ...;
  
  * 视图不是表,不保存数据,
    从视图查询时,
    本质是从查询结果再查询(两层查询)
  
  * 查看视图
      show tables;
      desc v1;
      show create view v1;
  
  * 为什么使用视图
      *)视图在大的项目中非常常用
      
      *)简化查询
          select 
          from 
              a join b .. join c...join d...join e...
          
          select .. from v1;
      
      *)安全
          创建视图给用户访问,
          隐藏真实数据表
      
      *)一般只从视图查询,不对视图做增删改操作


索引

==============================================
  * 数据存储位置目录
        *)哈希索引
        *)红黑树索引
  
  * 提高查询效率,首先考虑创建索引
        
  * where name='abc'
      
      name数据创建索引
  
  * where name='abc' and birth='1993-5-3'
      
      name和birth两个字段创建索引
        对 where name='abc' 单字段过滤也有效
        但对 where birth='1993-5-3' 单字段过滤无效
  
  * 创建索引
      
      create index index_name on tb1(name);
      
      create index first_name_index
      on employees(first_name);      
      
      create index job_dept_index
      on employees(job_id, department_id);


数据备份和恢复

================================================
  * 导出库表及数据
        
        mysqldump  -uroot -p 
        --default-character-set=utf8
        库名>/home/soft01/hr.sql
  
        
        mysqldump  -uroot -p --default-character-set=utf8  stu>/home/soft01/stu.sql


        cat ~/stu.sql  |more
  
  * 将备份数据重新导入数据库
        
        mysql -uroot -p --default-character-set=utf8
        库名<文件路径
                
        mysql -uroot -p --default-character-set=utf8
        stu2</home/soft01/stu.sql        
        
        drop database if exists jtds;
        create database jtds charset=utf8;
        将 jtds.sql 导入 jtds 库

limit

=================================================
  * limit 5
        前5条
  
  * limit 0,10
        从第一条开始的10条
  
  * limit 10,10
        从第十一条开始的10条
  
  * limit 20,10
        从第二十一条开始的10条
  
  * 查询第 page 页,每页10条
        
        第一个参数:  (page-1)*10
        第二个参数:  10
        
 

猜你喜欢

转载自blog.csdn.net/zhuangxingzan/article/details/84933261