前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >InnoDB与MyISAM的最大不同有两点

InnoDB与MyISAM的最大不同有两点

原创
作者头像
用户7999227
修改2021-10-08 15:19:31
3110
修改2021-10-08 15:19:31
举报
文章被收录于专栏:Java小王子Java小王子Java小王子

一是支持事务(TRANSACTION);

二是采用了行级锁。

行级锁与表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题。下面我们先介绍一点背景知识,然后详细讨论InnoDB的锁问题。

事务

  事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。   事务用来管理 insert,update,delete 语句   一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性) 1、原子性:一组事务,要么全部成功;要么撤回。 2、一致性 :满足模式锁指定的约束,比如银行转账前后总金额应该不变。事务结束时,所有的内部数据结构(如B树索引)也都必须是正确的。 3、隔离性:事务独立运行。一个事务所做的修改在最终提交之前,对其它事务是不可见的。事务的100%隔离,需要牺牲速度。 4、持久性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改,或者通过数据库备份和恢复来保证。

注意几点

  1. 在默认情况下,MySQL每执行一条SQL语句,都是一个单独的事务。
  2. 在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。即对于独立的每条sql语句,mysql会自动提交或者回滚。
  3. 如果要执行多条SQL语句组成的事务,可以显式地使用命令 BEGIN 或 START TRANSACTION开启事务,使用commit或rollback结束事务。(或者执行命令 SET AUTOCOMMIT=0,用来禁止当前会话使用自动提交,但是这种方式不推荐。)
  4. 在InnoDB的事务中,对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据行加排他锁(X);对于普通SELECT语句,InnoDB不会加任何锁(通过多版本并发控制实现,同时有效的解决了幻读的问题)。
  5. 折返点:比如设置折返点:SAVEPOINT adqoo_1,然后利用ROLLBACK TO SAVEPOINT adqoo_1实现发生在折返点 adqoo_1 之前的事务被提交,之后的被忽略。
  6. 乐观锁,即通过version来实现当并发冲突发生时,冲突的SQL语句会执行失败,然后重试或者放弃或者交给用户处理,但不能保证事务的ACID特性。(注意:update seckill set number = number -1 where seckill_id = 1000 lock in share mode;是错误的,lock in share mode和for update只能用在select语句中)
  7. InnoDB采用的是两阶段锁定协议。在事务执行过程中,随时都可以执行锁定,锁只有在执行COMMIT或者ROLLBACK时才会释放,并且所有的锁是在同一时刻被释放。所以在一个事务中,推荐最后执行需要独占(获得读锁)的行,尽量减少行锁持有的时间。
  8. InnoDB目前处理死锁的方法是:将持有最少行级排它锁的事务回滚。如果是因为死锁引起的回滚,可以考虑在应用程序中重新执行。
  9. 在事务中,如果要更新记录,应该直接申请足够级别的锁,即排他锁,而不应先申请共享锁,更新时再申请排他锁,因为当用户申请排他锁时,其他事务可能又已经获得了相同记录的共享锁,从而造成锁冲突,甚至死锁。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 事务
  • 注意几点
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档