1,什么是存储引擎
存储引擎说白了就是如何存储数据,如何为存储的数据建立索引和如何更新,查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以成为表类型。
在Oracle和SQL Server等数据库中只有一个存储引擎,所有的数据存储管理机制都是一样的。MySQL数据库提供了多种存储引擎,用户可以根据不同的需求为数据库表选择不同的存储引擎,也可以根据自己的需要编写自己的存储引擎。
2,如何选择存储引擎:
InnoDB存储引擎:用于事务处理应用程序,具有众多特性
MyISAM存储引擎:主要用于管理费事务表,它提供高速存储和检索,以及全文搜索能力
...
这边我们来谈谈Innodb的事务特性,Innodb是MySQL中少有支持事务的存储引擎。
3.满足如下的要求称之为事务(transaction):
ACID: 一致性,持久性,原子性,隔离性
1、原子性(atomicity)原子性是指整个数据库事务是不可分割的工作单位
2、一致性(consistency)一致性指事务将数据库从一种状态转变为下一种一致的状态。在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏。例如:存入3k,另外扣掉3k
3、隔离性(isolation)一个事务的影响在该事务提交之前对其他事务都不可见------这通过锁来实现
4、持久性(durability)事务一旦提交,其结果就是永久性的
4.MYSQL中autocommit变量值为ON,则表示自动提交事务,每条sql语句就是一个事务,执行完后自动提交,autocommit为OFF,则不自动提交,需要手动提交。
MariaDB [linux]> show variables like ‘autocommit‘; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | OFF | +---------------+-------+ 1 row in set (0.00 sec)
事务是有隔离性的,分为4个级别:
1 READ-UNCOMMITTED //事务中修改数据后但尚未提交,另一个事务就能查询到修改后的结果,可以理解为实时同步的,但是本事务提交后,另一个事务的查询的结果又会跟着同步变化了。
2READ-COMMITTED //事务中修改数据后但尚未提交,另一个不能查询修改的数据,只能看到事务前的结果。只有当事务提交了之后,另一个才能看到修改的结果。
3REPEATABLE-READ //某一事务中查看到的数据是该事务开始前的数据状态,再未结束本次事务前,其他事务修改的数据不会被显示出来。
4SERIALIZABLE //只有当一个事务完成才能执行下一个事务或其他事务,其他的事务会被阻塞
MySQL的隔离级别是通过变量tx_isolation实现的:
MariaDB [linux]> show variables like ‘tx_isolation‘; +---------------+------------------+ | Variable_name | Value | +---------------+------------------+ | tx_isolation | READ-UNCOMMITTED | +---------------+------------------+ 1 row in set (0.00 sec)