第五章 事务 视图 索引 备份和恢复

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为大写字母,不可使用小写;
 改变结果的输出方式,控制台有区别,在图形化工具中没有区别

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

原文地址:https://www.cnblogs.com/3020815dzq/p/8465832.html