• 事务,视图,索引,备份和恢复


    1事务的四个属性,简称ACID属性

    •  原子性:事务是一个完整的操作,事务的各部操作时不可分的(原子性的),要么都执行,要么不执行
    • 一致性:当事务完成时,数据必须处于一致状态
    • 隔离性:并发事务之间彼此隔离,独立,他不应该以任何方式依赖于或影响事务
    • 持久性:事务完成之后,它对数据库的修改被永久保存
    DELIMITER $$
    CREATE  PROCEDURE usp_transform()
    BEGIN
    ##1.设置全局错误总数
    DECLARE t_error INTEGER DEFAULT 0;
    ##2.设置如果有SqlLexception 就将全局错误总数设置成1
    DECLARE  CONTINUE  HANDLER  FOR SQLEXCEPTION SET t_error=1;
    ##3.关闭默认提交
    SET autocommit=0;
    ##4.开始事务
    START TRANSACTION;
    ##5.进行真实的业务操作
     UPDATE bank SET money = money-1000 WHERE cid=1;
      UPDATE bank SET money = money+1000 WHERE cid=2;
    
    IF t_error>0 THEN
       ROLLBACK; ##4.回滚事务
    ELSE
     COMMIT;  ##5.提交事务
    END IF;
    ##6.开启事务的默认提交
    SET autocommit=1;
    END $$
    DELIMITER;
    
    
    CALL usp_transform();

    2.视图的用途

    • 筛选表中的行
    • 防止未经许可的用户访问铭感数据
    • 降低数据库的复杂程度
    • 将多个物理数据库抽象为一个逻辑数据库
     ##检查视图是否存在  存在删除  
     DROP VIEW IF EXISTS view_student_result;
     
     CREATE VIEW view_student_result AS 
     SELECT  stuName,stuno,studentresult,subjectname,examdate FROM student
     INNER JOIN result ON student.`stuno`=result.`Studentno`
     INNER JOIN `subject`  ON result.`Studentno`=subject.`subjectid`
     WHERE `subject`.`subjectid`=(
       SELECT subjectid FROM `subject` WHERE subjectname='编程' 
     )AND examdate =(
    SELECT  MAX(examdate) FROM result,`subject`  WHERE result.`subjectid`=subject.`subjectid`
    AND subjectname='编程'
     )
     ##执行视图
     SELECT * FROM view_student_result;
     
     
     ##删除视图
     DROP VIEW IF EXISTS view_student_result
     USE `information_schema`;
     SELECT * FROM `grade``VIEWS`G

    2.1视图注意事项

    •    视图中可以使用多个表
    •     一个视图可以嵌套另一个视图
    •     对视图数据进行添加、更新和删除操作直接影响所引用表中的数据
    •     当视图数据来自多个表时,不允许添加和删除数据

    3.索引

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

    作用:大大提高数据库的检索速度,改善数据库性能

    ##索引
     CREATE INDEX INDEX_student_name
     ON student(stuname)
     SELECT * FROM student WHERE stuname='张允'
    ##删除索引
     DROP INDEX INDEX_student_name ON 

    查看索引: show index from table_name

    Table:创建索引的表
    Non_unique:索引是否非唯一
    Key_name:索引的名称
    Column_name:定义索引的列字段
    Seq_in_index:该列在索引中的位置
    Null:该列是否能为空值
    Index_type:索引类型

    4.备份 :

    数据库备份的必要性:

    • 保证重要数据不丢失 
    • 数据转移

    示例:

    ##数据备份
     mysqldump -uroot -p `s2230myschool`>E:s2230myschoolnewback-2018-06-13.sql

    5.恢复:

    方法一:直接使用最新的sql脚本覆盖现现有的数据就行

    示例:

     ##恢复数据
      mysql -uroot -p `myschoolbak`<E:s2230myschoolnewback-2018-06-13.sql

    6.向数据表插入批量数据

    ##插入批量数据
    DELIMITER $$    
    DROP PROCEDURE IF EXISTS `myschool`.`autoInsert`$$
    
    CREATE DEFINER=`root`@`localhost` PROCEDURE `autoInsert`()
    BEGIN
        DECLARE i INT DEFAULT 1;
        WHILE(i < 10000) DO
            INSERT INTO student(id, `name`) VALUES (DEFAULT, '123');
            SET i = i+1;
        END WHILE;
        END$$
    
    DELIMITER ;
    
    CALL autoInsert();

    7.带参输入输出:

    ##带参输入输出
    DELIMITER $$
    CREATE PROCEDURE ups_getTotalStudentNumByGradeId(IN gid INT, tool INT)
    BEGIN
    SELECT * FROM student WHERE  stuGradeid= gid;
    SET tool=FOUND_ROWS();
    END$$
    DELIMITER ;
    SET @num=0;
     CALL ups_getTotalStudentNumByGradeId(1,@num);
     SELECT @num
  • 相关阅读:
    Myeclipse运行报错:an out of memory error has occurred的解决方法
    关于UnsupportedClassVersionError的错误处理
    Java设置session超时(失效)的三种方式
    mybatis自增长插入id
    揭开Java IO流中的flush()的神秘面纱
    mybatis多表查询
    在Myeclipse中提交代码到GitHub中
    一台电脑安装多个版本的jdk
    使用Git的Push出现rejected
    暴力解决HTMLTestRunner出现dict() ->new empty dictionary的问题
  • 原文地址:https://www.cnblogs.com/caiguoxin/p/9178026.html
Copyright © 2020-2023  润新知