DML 事务 隔离级别 存储引擎对比

DML 事务 隔离级别 存储引擎对比

DML

insert into

  第一种:
    insert into tb_name [(col1,col2,....)]{values|value}(val1,val2,...)[,(val21,val22,....),....]
  第二种:
     insert into tb_name set col_name=val1,col2=val2,....
  第三种(将一个表中的数据插入到另外一张表中):
     insert into tb_name select clause          

   <!--replace的工作机制: 与Insert相同,除了在新插入的数据与表中的主键或唯一索引定义的数据相同会替换老的行;-->

update 更新数据

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1=val1 [, col_name2={val2] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]

  update通常情况下,必须要使用where字句,或者使用limit限制要修改的行数

--safe-updates:启动时应该带选项

delete:删除数据

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]

 truncate tb_name ; 重置表的内容

MYSQL基本架构

?

连接池 与用户请求建立连接

连接连接池用到的协议:文本或者二进制
二进制的协议高效一些

核心功能层 查询解析,分析,优化,内置函数

跨存储引擎的功能

 query cache 缓存,只保存select查询

存储引擎层 数据的存入和提取

explain:分析语句,索引的使用

MySQL锁

执行操作时施加的锁的模式

   1.读锁:用户在读的时候施加的锁,为防止别人修改,但是用户可以读,还被称为共享锁

   2.写锁:独占锁,排它锁。其他用户不能读,不能写

锁粒度: (数据量)

      表锁:table lock
           锁定了整张表
        行锁:row lock
           锁定了需要的行

 粒度越小,开销越大,但并发性越好:
 粒度越大,开销越小,但并非性越差;

锁的实现位置:

   MySQL锁:可以手动使用,可以使用显示锁
   存储引擎锁:自动进行的(隐式锁)

   显示锁:
      lock tables:施加锁
      LOCK TABLES
      tbl_name lock_type
      [, tbl_name lock_type] ...

      锁的类型 lock_type
      (READ | WRITE)

      unlock tables:解锁

     InnoDB存储引擎也支持另外一种显示锁(锁定挑选出的部分行,行级锁)
     select .... lock in share mode
     select .... for update

        <!--做备份时要手动施加读锁-->

事务:Transaction

事务就是一组原子性的查询语句,也即将多个查询当作一个独立的工作单元

ACID测试:能够满足ACID测试就表示其支持事务,或兼容事务

A:Atomicity,原子性,都执行或者都不执行
C:Consistency,一致性,从一个一致性状态转到另外一个一致性状态
I:Isolaction,隔离性。一个事务的所有修改操作在提交前对其他事务时不可见的
D: Durability, 持久性,一旦事务得到提交,其所做的修改会永久有效

    安全性越高,并发性越低

隔离级别:

       READ UNCOMMITTEND(读未提交),脏读,不可重复读,幻读
       READ COMMITTEND(读提交)  不可重读
       REPEATABLE READ (可重读)
       SERIALIZABLE(可串行化)强制事务的串行执行避免了幻读;性能极低

启动事务

   start transaction

事务提交

      commit

事务回顾

      rollback

savepoint 控制回滚的位置

   SAVEPOINT identifier
   ROLLBACK [WORK] TO [SAVEPOINT] identifier

**如何没有显式启动事务,每个语句都会当作一个默认的事务,其执行完成会被自动提交

1.select @@global.autocommit

set global autocommit = 0

2.cimmication:注意 关闭自动提交,请记得手动启动事务,应记得手动提交**

查看mysql的事务隔离级别

      show global  variables like ‘tx_isolation‘
      select @@global.tx_isolation

设置mysql的事务隔离级别

set global tx_isolation= 级别  (READ UNCOMMITTEND| READ COMMITTEND| REPEATABLE READ | SERIALIZABLE

建议:对事物要求不特别严格的场景下,可以使用读提交

MVCC:多版本并发控制

每个事务启动时,InnoDB会为每个启动的事务提供一个当下时刻的快照
  为实现此功能,InnoDB会为每个表提供两隐藏的字段,一个用于保存行的创建时间,一个用于保存行的失效时间,(其实里面存储的是系统版本号 system version number)
   旨在两个隔离级别下有效:read committed和repeatable read

MySQL 的存储引擎

定义:存储引擎也通常被称作“表类型”

查看存储引擎

   mysql> show engines;
   mysql> show table status  [{FROM | IN} db_name] [LIKE ‘pattern‘ | WHERE expr]

  比如 :   mysql> show table status in hellodb;
           mysql> show table status in hellodb where Name=‘class‘\G
    ***************************************
        Name 表名
        Engine 存储引擎
        Version:版本
        Row_format:行格式
           {DEFAULT|DYNAMIC|FIXED|COMMPRESSED|REDUNDANT|COMPACT}

        Rows:表中的行数
        Avg_row_length:平均每行包含的字节数
        Data_length:表中数据总体大小,单位为字节
        Max_data_length:表能够占用的最大空间,单位为字节,0表示么有上限
        Index_length:索引的大小,单位为字节
        Data_free:对于MyISAM表,表示已经分配但尚未使用的空间,其中包含此前删除行之后腾出来的空间

        Auto_increment:下一个AUTO_INCREMENT的值
        Create_time:表的创建时间
        Update_time: 表数据的最后一次修改时间
        Check_time: 使用CHECK TABLE或myisamchk最近一次检查表的时间
        Collation:排序规则
        Checksum:如果启动,则为表的checksum
        Create_options:创建表时指定使用的其他选项
        Comment:表的注释信息

MySQL数据文件

InnoDB

      1.innodb_file_per_table=OFF,即是用共享表空间
         每个表一个独有的格式定义文件:tb_name.frm
         还有一个默认位于数据目录下的共享的表空间文件:ibdata#
      2.innodb_file_per_table=ON,即是用独立表空间
        每个表在数据库目录下存储两个文件
          tb_name.frm
          tb_name.ibd

    <!--表空间: table space ,由InnoDB管理的特有格式数据文件,内部可同时存储数据和索引-->

MyISAM

   每个表都在数据库目录下存储三个文件
       tb_name.frm
       tb_name.MYD
       tb_name.MYI

修改默认存储引擎:通过default_storage_engine服务变量实现

各存储引擎的特性

InnoDB:

  支持事务,有事务日志
  ib_logfile0
  ib_logfile1
  支持外键约束
  支持MVCC(多版本并发控制)
     支持聚簇索引
       聚簇索引之外的其他索引,通常称之为辅助索引
   行级锁:间隙锁
   支持使用辅助索引
   支持自使用hash索引
   支持热备份

MyISAM:

    全文索引
      支持表压缩存放:做数据仓库,能节约存储空间并提升性能
      支持空间索引
      表级锁
      延迟更新索引

     不支持事务、外键和行级锁
     崩溃后无法安全恢复数据

  使用场景:只读数据,表较小,能够忍受崩溃后的修复操作和数据丢失

ARCHIVE

    仅支持INSERT和SELECT,支持很好压缩功能
    应用于存储日志信息,或其他按照时间序列实现的数据采集类的应用

CSV:

    将数据存储为CSV格式,不支持索引,仅使用与数据交换场景

BLACKHOLE:

    没有存储机制,任何发往次引擎的数据都会丢弃,其会记录二进制日志,因此,常用于多级复制架构中作中转服务器

MEMORY:

    保存数据在内存中,内存表;常用于保存中间数据,如周期性的聚合数据等,也用于实现临时表
    支持hash索引,使用表级锁,不支持BLOB和TEXT数据类型

MRG_MYISAM:

   是MYISAM的一个变种,能够将多个MyISAM表合并成一个虚表

NDB:

   是MySQL CLUSTER中专用的存储引擎、

第三方的存储引擎

XtraDB:增强的InnoDB,有Percona提供

         编译安装时,下载XtraDB的源码替代MySQL存储引擎中的InnoDB的源码

PBXT:MariaDB自带此存储引擎

    支持引擎级别的复制、外键约束,对SSD磁盘提供适当支持
   支持事务、MVCC

TokuDB:

   使用 Fractal Trees索引,适用存储大数据,拥有很好的压缩比,已经被引入MariaDB

列式数据存储引擎:

 Infobright:目前较有名的列式引擎,适用于海量数据存储场景,如PB级别,专为数据分析和数据仓库设计
 InfiniDB
 MonetDB
 LucidDB

开源社区存储引擎:

 Aria:前身为Maria,是增强版的MyISAM(支持崩溃后安全恢复,支持数据缓存)
 Groona:全文索引引擎
 Mroonga:是基于Groona的二次开发版
 OQGraph:由open query研发,支持图(网状 )结构的存储引擎
 SphinxSE:为Sphinx全文搜索服务器提供了SQL接口
 Spider:能将数据切分成不同的分片,比较高效透明的实现了分片(shared),并支持在分片上支持并行查询

*如何选择存储引擎:

是否需要事务

备份的类型的支持

崩溃后的恢复

特有的特性*

索引类型:

   聚簇索引
   辅助索引
   B树索引
   R树索引
   hash索引
   全文索引
时间: 2024-08-26 22:44:25

DML 事务 隔离级别 存储引擎对比的相关文章

事务以及MySQL事务隔离级别+MySQL引擎的区别

1.事务的基本要素:ACID 1.原子性(Atomicity): 事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节.事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样.也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位. 2.一致性(Consistency): 事务开始前和结束后,数据库的完整性约束没有被破坏 .比如 A 向 B 转账,不可能 A 扣了钱,B 却没收到. 3.隔离性(Isolation): 同一时间,只允许一个事

MySQL数据库引擎、事务隔离级别、锁

MySQL数据库引擎.事务隔离级别.锁 数据库引擎InnoDB和MyISAM有什么区别 大体区别为: MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行效率比InnoDB类型更快,但是不支持事务,而InnoDB提供事务支持以及外键等高级数据库功能. 具体实现的区别: InnoDB不支持FULLTEXT类型的索引 InnoDB中不保存表的具体行数,也就是说,执行查询SQL时,InnoDB要扫描一遍整个表来计算有多少行,而MyISAM只要简单的

MYSQL事务及存储引擎对比

Innodb支持事务,而myisam不支持事务. 事务的定义: 当多个用户访问同一份数据时,一个用户在更改数据的过程中可能有其他用户同时发起更改请求,为保证数据的更新从一个一致性状态变更为另一个一致性状态,这时有必要引入事务的概念. Mysql提供了多种引擎支持Innodb和BDB.Innodb存储引擎事务主要通过UNDO日志和REDO日志实现,Myisam和memory引擎则不支持事务.下图分别给出三种mysql引擎的区别和特性: Myisam存储引擎:由于该引擎不支持事务.也不支持外键,所以

Innodb中的事务隔离级别和锁的关系

前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力.所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在.这里通过分析MySQL中InnoDB引擎的加锁机制,来抛砖引玉,让读者更好的理解,在事务处理中数据库到底做了什么. #一次封锁or两段锁? 因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道

Innodb中的事务隔离级别和锁的关系(转)

原文:http://tech.meituan.com/innodb-lock.html 前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力.所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在.这里通过分析MySQL中InnoDB引擎的加锁机制,来抛砖引玉,让读者更好的理解,在事务处理中数据库到底做了什么. 一次封锁or两段锁? 因为有大量的并

MySQL InnoDB中的事务隔离级别和锁的关系

前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力.所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在.这里通过分析MySQL中InnoDB引擎的加锁机制,来抛砖引玉,让读者更好的理解,在事务处理中数据库到底做了什么. 一.一次封锁or两段锁因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道会

Innodb 中的事务隔离级别和锁的关系

转自:https://tech.meituan.com/innodb-lock.html 前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力.所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在.这里通过分析MySQL中InnoDB引擎的加锁机制,来抛砖引玉,让读者更好的理解,在事务处理中数据库到底做了什么. #一次封锁or两段锁?因为有大量的

数据库事务、事务隔离级别以及锁机制详解

以下主要以MySQL(InnoDB引擎)数据库为讨论背景,纯属个人学习总结,不对的地方还请指出! 什么是事务? 事务是作为一个逻辑单元执行的一系列操作,要么一起成功,要么一起失败.一个逻辑工作单元必须有四个属性,称为 ACID(原子性.致性.隔离性和持久性)属性,只有这样才能成为一个事务. 数据库事物的四大特性(ACID): 1)原子性:(Atomicity) 务必须是原子工作单元:对于其数据修改,要么全都执行,要么全都不执行. 2)一致性:(Consistency) 事务在完成时,必须使所有的

第36讲 谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景

在日常开发中,尤其是业务开发,少不了利用 Java 对数据库进行基本的增删改查等数据操作,这也是 Java 工程师的必备技能之一.做好数据操作,不仅仅需要对 Java 语言相关框架的掌握,更需要对各种数据库自身体系结构的理解.今天这一讲,作为补充 Java 面试考察知识点的完整性,关于数据库的应用和细节还需要在实践中深入学习.今天我要问你的问题是,谈谈 MySQL 支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?典型回答所谓隔离级别(Isolation Level),就是在数据库事务中,