zoukankan      html  css  js  c++  java
  • 事务、视图、触发器、存储引擎、备份

    一、事务

    1. 什么事务

    • 事务是并发控制单位,指一组操作,要么都执行成功,要么都执行失败。

    2. 事务有什么用

    • 保证数据库数据的完整。

    3. 使用方法

    • 语法:

      start transaction;
      	sql语句
      commit/rollback;
      # commit 的意思是上面的处理都正确,现在提交,修改本地数据
      # rollback 的意思是上面的处理有错误或者问题,取消上面所有的操作,回到start transaction 之前的状态
      
      

    4. 事务的特性(ACID)

    (1)原子性( Atomicity )

    • 事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做

    (2)一致性(Consistency)

    • 指事务发生前和发生后,数据的总额依然匹配

    (3)隔离性( Isolation)

    • 一个事务的执行不能干扰其它事务。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰

    (4)持久性(Durability)

    • 指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的

    二、MySQL存储引擎

    1. InnoDB

    • 高性能,支持事务,支持行锁,也支持表锁
    • 是MySQL5.0版本及以上的默认存储引擎

    2. MyIsam

    • 低性能,不支持事务,支持表锁
    • 现在亦逐渐被淘汰

    3. 更多InnoDB和MyIsam的区别

    三、视图

    1. 什么是视图

    • 视图是一个虚拟表(非真实存在),是根据SQL语句获取动态的数据集,并为其命名。之后使用名称就可以获取结果集,并可以把结果集当做表来使用

    • 但是,视图会加大数据库系统的负担,现在已基本没人使用。

    2. 视图的使用

    • #增加视图:
      			create view 视图名 as SQL语句;
          
      #删除:	
      			drop view v1;
       
      #查看视图:
      			select * from 视图名;
      

    四、触发器

    1. 什么是触发器

    • 触发器是一种语法。它的功能是把多条SQL语句关联起来,当我们执行指定的SQL语句时,就会同时执行其他SQL语句。

    2. 触发器的使用

    • 两张表:
      			订单表     库存表
      			
      		场景:
      			当我下一个订单的时候, 订单表中需要增加一个记录, 同时库存表中需要减1
      			这两个操作是同时发生的,  并且前一个操作出发后一个操作
                  
      # 使用方法:
      			# 例子:当向tb1表中添加一条数据的同时, 向tb2表添加一条数据
      			增加:
      				delimiter //
      				
      				CREATE TRIGGER 触发器名
                      BEFORE INSERT ON t2 FOR EACH ROW #触发条件
      				BEGIN
      					INSERT INTO t3 (NAME) VALUES ('aa'); # 触发后执行的sql语句
      				END //
      				
      				delimiter ;  
                      
      #删除:
      drop trigger 触发器名;    
      
      # 查看
      
      show triggersG
      

    五、存储过程

    1. 什么是存储过程

    • 就是类似python里的函数,存储过程就是数据库系统的函数,把一堆SQL语句丢进一个存储过程里,再通过这个存储过程名来调用,执行器内部的SQL语句。

    2. 存储过程的使用

    • #创建:
      			
      			delimiter //
      		
      			create procedure 存储过程名()
      			BEGIN
      				select * from user where id=2; # SQL语句
      			END //
      			
      			delimiter ;
                  
      # 调用存储过程:
      			call 存储过程名();
          
      # 删除:    
      			drop procedure 存储过程名;
      

    六、内置函数(常用)

    CHAR_LENGTH(str)
    			返回值为字符串str 的长度,长度的单位为字符。一个多字节字符算作一个单字符。
    			对于一个包含五个二字节字符集, LENGTH()返回值为 10, 而CHAR_LENGTH()的返回值为5。
    		
    		CONCAT(str1,str2,...)
    			字符串拼接
    			如有任何一个参数为NULL ,则返回值为 NULL。
    		FORMAT(X,D)
    			将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若  D 为 0, 则返回结果不带有小数点,或不含小数部分。
    			例如:
    				SELECT FORMAT(12332.1,4); 结果为: '12,332.1000'
    		INSTR(str,substr)
    			返回字符串 str 中子字符串的第一个出现位置。
    		LEFT(str,len)
    			返回字符串str 从开始的len位置的子序列字符。
    		LOWER(str)
    			变小写
    		UPPER(str)
    			变大写
    		LTRIM(str)
    			返回字符串 str ,其引导空格字符被删除。
    		RTRIM(str)
    			返回字符串 str ,结尾空格字符被删去。
    		SUBSTRING(str,pos,len)
    			获取字符串子序列
    		LOCATE(substr,str,pos)
    			获取子序列索引位置
    		REPEAT(str,count)
    			返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。
    			若 count <= 0,则返回一个空字符串。
    			若str 或 count 为 NULL,则返回 NULL 。
    		REPLACE(str,from_str,to_str)
    			返回字符串str 以及所有被字符串to_str替代的字符串from_str 。
    		REVERSE(str)
    			返回字符串 str ,顺序和字符顺序相反。
    		RIGHT(str,len)
    			从字符串str 开始,返回从后边开始len个字符组成的子序列
    

    七、数据库的备份

    1. 为什么要对数据进行备份

    • 一些数据的价值很大,为了意外的事故导致这些数据的丢失,所以要对其进行备份

    2. 如何备份

    用法:
    				#语法:
    				# mysqldump -h 服务器 -u用户名 -p密码 数据库名 表名,  表名,.... > 备份文件的路径(如:aaa.sql  , 这个是相对路径,也可以填绝对路径,都要以 .sql 格式结尾。) 
    
    				#示例:
    				#单库备份
    				mysqldump -uroot -p123 db1 > db1.sql
    				mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql
    
    				#多库备份
    				mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql
    
    				#备份所有库
    				mysqldump -uroot -p123 --all-databases > all.sql
    		
    			重新导入:
    				mysql> source D:/test3.sql;
    
    
  • 相关阅读:
    共享纸巾更换主板代码分析 共享纸巾主板更换后的对接代码
    Python Django Ajax 传递列表数据
    Python Django migrate 报错解决办法
    Python 创建字典的多种方式
    Python 两个list合并成一个字典
    Python 正则 re.sub替换
    python Django Ajax基础
    Python Django 获取表单数据的三种方式
    python Django html 模板循环条件
    Python Django ORM 字段类型、参数、外键操作
  • 原文地址:https://www.cnblogs.com/Mcoming/p/11788384.html
Copyright © 2011-2022 走看看