zoukankan      html  css  js  c++  java
  • day37 事务

    复制终端命令

    tee D:/a.lg #将这行下面的命令复制到目录下
    

    事务

    通俗的说,事务指的是一组操作,要么都执行成功,要么都执行失败,只针对表数据,不能表字段。

    语法:

    start transaction;
    	sql语句;#sql语句只会在start和cimmit都存在才会执行
    commit/roolback;
    

    start transaction:开启事务

    commit :提交

    rollback:回滚,撤销事务的所有影响

    例子:

    我去银行给朋友汇款,我卡上有1000,朋友卡里有1000,我给盆友转账100,如果我的钱刚扣,而朋友的钱没有加时,网线断了,怎么办
    
    演示:
    create table user(
    	id int auto_increment primary key,
        name varchar(32) not null default '',
        salary int not null default 0
    )charset=utf8;
    
    insert into user (name,salary) values ('zekai',1000),('min',1000);
    
    start transaction;
    update user set salary=900 where name='zekai';
    select * from user;
    update user set salary=1100 where name='min';
    select * from user;
    commit;#提交
    
    start transaction;
    update user set salary=900 where name='zekai';
    select * from user;
    update user set salary=1100 where name='min';
    select * from user;
    rollback;#回滚,影响所有
    

    特性:

    ​ 原子性:原子意味最小的粒子,即不能再分的事务,要么全部执行,要么全部取消。

    ​ 一致性:指事务发生前后,数据的总额依旧匹配

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

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

    存储引擎:

    ​ Innodb:保时捷引擎

    ​ Myisam:奔奔引擎

    建表的时候,
    create table user (
        id int auto_increment primary key,
        name varchar(32) not null default '',
        salary int not null default 0
    )engine=Innodb charset utf8;
    

    mysql5.5以上,默认用的就是Innodb

    两个引擎的区别:

    ​ 1.Innodb支持事务,Myisam不支持

    ​ 2.Innodb支持行锁,Myisam支持表锁

    视图

    #增加视图
    create view 视图名 as sql语句;
    
    #删除视图:
    drop view 视图名;
    
    例子:
    select * from usesr where name='zekai';
    create view v1 as select * from usesr where name='zekai';
    show tables;
    select * from v1;
    

    触发器

    两张表:

    ​ 订单表 库存表

    场景:

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

    使用方法

    #增加:
    delimiter //
    create trigger 触发器名 before insert on 表名 for each row
    begin 	
    	insert into 表名(字段名) values (值);
    end //
    delimiter ;
    
    #删除:
    	drop trigger 触发器名
    

    存储过程

    类似于一个SQL函数

    #创建
    delimiter //
    create procedure 存储名()
    begin
    	select * from 表名 where 条件;
    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个字符串组成的子序列。

    数据库备份

    为啥要备份:

    ​ 将重要的数据保存下来

    用法

    mysqldump -h 服务器 -u 用户名 -p 密码 数据库名,表名...>aaa.sql
    
    # 单库备份:
    	mysqldump -uroot -p123 db1>D:/db1.sql
         mysqldump -uroot -p123 db1 table1>D:/db1.sql
    #多库备份
    mysqldump -uroot -p123 --databases db1 db2>D:/db1_db2.sql
        
     # 备份所有库
    mysqldump -uroot -p123 --all-databases>all.sql
    
    #重新导入
    mysql>source D:/db1.sql;
    
  • 相关阅读:
    Linux学习之查看是否安装软件
    Linux学习之nfs实例
    Linux学习之nfs安装配置
    Linux 学习之防火墙配置
    Linux学习之系统时间同步
    Linux学习之守护进程详解
    Linux学习之Center os网络配置
    Linux学习之挂载操作
    Linux学习之挂载
    Linux学习之开机启动
  • 原文地址:https://www.cnblogs.com/zqfzqf/p/11783966.html
Copyright © 2011-2022 走看看