1.存储引擎
https://segmentfault.com/a/1190000012588602
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySql的核心就是插件式存储引擎。
//所以,innoDB和myisam不只是在有无事务支持上有差异,在存储、索引等方面也有不同的方式。
可以对每一个表使用不同的存储引擎。
InnoDB: 支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对数据一致性要求比较高(比如银行),要求实现并发隔离控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。然而,与MyISAM的存储引擎相比,InnoDB的写入效率较低,占用更多的磁盘空间来保留数据和索引。
MyISAM: 插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用。MyISAM存储引擎没有redo和undo文件,没法支持事务的ACID特性,锁也只有表锁。【完整性要求不高的场景有哪些??比如做监控可视化,丢几条数据没关系?】
为什么后者不支持事务? https://www.zhihu.com/question/316804511
因为MyISAM类型的表强调的是性能,所以查询快,但是不支持事务和外键。简单点说,轻装上阵。
mysiam本身就不是事务型的存储引擎,这引擎出来时候事务概念还不完善。所以不支持
2.事务举例
https://www.cnblogs.com/q2546/p/11464670.html,https://www.51cto.com/article/605915.html
事务(Transaction)是并发控制的基本单位,它反映了现实世界中需要以一个完整的单位提交的一项工作。事务又叫做TCL,全称是transaction control language,意思是事务控制语言。
如果我们正在使用UPDATE语句同时对学生表、成绩表中的学号”20030001”改为”20040001”。这个任务需要两条UPDATE语句组成,即:
UPDATE 学生表 SET 学号=’20040001’ WHERE 学号=’20030001’ UPDATE 成绩表 SET 学号=’20040001’ WHERE 学号=’20030001’
如果执行完第一个语句后,计算机突然断电,而第二条语句还没来得急执行,数据出现了不一致怎么办?这时候就需要用到SQL的事务控制功能了。
在使用事务的情况下,SQL Server可以保证,要么所有的记录要么全部处理,要么一行也不处理。如果修改了全部记录的一半时服务器出错了,SQL Server会返回到以前未执行UPDATE操作前的位置,清除它已经修改过的数据,这就是事务处理的作用。【看起来也是一种回滚操作。】如果没有事务的话,就不会回滚。
事务其实可以划分为两大类:隐式的事务和显示的事务:
- 隐式的事务很简单,比如我们的insert、delete、update、select这些语句都是隐式的事务。【原来增删改查本身就是事务。】
- 显示的事务指的是带有很明显的开始和结束的标记,
start transaction;
3.是否支持事务
转自:https://blog.51cto.com/u_15186337/4597015
事务有很多非常好用的特性,它能够保证数据一致性,并发隔离,简化运维,避免数据丢失,甚至有些应用程序依赖这种特性来完成功能。
如果我们只是用于可视化,一些简单的统计,事务的确不重要。
-
Comment:
存储引擎的简要说明。 -
Transactions:存储引擎是否支持事务。
-
XA:存储引擎是否支持XA事务。
-
Savepoints:存储引擎是否支持保存点。