Mysql基本用法(七)

版权声明:秉承开源精神,博主博文可以随机转载,但请注明出处! https://blog.csdn.net/zisefeizhu/article/details/81945630

目录

Mysql的存储引擎

Mysql事务:


本篇是系列性,由浅入深,主要是为了本人日后回看时再学习,如果道友对Mysql也是零基础的话,强烈建议从头开始看

Mysql基本用法(一)

Mysql的存储引擎

       表类型:

              CREATE TABLE ... ENGINE=

       InnoDB:

              处理大量的短期事务:

              数据存储于“表空间”(table space)中;

1)      所有InnoDB表的数据和索引放置于同一个表空间中;

表空间文件:datadir定义的目录下;

     数据文件:ibddata1,ibddata2,…

2)      每个表单独使用一个表空间存储表的数据和索引;

innodb_file_per_table=ON

数据文件(存储数据和索引):tb1_name.ibd,

表格式定义:tb1_name.frm

              基于MVCC来支持高并发,支持所有的四个隔离级别,默认级别为REPEATABLE READ,间隙锁防止幻读;

              使用聚集索引

              支持“自适应hash索引”

              锁粒度:行级锁

      

              MariaDB(XtraDB (percona))

              数据存储:表空间

              并发:MVCC,间隙锁

              索引:聚集索引、辅助索引

              性能:预计操作、自适应hash、插入缓存区

              备份:支持热备(xtrabaup)

       MyISAM:

              支持全文索引(FULLTEXT index)、压缩、空间函数(GIS);但不支持事务,且为表级锁;崩溃后无法恢复;

              适用场景:只读(或者写较少)、表较小(可以接受长时间进行修复操作)

                     Aria:crash-safe

              文件:

                     tb1_name.frm:表格式定义

                     tb1_name.MYD:数据文件

                     tb1_name.MYI:索引文件

              特性:

                     加锁和并发:表级锁

                     修复:手工或自动修复、但可能丢失数据

                     索引:非聚集索引

                     延迟更新索引键:

                     压缩表

              行格式:dynamic,fixed,compressed,compact,redundent

       其它的存储引擎:

              CSV:将普通的CSV(字段通过逗号分隔)作为MySQL表使用;

              MRG_MYISAM:将多个MyISAM表合并称为一个虚拟表;

              BLACKHOLE:类似于/dev/null,不真正存储任何数据;

              MEMORY:所有数据都保存于内存中,内存表;支持hash索引;表级锁;临时表;

              PERFORMANCE_SCHEMA伪存储引擎;

              ARCHIVE:只支持SELECT和INSERT操作;支持行级锁和专用缓存区;

FEDERATED:用于访问其它远程MySQL服务器的一个代理,它通过创建一个到远程MySQL服务器的客户端连接,并将查询传输到远程服务器进行,而后完成数据存取;

    在MariaDB的上实现是FederatedX

MariaDB支持的其它存储引擎:

    OQGraph

    SphinxSE

    TokuDB

    Cassandra

    CONNECT

            SQUENCE        

并发控制:

            锁:

                        读锁:共享锁

                        写锁:独占锁

            锁粒度:

                        表级锁;

                        行级锁

           

                        锁策略:在锁粒度及数据安全性寻求的平衡机制;每种存储引擎都可以自行实现其锁策略和锁粒度;

                                Mysql在服务器级也实现了锁,表级锁,用户可以显示请求;

1)      LOCAK TABLES  tbl_name [[AS] alias] lock_type  [, tbl_name [[AS] alias] lock_type] ...

lock_type:

      READ [LOCAL] | [LOW_PRIORITY] WRITE

UNLOCK TABLES

2)      FLUSH TABLES tb_name[,...] [WITH READ LOCK] [FOR UPDATE]

3)      SELECT clase [FOR UPDATE] [WITH READ LOACK]

        分类:

                        隐式锁:由存储引擎自动施加锁;

                        显示锁:

 

Mysql事务:

        事务:一组原子性的SQL查询,或者说一个独立工作单元。

            事务日志:

        ACID测试:

            A:atomicity,原子性;整个事务中的所有操作要么全部成功执行,要么全部失败后回滚;

            C:consistency,一致性;数据库总是从一个一致性状态转换为另一个一致性状态;

            I:Isolation,隔离性;一个事物所做出的操作在提交之前,是不能为其它所见;隔离有多种隔离级别;

            D:durability:持久性,一旦事务提交,其所做的修改会永久保存于数据库中;

       

        事务:

            启动事务:START TRANSACTION

                                …

            结束事务:

1)      COMMIT:提交

2)      ROLLBACK:回滚

            注意:只有事务型存储引擎方能支持此操作;

            建议:显示请求和提交事务,而不要使用自动提交功能:

                        autocommit={1|0}

            事务支持savepoint

                        SAVEPOINT identifier

                        ROLLBACK [WORK] TO [SAVEPOINT] identifier

                        RELEASE SAVEPOINT identifier

            事务隔离级别:

                        READ UNCOMMITTED (读未提交)

                        READ COMMITTED (读提交)

                        REPEATABLE READ (可重读)

                        SERIALIZABILE (可串行化)

                        可能存在问题:

                                    脏读;

                                    不可重复读;

                                    幻读;

                                    加锁读;

                        tx_isolation:服务器变量,默认为REPEATABLE-READ;可在SESSION级进行修改;

                        SET tx_isolation=''

                                                READ-UNCOMMITTED

                                                READ-COMMITTED

                                                REPEATABLE-READ

                                                SERIALIZABLE

                        MVCC: 多版本并发控制

            死锁:

                        两个或多个事务在同一资源相互占用,并请求锁定对方占用的资源的状态;

            事务日志:

                        事务日志的写入类型为追加,因此其操作为“顺序IO”;此日志通常也被称为“预写式日志”;

猜你喜欢

转载自blog.csdn.net/zisefeizhu/article/details/81945630
今日推荐