zoukankan      html  css  js  c++  java
  • 第五章 事务 视图 索引 备份和恢复

    1.概念
     事务:就是一堆操作的集合,他们同生共死。要么都执行成功,要么都执行失败
    2.ACID
      A:原子性  ---完整的,不可分割的
      C: 一致性  ---事务执行完毕后,数据的状态是一致的()
      I: ISOLation 隔离性  ----两个事务执行互不影响
      D: 持久性  ---事务执行完后,对数据的影响是永久的。
    3.事务操作的关键字
      自动提交事务开关set autocommit=1
      开始事务 start transaction /begin
      提交事务 commit
      回滚事务 rollback
      set autocommit=1

    注意:只有事务的开启 没有事务的关闭,只要开启了事务,那么只有两个出口,要么提交要么回滚,默认情况下,每条单独的语句可视为一个事务  

    DELIMITER $$
    CREATE PROCEDURE usp_transfer() 
        BEGIN  
        ##错误总数默认是0
        DECLARE t_error INTEGER DEFAULT 0;   ##语法错误 form   违反了约束
        ## continue 继续  hanlder 执行   并且对 t_error重新赋值为1
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;  
        SET autocommit=0;
            START TRANSACTION;  
            UPDATE bank SET balance=balance-100 WHERE cid=1;    
            UPDATE bank SET balance =balance+100 WHERE cid=2;
            IF t_error > 0 THEN  
                ROLLBACK;  
            ELSE  
                COMMIT;  
            END IF;  
         SET autocommit=1; 
        END$$  
    DELIMITER ;  
     
    CALL test_sp800()

    4:定义一个存储过程的最简易的语法是

    delimiter $$
    create procedure usp_stulist()
    begin
      select * from student
    end$$
    delimiter;

    5:例题:银行转账 一个存户的余额减少 一个余额增加

     ##先创建表
      CREATE TABLE Bank 
    (
    cid INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    cname VARCHAR (32) NOT NULL ,
    balance DOUBLE NOT NULL 
    )
    
    ##伪造数据
    INSERT INTO Bank VALUES(1,'李小龙',1000);
    INSERT INTO Bank VALUES(2,'巩俐',1);
    INSERT INTO Bank VALUES(3,'张靓颖',1000);
    
    DROP PROCEDURE usp_transfer;
    
    
    
    
    DELIMITER $$
    #创建存储过程
    CREATE PROCEDURE usp_transfer() 
        BEGIN  
        ##错误总数默认是0
        DECLARE t_error INTEGER DEFAULT 0;  
        ## continue 继续  hanlder 执行   并且对 t_error重新赋值为1
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;  
        SET autocommit=0;
            START TRANSACTION;  
            UPDATE bank SET balance=`balance`-100 WHERE cid=1;    
            UPDATE bank SET balance=`balance`+100 WHERE cid=2;
            IF t_error > 0 THEN  
                ROLLBACK;  
            ELSE  
                COMMIT;  
            END IF;  
         SET autocommit=1; 
        END$$  
    DELIMITER; 
    
    
    
    CALL usp_transfer()

    1.视图: 就是一张虚拟表,本质上存储的是一对SQL的集合

    2.定义视图的语法:
    create view VW_stulist(VW_视图的功能)
    as
    sql语句
     小Tip:当多表中有同名列的时候,在视图这个虚拟表中,只能有一列。手工指定该列是哪个表的

    3.视图的使用 和检索基本表一样,直接通过select
    select * from VW_stulist

    4.删除视图
    drop view 视图名
    drop table
    drop database
    drop index
    drop constraint
    归根结底:drop  删除是结构   delete 删除数据

    5.查看所有库所有视图

     5.1.切换到系统数据库
      use information_schema

     5.2.select * from views G;

     6.查看当前库的所有视图
       show tables status where comment='view'

     7.视图注意事项
    1)视图可以查询多表数据
    2)视图可以嵌套
    3)update,insert,delete不能封装成视图内容,通过图形化界面可以操作数据(操作视图数据,影响的是基本表)。
    4)删除视图数据的时候,有一定的限定,数据结果来源于多表的时候,不能删除

    三:索引:是一种有效的组合数据的方式,为快速查找到指定记录,是一把双刃剑有利也有弊,如果使用不当 反而会降低索引性能,

    1.索引是占硬盘空间 ,也是按页存放的 。 思考题:一个索引页,(数据页)  占用多少个字节  。SQL Server 8192个字节

      2.索引:是一种有效组合数据的方式,为了快速查找指定记录

      3.唯一索引: 主键索引:如果一列是主键列,那么该列自动会提升成主键索引。


      4.索引分类
        普通索引
        唯一索引
        主键索引
        复合索引
        全文索引 场景:一篇文章保存字段 content:1万个字   mysql  like
         搜索引起框架: lucene solr etalishsearch
        空间索引


    建立索引的原则
      1.在列基数比较少的列上,不适合创建索引
      2.在不经常使用的列 上,建立索引没有意义
     

      3.在频繁搜索的列上,适合建立索引

      小Tip:是不是一张表上,建立的索引越多,检索越快?
      解析:不是,

      其实,索引是把双刃剑(利弊共存),如果使用不当,反而会降低检索性能。

      索引会失效吗?会的,建议有索引的列排在前面进行限定检索,没有索引的排在后面。

      select * from student
      where sex='0' and studentname='张靓颖'
     

      select * from student
      where   studentname='张靓颖' and sex='0'
     
      索引重建:数据库系统使用时间长了,难免会不停的删减数据,这时候就要进行索引重建。丢弃掉系统中
      已经弃用的数据。给其他有效数据腾出空间。

    创建索引:

    语法

     删除索引:

    删除索引:语法

    DROP INDEX index_name ON table_name

    删除索引需要记住:

    1:删除表时,该表的所有的索引将全部被同时删除

    2:删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除,如果组成的索引的所有的列表都被删除,则整个索引将被删除

    查看索引:语法:

    SHOW INDEX FROM table_name;

    在查询的结尾后加“G”,表示将结果集按列表示,在表中列较多,需要看表中的值列非常有用

    四:数据库的备份和恢复:


     备份的重要性:
     mysqldump -uroot -hlocalhost -p myschool>d:\1.sql


     恢复
     mysql -uroot -proot myschool<d:\1.sql

    五.权限的事情 创建用户  分配权限
      root
      root

      授权

      1.我想建立一个用户   bigbrother
      create user bigbrother identified by '1'

      2.我想授权给他 可以对MySchool的student表进行 update ,delete ,insert
      grant 具体权限名称  update,delete,insert   on  myschool.student  to bigbrother

      直接给用户一个角色 ,角色可以绑定N个权限。就相当于用户有了N个权限


      用户-----------角色--------------->权限
     注意:G为大写字母,不可使用小写;
     改变结果的输出方式,控制台有区别,在图形化工具中没有区别

      其实数据库的数据是按照页来存放的,其实索引也是按页存放的 所以本质上索引也占硬盘空间

  • 相关阅读:
    leetcode 437. 路径总和 III
    leetcode 113. 路径总和 II
    题解 【CF387B】George and Round
    题解 【CF489B】 BerSU Ball
    题解【2.23考试T3】val
    题解【2.23考试T1】div
    题解 【洛谷P4290】 [HAOI2008]玩具取名
    题解 【洛谷P1035】[NOIP2002]级数求和
    题解【洛谷P1046】[NOIP2005] 陶陶摘苹果
    题解【洛谷P1618】 三连击(升级版)
  • 原文地址:https://www.cnblogs.com/3020815dzq/p/8465832.html
Copyright © 2011-2022 走看看