事务是一个原子操作单元,其对数据的修改,要么全部执行,要么全部不执行
在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的
数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然
事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持
mysql为了提升性能不会把每次的修改都实时同步到磁盘中,而是先存到缓存中,然后再使用线程去做缓冲池和磁盘中的同步。这样必然会存在问题,假如突然断电,那么没有持久化到磁盘的信息必然会丢失,那么持久性如何实现?
redo log叫做重做日志,当事务提交的时候会把所有的修改信息存放在redo log中,并且会把redo log持久化到磁盘,当电脑重启后就会重新执行redo log的修改信息来恢复数据,这样就能达到持久性的目的
一个事务中所有的操作要么全部成功提交,要么全部失败回滚,这就是事务的原子性
undo log叫做回滚日志,每条数据的变化都会产生一条记录,并且日志持久化到磁盘,undo log用来记录数据修改前的信息,比如说要插入一条记录,那么undo log就会记录一条删除该信息的语句,这样你需要回滚的时候那么undo log就会执行删除你之前插入的那条记录,达到没有修改前的状态,更新一个记录也会生成一条sql记录你更新前的字段状态,从而实现了原子性
共享锁(shared lock),又叫做"读锁"。读锁是可以共享的,或者说多个读请求可以共享一把锁读数据,不会造成阻塞。
排他锁(exclusive lock),又叫做"写锁"。写锁会排斥其他所有获取锁的请求,一直阻塞,直到写入完成释放锁。
通过原子性,持久性,隔离性来实现