MySQL事务和存储过程

1.事务
1.1 存储引擎

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。Mysql的核心就是存储引擎。

  • 常见存储引擎

    • InnoDB是事务型数据库的首选,执行安全性数据库,行锁定和外键。mysql5.5之后默认使用。
    • MyISAM插入速度和查询效率较高,但不支持事务。
    • MEMORY将表中的数据存储在内存中,速度较快。
  • 查看存储引擎

    show engines;
    
  • 修改存储引擎: my.ini

    default-storage-engine=INNODB
    
1.2 事务

事务用于保证数据的一致性,由一组DML操作组成,该组SQL语句要么同时成功,要么同时失败。例如转账。

  • 事务的四个特性

    • A(Atomicity)原子性:事务是原子工作单元,要么同时执行,要么同时不执行。
    • C(Consistency)一致性:符合约束规则;执行之前的整体状态和执行后数据一致。
    • I(Isolation)隔离性:并发事务之间相互不影响。
    • D(Durability)持久性:事务完成之后,对数据库的影响是永久的。
  • 如何使用事务

    # mysql默认开启自动事务提交,将每个dml操作当做一个事务。
    # 如果需要将多个dml操作放在同一事务,需要关闭自动事务提交
    set Autocommit=0;
    
    //开启事务
    start TRANSACTION;
    #一组dml操作
    update user set money = money -100 where userid = 1;
    update user set money = money + 100 where userid = 2;
    ...
    
    commit;//提交事务(数据持久化到底层文件中)
    rollback;//回滚事务(数据恢复到开启事务之前的状态)
    
  • 并发事务的存在问题

    • 脏读

      一个事务处理过程里读取了另一个未提交的事务中的数据

      当一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得到的数据不一致。例如:用户A向用户B转账100元,对应SQL命令如下

      update account set money=money+100 where name=’B’;  (此时A通知B)
      update account set money=money - 100 where name=’A’;
      

      当只执行第一条SQL时,A通知B查看账户,B发现确实钱已到账(此时

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cryueh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值