美文网首页程序员mysql
Mysql之你不得不知道的--事务transaction,数据库

Mysql之你不得不知道的--事务transaction,数据库

作者: hello_我的哥 | 来源:发表于2018-06-12 15:26 被阅读209次

    事务

    事务其实就是针对一组Sql语句,要么全部成功,要么全都失败,就比如银行转账,一个人转钱,一个人收钱,要么就是转钱成功,收钱也成功,要么就是转钱失败,收钱也失败,不会存在转钱成功,收钱失败的情况;

    事务的使用:就是把一组sql语句放进事务里面,当sql语句都执行成功,执行提交。当有一条sql执行失败,执行回滚;

    回滚:有两个用户X,Y;X给Y转账,X转钱成功,Y却没有收到钱,所以这种情况应该回滚到X转钱成功之前的数据;

    首先开启事务:start transaction,,,然后执行Sql语句,出错,回滚rollback;

    提交:start transaction,,,执行sql语句,,,成功,,,commit提交;

    这里需要注意一点,就是当我们开起事务之后,在执行回滚或者提交之前操作的数据都只是在内存里面发生的变化,磁盘上面的数据并没有变化,只有当执行了回滚或者提交磁盘数据才会发生改变;

    sql语句都执行成了,所以就commit;

    事务的特点:

    1.原子性:要么都成功,要么全失败

    2.一致性:让数据保持一致性,增多少,减多少,

    3.隔离性:多个事务并发执行,每个事务是独立执行

    4.持久性:一个事务执行成功,改变的应该是磁盘数据,而不是内存数据的变化;

    注意点:事务默认是关闭的,还有一个自动提交的属性auto_commit默认是开启的,也就是说不开启事务的情况下,默认提交也是自动开启的,插入数据的时候就会直接插入磁盘,如果把默认提交关闭,那么每次插入数据都只是在内存操作,还需要commit才能插入磁盘;还有一点就是myisam引擎不支持事务,如果要用事务的话必须使用innodb引擎;

    默认是开启了自动提交,所以我们没用事务的时候直接就插进了磁盘;

    当我们把自动提交关闭以后,就每次都需要commit了;

    没有执行commit,没有插入磁盘

    执行commit,提交到了磁盘;

    数据库编程

    所谓数据库编程,就是把sql语句封装在函数里面,然后把函数存储到mysql,以后只需要传入参数,调用函数就可以了;用数据库编程效率比较高;

    由于函数的语句的结束符是;,而sql语句的结束符也是;,所以为了避免冲突,首先把sql的结束符修改,用delimiter  符号,修改sql结束符;

    语法: create procedure  函数名(参数)

                begin

                sql语句;

                end 结束符

    call 函数名(参数)

    查询数据库函数:

    视图

    视图其实就是一张临时表,里面存了你想让别人查出来的数据,有一些敏感数据如果你不想让别人查询,那他是查不出来的,比如说有家公司需要查询你的数据库,但是你不想把所有的信息都给他,那么你只需要给他提供一张视图表就可以了,你把他所需要的数据放进是视图表,那么他就只能查到视图表里面的数据

    从下面就可以看出,我们其实是先执行了一些查询语句,然后把查询到的数据给了视图view,后面在查询视图,就只能查到视图这张临时表的数据了,查不到原表的数据;视图只能作用于查询,不能作用在其他语句上;

    触发器:

    trigger,见名知意,触发器的意思就是当执行了某些操作后会触发某操作,

    语法  触发器只能针对增删改,

    create trigger 触发器名 after|befroe    insert|update|delete on 表名  fro each row

    begin

    sql 语句

    end;

    我们知道当统计表数据的时候一般是用count(*)函数,但是这个函数效率不高,所以我们就用触发器,往另一张统计表写入数据总量,到时候查询统计表就可以得到数据的总数,而不是用count()函数,这样效率会高很多

    比如我们需要统计学生的总数:

    当我们往学生表插入一条数据,就让统计表加一,删除一条数据,就让统计表减一,最后我们只需要查询统计表就可以得出数量总数,这样效率是最高的;

    相关文章

      网友评论

        本文标题:Mysql之你不得不知道的--事务transaction,数据库

        本文链接:https://www.haomeiwen.com/subject/cnbceftx.html