数据库引擎
INNODB 默认使用
MYSAM 早些年使用
MYSAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据库行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间大小 | 较小 | 较大约为2倍 |
MYSAM 节约空间 速度较快
INNODB 安全 多表操作
事务
概念
事务就是将一组SQL语句放在同一批次内去执行,要么都成功,要么都失败。
ACID 原则
原子性 A
整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(ROLLBACK)到事务开始前的状态,就像这个事务从来没有执行过一样
要么全部完成,要么全部不完成
一致性 C
一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。也就是说:如果事务是并发多个,系统也必须如同串行事务一样操作。其主要特征是保护性和不变性(Preserving an Invariant),以转账案例为例,假设有五个账户,每个账户余额是100元,那么五个账户总额是500元,如果在这个5个账户之间同时发生多个转账,无论并发多少个,比如在A与B账户之间转账5元,在C与D账户之间转账10元,在B与E之间转账15元,五个账户总额也应该还是500元,这就是保护性和不变性。
事务前后数据完整性要一致
隔离性 I
隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。
并发执行时,数据库为每个用户开启一个事务,事务执行期间不被其他事务打扰,事物之间相互隔离
隔离所导致的问题
脏读
不可重复读
虚度
持久化 D
表示事务结束后的数据不随着外界原因导致数据丢失
例如· 转账200
操作前 A :800 B:200
操作后 A: 600 B:400
如果在操作前 (事务还没有提交)服务器断电,那么重启后,数据状态为
A:800 B:200
如果在操作后 (事务已经提交) 服务器断电,那么重启数据库以后 ,数据状态为 A: 600 B : 400
事务一旦提交就不可逆
标签:转账,事务,账户,要么,支持,mysql,执行 来源: https://blog.csdn.net/qq_41199502/article/details/114525621
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。