zoukankan      html  css  js  c++  java
  • 数据库 --- 基础知识 5

    事务

    什么是事物务

    通俗的说,事务指一组操作,要么都执行成功,要么都执行失败。

    使用事务的目的

    事务只是数据库的一种功能,当开启数据库事务这项功能的时候,在一个窗口中进行数据更改的时候,另一个窗口的数据是没有办法直接进行查看的,这样做的目的是为了防止当进行数据传输的时候,发生意外情况,数据没有传输过去,等于说是给数据的传输添加了一层保障

    事物的特性(重要)

    原子性(Atomicity):原子意为最小的粒子,即不能再分的事物,要么全部执行,要么全部取消。

    一致性(Consistency):指事务发生前和发生后,数据的总额依然匹配。

    隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见。

    持久性(Durability):当事务完成后,其影响应该保留下来,不能撤销,只能通过“补偿性事务”来抵消之前的错误。

    事务的使用

    # 1.在数据库中输入使用事务的指令,开启事务
    mysql> start transaction;
    
    # 2.提交
    mysql> commit;
    
    # 3.对提交的信息进行回滚
    mysql> rollback;     # 会将上次一进行commit之后所执行的操作都进行回滚
    

    存储引擎

    InnoDB:相当于保时捷的引擎

    MyIsam:相当于奇瑞的引擎

    当mysql的版本为5.5以上的时候,默认使用的就是InnoDB

    两个引擎的区别

    1.InnoDB支持事务,MyIsam不支持。

    2.InnoDB支持行锁,MyIsam支持的表锁

    视图

    在使用mysql的时候,常用的都是使用sql指令来查看数据库的,但是也有部分是使用视图来进行查看的

    增加视图

    create view 视图名 as SQL语句;
    

    删除视图

    drop view 视图名;
    

    举例

    mysql> select * from user where name='zekai';
    			+----+-------+--------+
    			| id | name  | salary |
    			+----+-------+--------+
    			|  1 | zekai |    900 |
    			+----+-------+--------+
    			1 row in set (0.00 sec)
    
    
    			mysql> create view v1 as select * from user where name='zekai';
    			Query OK, 0 rows affected (0.07 sec)
    
    			mysql>
    			mysql> show tables;
    			+-----------------+
    			| Tables_in_test3 |
    			+-----------------+
    			| user            |
    			| v1              |
    			+-----------------+
    			2 rows in set (0.00 sec)
    
    			mysql> select * from v1;
    			+----+-------+--------+
    			| id | name  | salary |
    			+----+-------+--------+
    			|  1 | zekai |    900 |
    			+----+-------+--------+
    			1 row in set (0.00 sec)
    

    触发器

    前一个操作触发后一个操作

    场景:

    当我们下一个订单的时候,订单表中需要增加一个记录,同时库存表中需要减少一个记录,这两个操作是同时发生的,并且前一个操作触发后一个操作

    使用方法:
    			
    			增加:
    				delimiter //
    				
    				CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON t2 FOR EACH ROW
    				BEGIN
    					INSERT INTO t3 (NAME) VALUES ('aa');
    				END //
    				
    				delimiter ;
    			
    			### 当向tb1表中添加一条数据的同时, 向tb2表添加一条数据
    			
    			查看:
    			 show triggersG
    				*************************** 1. row ***************************
    							 Trigger: tri_before_insert_tb1
    							   Event: INSERT
    							   Table: t2
    						   Statement: BEGIN
    				INSERT INTO t3 (NAME) VALUES ('aa');
    				END
    							  Timing: BEFORE
    							 Created: 2019-11-01 11:47:20.65
    							sql_mode: ONLY_FULL_GROUP_BY
    							 Definer: root@localhost
    				character_set_client: gbk
    				collation_connection: gbk_chinese_ci
    				  Database Collation: latin1_swedish_ci
    			
    			删除:drop trigger 触发器名;
    			
    			例子:
    				mysql> select * from t2;
    				Empty set (0.00 sec)
    
    				mysql> select * from t3;
    				Empty set (0.00 sec)
    				mysql> insert into t2 (name) values ('zekai');
    				Query OK, 1 row affected (0.06 sec)
    
    				mysql> select * from t2;
    				+----+-------+
    				| id | name  |
    				+----+-------+
    				|  1 | zekai |
    				+----+-------+
    				1 row in set (0.00 sec)
    
    				mysql> select * from t3;
    				+----+------+
    				| id | name |
    				+----+------+
    				|  1 | aa   |
    				+----+------+
    				1 row in set (0.00 sec)
    

    存储过程

    类似于将很多sql语句放在一个存储中,之后再使用的时候,可以直接去拿来使用
    创建:
    			
    			delimiter //
    		
    			create procedure p1()
    			BEGIN
    				select * from user where id=2;
    			END //
    			
    			delimiter ;
    		
    		例子:
    			
    			mysql> delimiter //
    
    			mysql> create procedure p1()
    				-> BEGIN
    				-> select * from user where id=2;
    				-> END //
    			Query OK, 0 rows affected (0.10 sec)
    
    			mysql> delimiter ;
    
    			mysql> call p1();
    			+----+------+--------+
    			| id | name | salary |
    			+----+------+--------+
    			|  2 | min  |   1100 |
    			+----+------+--------+
    			1 row in set (0.00 sec)
    
    			Query OK, 0 rows affected (0.01 sec)
    			
    		删除:
    			drop procedure p1;
    

    函数

    #类似于python中的函数  
      使用方法:select  函数;
        
        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个字符组成的子序列
    		
    		
    		http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/functions.html#encryption-functions
    		
    

    备份

    备份的原因

    将重要的数据保存下来,防止数据丢失

    保存数据的方式

    用法:
    #语法:
    # mysqldump -h 服务器 -u用户名 -p密码 数据库名 表名,  表名,.... > aaa.sql
    
    #示例:
    #单库备份
    C:UsersWang Hongkun> mysqldump -uroot -p123 test2 > D:ceshi.sql
    
    #多库备份
    C:UsersWang Hongkun> mysqldump -uroot -p123 --databases test2 day34 > d:cesdhi2.sql
    
    #备份所有库
    C:UsersWang Hongkun> mysqldump -uroot -p123 --all-databases > d:cesdhi3.sql
    		
    #重新导入:先登录数据库
    mysql> source d:ceshi.sql
    
  • 相关阅读:
    程序员修炼之道阅读笔记1
    构建之法阅读笔记6
    构建之法阅读笔记5
    构建之法阅读笔记4
    构建之法阅读笔记3
    构建之法阅读笔记2
    关于搜狗输入法的评价
    找水王
    用户场景
    个人工作总结
  • 原文地址:https://www.cnblogs.com/whkzm/p/11783187.html
Copyright © 2011-2022 走看看