美文网首页MySQL全栈(二)
①①MySQL事务transaction(手动事务、事务操作、事

①①MySQL事务transaction(手动事务、事务操作、事

作者: Agony_锐 | 来源:发表于2020-02-20 09:13 被阅读0次

    mysql.exe -h localhost -P 3306 -u root -p

    use mydb;     ——     进入数据库

    查看:show index from 表名\G

    desc:查看表结构

    select * from 表名:查询所有数据 

    提交事务:commit; 同步数据表,表示操作成功

    回滚事务:rollback; 直接清空日志表,表示操作失败

    事务transaction

    事务的操作只针对数据操作,不针对表

    涉及到安全方面的问题用事务—使用事务的前提存储引擎必须是innodb

    -- 创建一个账户

    create table my_account(

    id int primary key auto_increment,

    number char(16) not null unique comment '账户',

    name varchar(20) not null,

    money decimal(10,2)default 0.0 comment '账户余额'

    )charset utf8;

    -- 插入数据

    insert into my_account values

    (null,'0000000000000001','张三',1000),

    (null,'0000000000000002','李四',2000);

    -- 张三转账1000元给李四

    update my_account set money=money-1000 where id=1;

    一、事务操作分两种:自动事务(默认)、手动事务

    1)手动事务的操作流程

                1> 开启事务:start transaction;

    -- 事务安全

    -- 开启事务

    start transaction;

                2> 进行事务操作

    -- 事务操作:1、李四账户减少

    update my_account set money=money-1000 where id=2;

    -- 事务操作:2、张三账户增加

    update my_account set money=money+1000 where id=1;

                3> 关闭事务

                            提交事务:commit; 同步数据表,表示操作成功

    -- 提交事务

    commit;

                            回滚事务:rollback; 直接清空日志表,表示操作失败

    -- 回滚事务:会清空

    rollback;

    二、事务操作原理:

    事务开启之后,所有的操作都会临时保存到事务日志,而事务日志只有在得到commit命令才会同步到数据表,其他任何情况都会清空,比如rollback、断电、断开连接

    三、回滚点

                1)设置回滚点语法:savepoint 回滚点名字;

                2)回到回滚点语法:rollback to 回滚点名字;

    -- 设置回滚点

    savepoint sp1;

    -- 银行扣税

    update my_account set money=money-10000*0.05 where id=2;-- 错误

    -- 回滚到回滚点

    rollback to sp1;

    -- 继续操作

    update my_account set money=money-10000*0.05 where id=1;

    -- 查看结果

    select * from my_account;

    -- 提交结果

    commit;

    -- 如果要注册一个用户 用户名 》密码 》验证码 —— 如果不注册,将全回滚用rollback

    -- 如果要注册一个用户 用户名 》密码 》验证码 —— 如果重新输入验证码,将用回滚点rollback to

    回滚喝回滚点的不同

    rollback :所有操作都不要了

    rollback to:回到某个回滚点之后的错误操作目标

    四、自动事务处理

                1)show variables like 'autocommit';

                2)关闭事务自动提交:set autocommit=off/0;

    关闭自动提交后,增、删、改就只能手动提交(commit)

    打开事务自动提交:set autocommit=off/;——默认

    -- 显示系统变量autocommit(模糊查询)

    show variables like 'autocommit';

    -- 关闭事务自动提交

    set autocommit=0;

    update my_account set money=money+10000 where id=2;

    commit;

    -- 打开事务自动提交

    set autocommit=1;

    update my_account set money=money-10000*0.05 where id=2;

    五、(数据库)事务的四大特性:ACID

                A:Atomic,原子性(要么都成功,要么都失败)

                C:Consistency,一致性(只要开启事务,没有开启commit,另一个窗口没有影响)

                I:Isolation,隔离性(两个窗口都在进行事务,互不影响)

                D:Durability,持久性(只要提交了,rollback也没用)

    -- 隔离性

    start transaction;

    -- 给张三返税,反500元

    update my_account set money=money+500 where id=1;

    -- (在另一个命令行输入)隔离性

    start transaction;

    -- (在另一个命令行输入)李四淘宝花了500元

    update my_account set money=money-500 where id=2;

    -- 两个命令行都可以查 

    select * from my_account; 

    rollback; 

    select * from my_account;

    六、锁机制(有时候行锁,有时候表锁,有时候页锁)

    -- 锁机制

    start transaction;

    update my_account set money=money+500 where name='张三';-- 整体找,直到找到所有的‘张三’

    -- (在另一个命令行输入)李四+1000元

    update my_account set money=money+1000 where id=2;

    rollback;

    相关文章

      网友评论

        本文标题:①①MySQL事务transaction(手动事务、事务操作、事

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