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

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

 

posted @ 2018-06-13 15:23  小哪吒!!  阅读(167)  评论(0编辑  收藏  举报