ACID测试A:AUTOMICITY ,原子性;整个事物中的所有操作要么全部成功执行,要么全部失败后回滚
C:CONSISTENY,一致性;数据库总是应该从一个一致性状态转为另一个一致性状态
I:ISOLATION:隔离性;一个数据所作出的操作在提交之前,是否能为其它事物可见;出于保证并发操作之目的,隔离有多种级别
D:DURABILITY 持久性;事物一旦提交,其所作出的修改会永久保存
事物隔离级别READ-UNCOMMITTED:读未提交–>脏读
READ-COMMITTED:读提交–>不可重复读
REPEATABLE-READ:可重复读–>幻读
SERIALIZABLE:串行化
手动控制事物
启动:START TRANSACTION
提交:COMMIT
回滚:ROLLBACK事物支持savepoints:
SAVEPOINT identifier
ROLLBACK [work] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier
查看InnoDB存储引擎的状态信息MariaDB [class]> SHOW ENGINE innodb STATUSG;
mysql服务器引擎
-
存储引擎:也称为“表类型”,表级别概念,不建议咋同一个库中的表上使用不同的ENGINE。
查看数据库服务器支持的引擎MariaDB [(none)]> SHOW ENGINESG;
MariaDB [(none)]> SHOW ENGINE INNODB STATUSG; #显示INNODB引擎状态
常见的引擎MyISAM, Aria, InnoDB, MRG_MYISAM, CSV, BLACKHOLE, MEMORY, PERFORMANCE_SCHEMA, ARCHIVE, FEDERATED
InnoDB和MyISAM引擎的区别
-
InnoDB
Percon-XtraDB,支持事物,支持级别锁,支持外键数据存储在“表空间(tables space)”中:(1)所有数据库中所有类型为InnoDB的表的数据和索引存储于同一个表空间中;
表空间文件:datadir定义的目录中
文件:ibdata1,ibdata2...
(2)innodb_file_per_table=ON这个选项添加到配置文件中意味着每张表使用单独的表空间文件;每张表的数据文件(数据和索引,存储于数据库目录)存储在自己专用的表空间文件中,并存储于数据库目录下:tb1_name.ibd
表结构定义:在数据库目录,tb1——name.frm
[[email protected]~]#vim /etc/my.cnf
[[email protected]~]#systemctl start mariadb.service #重启服务MariaDB [students]> CREATE TABLE student (ID INT,NAME VARCHAR(30)); #创建一张表
[[email protected]/var/lib/mysql/students]#lsdb.opt student.frm student.ibd事务性存储引擎,适合对事物要求较高的场景中;但较适用于处理大量短期事物
基于MVCC(Mutli Version Concurrency Control) 支持高并发;
支持四个隔离级别,默认级别为REPEATALBE-READ;间隙锁以防止幻读
MariaDB [students]> SHOW SESSION VARIABLES LIKE ‘tx_isolation’;
+—————+—————–+
| Variable_name | Value |
+—————+—————–+
| tx_isolation | REPEATABLE-READ |
+—————+—————–+
MariaDB [students]> SELECT @@GLOBAL.tx_isolation;
+———————–+
| @@GLOBAL.tx_isolation |
+———————–+
| REPEATABLE-READ |
+———————–+使用聚集所以(主键索引)
支持“自适应Hash索引”
锁粒度:行级锁,间隙锁
小结:数据存储:表空间
并发:MVCC,间隙锁,行级锁
索引:聚集索引、辅助索引
性能:预读操作、内存数据缓冲、自适应Hash索引、插入操作缓存区
备份:支持热备
MyISAM支持全文索引、压缩、空间函数(GIS)
不支持事物
锁粒度:表级锁
崩溃无法保证表安全恢复
使用场景:只读或读多写少的场景、较小的表(以保证崩溃后恢复的时间较短)
文件:每个表有三个文件,存储于数据库目录中tb1_name.frm:表格式定义
tb1_name.MYD:数据文件
tb1_name.MYI:索引文件
示例:MariaDB [students]> CREATE DATABASE class;
MariaDB [class]> CREATE TABLE classes (ID INT ,number INT) ENGINE MyISAM; #创建表并指定引擎
[[email protected]/var/lib/mysql/class]#lsclasses.frm classes.MYD classes.MYI class.frm class.ibd db.opt
特性:加锁和并发:表级锁
修复:手动或自动修复、但可能会丢失数据
索引:非聚集索引
延迟索引更新
表压缩
其他的存储引擎CSV:将CSV文件(以逗号分隔字段的文本文件)作为mysql表文件
MRG_MYISAM:将多个MyISAM表合并成虚拟表
BLANCKHOLE:类似于/dev/null,不真正存储数据
MEMORY:内存存储引擎,支持hash索引,表级锁,常用于临时表
FEDERATED:用于访问其他远程mysql服务器上表的存储引擎接口
mariadb额外支持很多中引擎:OQGraph、SphinxSE、TokuDB、Cassandra、CONNECT、SQUENCE、..