• 只要等一等就能多“等”出8600万美元! 2019-01-23
  • 长颈鹿在中国高纬度地区成功繁育 小鹿刚出生一米八 2019-01-23
  • 浙江省快乐12走势图表:mysql存储引擎、事务

    3d开奖结果走势图连线 www.fwrl.net

    “嗯?”就在蒂可沉思着这么做会不会得不偿失的时候却被旁边一座土屋里面的声音弄得她立刻下了决定……

    钱多多理财安全吗

    “现在还不到告诉你的时候,你只需要记住,现在不让你使用这个武魂并且给他附加魂环,只是为了你的将来打算。你一定要牢记?!?br/>“若是这样!”纪太虚心中想到:“那该怎么办?要不然我也修炼第二元神、身外化身?”随着太阴元精、贪狼星力的不断涌来,纪太虚身周的神明更加清晰凝练,愈加像真人。纪太虚一边看着这些突破虚空而来的星力一边想:“不如我先自顺着这些星力探知一下上界的情形如何?!?/p>

    武魂殿教皇比比东,为武魂帝国第一代帝皇,以一届女子之身统驭帝国,在向外的短暂扩张之后,开始整合帝国,排除异己,训练军队。武魂殿多年所积蓄的财力成为了帝国展的坚实后盾,短短几年时间,武魂帝国已经俨然成为与天斗、星罗两大帝国三足鼎立的强大帝国,而且在实力上足以超过任何一个帝国。帝国两边边境驻守军队中,有超过两万名魂师,并且由长老殿封号斗罗亲自率领。

    mysql存储引擎、事务


    MySQL存储引擎介绍

    文件系统

    • 操作系统组织和存取数据的一种机制。
    • 文件系统是一种软件。

    文件系统类型

    ext2 ?ext3 ?ext4 ?xfs 数据

    不管使用什么文件系统,数据内容不会变化

    不同的是,存储空间、大小、速度

    MySQL引擎

    可以将MySQL引擎理解为:MySQL的“文件系统”,只不过功能更加强大。

    MySQL引擎的功能

    除了可以提供基本的存取功能,还有更多功能事务功能、锁定、备份和恢复、优化以及特殊功能。

    MySQL 提供以下存储引擎:

    – InnoDB
    – MyISAM
    – MEMORY
    – ARCHIVE
    – FEDERATED
    – EXAMPLE
    – BLACKHOLE
    – MERGE
    – NDBCLUSTER
    – CSV

    注:只有innodb与myisam最常用

    Innodb存储引擎简介

    在MySQL5.5版本之后,默认的存储引擎,提供高可靠性和高性能。

    Innodb引擎的优点

    1. 事务安全(遵从ACID)
    2. MVCC(Multi-Versioning Concurrency Control,多版本并发控制):InnoDB行级锁、Oracle样式一致非锁定读取(共享锁)
    3. 表数据进行整理来优化基于主键的查询(聚集索引)
    4. 支持外键引用完整性约束
    5. 大型数据卷上的最大性能
    6. 将对表的查询与不同存储引擎混合
    7. 出现故障后快速自动恢复(crash safe recovery)
    8. 用于在内存中缓存数据和索引的缓冲区池(buffer pool(data buffer page? log buffer page) 、undo buffer page)

    查看数据库的存储引擎设置

    使用SELECT确认会话存储引擎:

    SELECT @@default_storage_engine;
    show variables like "%engine%";

    使用SHOW确认每个表的存储引擎:

    SHOW CREATE TABLE CityG
    SHOW TABLE STATUS LIKE "CountryLanguage"G

    使用INFORMATION_SCHEMA确认每个表的存储引擎:

    SELECT TABLE_NAME, ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = "City" AND TABLE_SCHEMA = "world"G

    设置存储引擎

    基本不需要修改设置存储引擎

    在启动配置文件中设置服务器存储引擎:

    [mysqld] 
    default-storage-engine=<Storage Engine>

    使用 SET 命令为当前客户机会话设置:

    SET @@storage_engine=<Storage Engine>;

    在CREATE TABLE 语句指定:

    CREATE TABLE t (i INT) ENGINE = <Storage Engine>;

    从5.1版本迁移到5.5以上版本的mysql注意修改存储引擎

    假如5.1所有生产表都是myisam的

    使用mysqldump备份后,一定要替换备份的文件中的engine字段从myisam到innodb

    否则迁移就没有意义

    Innodb体系结构

    物理存储结构(表空间): 

    ?

    InnoDB 系统表空间

    默认情况下,InnoDB 元数据、撤消日志和缓冲区存储在系统“表空间”中

    表空间:MySQL数据库存储的方式

    表空间中包含数据文件

    MySQL表空间和数据文件是1:1的关系

    共享表空间除外,是可以1:N关系

    表空间类型

    1、共享表空间:ibdata1~ibdataN,一般是2-3个

    2、独立表空间:存放在指定库目录下

    例如data/world/目录下的city.ibd 表空间位置(datadir):data/目录下

    系统表空间的存储内容

    共享表空间的物理存储结构(ibdata1~N),也通常被叫做系统表空间,是数据库初始化生成的。

    1、系统元数据,基表数据,除了表内容数据之外的数据

    2、undo日志(回滚日志)数据

    3、tmp表空间(一般很少关注)

      ib_logfile0~N(redo日志)

      存放的是innodb表的重做日志。

      注释:

      undo日志默认是在ibdata中的,在5.6以后是可以单独定义的。

      tmp表空间在5.7版本以后也被移出了ibdata1,ibtmp1

      在5.5版本以前,所有的应用数据也都默认存放到了ibdata中

    数据独立表空间

    除了系统表空间之外,InnoDB 还在数据库目录中创建另外的表空间,用于每个 InnoDB 表的 .ibd 文件。

    InnoDB 创建的每个新表在数据库目录中设置一个 .ibd 文件来搭配表的 .frm 文件。

    在5.6以后,默认的情况下,会单表单独存储到独立表空间文件中。

    独立表空间设置:

    show variables like "%per_table%";

    在参数文件/etc/my.cnf可以控制独立表空间功能是否开启,5.6默认开启的。

    innodb_file_per_table=1   ---->开启独立表空间,单表单存储
    innodb_file_per_table=0   ---->关闭独立表空间,所有数据存放到ibdata中

    设置共享表空间

    通过添加数据文件增加表空间大小。

    在 my.cnf 文件中使用 innodb_data_file_path 选项

    [mysqld]
    innodb_data_file_path=datafile_spec1[;datafile_spec2]

    配置共享表空间实例

    配置示例:创建一个表空间,其中包含一个名为 ibdata1 且大小为 12 MB (固定)的数据文件和一个名为 ibdata2 且大小为 100 MB(自动扩展)的数据文件:

    一般是在初始搭建环境的时候就定义好,一般2-3个共享表空间文件

    预设值1G,最后一个文件自动扩展

    vi /etc/my.cnf
    innodb_data_file_path=ibdata1:12M;ibdata2:100M:autoextend

    默认情况下将文件放置在 data 目录中。

    如果需要,显式指定文件位置。

    ?Innodb引擎、事务

    事务生命周期图

    ?

    ?事务ACID

    A --- Atomic(原子性)

    所有语句作为一个单元全部成功执行或全部取消。

    例如:

    update  t1 set  money=10000-17      where id=个人微信号
    update   t1  set  money=1000000+17  where id=二连长的微信号
    以上语句都成功了,才能把产品给你

    C --- Consistent(一致性)

    如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。

    例如:

    update  t1 set  money=10000-17       where id=个人微信号
    update   t1  set  money=1000000+17   where id=二连长的微信号
    在以上操作过程没有完全成功情况下,你去查自己的账户,应该还是10000块

    I --- Isolated(隔离性)

    事务之间不相互影响。

    例如:

    update  t1 set  money=10000-17       where id=个人微信号
    update   t1  set  money=1000000+17  where id=二连长的微信号
    1、在做以上操作的时候,其他人是不能对这两个账户做任何的取款,存款操作
    2、在不同的隔离条件下,可能一致性保证又不一样。

    隔离级别会影响到一致性。

    read-uncommit? 做了操作就显示结果了

    read-commit?? ?? 可能会用的一种级别,

    repeatable-read?? 默认级别,和oracle一样,

    serializable?? ???? 严格模式,一般不用

    D --- Durable(持久性)

    事务成功完成后,所做的所有更改都会准确地记录在

    数据库中。所做的更改不会丢失。

    事务的控制语句

    • START TRANSACTION(或 BEGIN):显式开始一个新事务
    • SAVEPOINT:分配事务过程中的一个位置,以供将来引用
    • COMMIT:永久记录当前事务所做的更改
    • ROLLBACK:取消当前事务所做的更改
    • ROLLBACK TO SAVEPOINT:取消在 savepoint 之后执行的更改
    • RELEASE SAVEPOINT:删除 savepoint 标识符
    • SET AUTOCOMMIT:为当前连接禁用或启用默认autocommit模式

    主要:

    begin        事务开始的标记
    commit       事务成功提交的标记
    rollback     事务回滚的标记

    autocommit 设置,控制是否每条DML语句自动提交,生产中要关掉 autocommit=0;也就是设置为手工提交事务的模式;

    设置为1,开启自动提交的优点:数据安全性好,每次修改都会落地。

    缺点:

    1、不能进行银行类的交易事务

    2、产生大量的小IO

    我们可以通过以下命令进行修改关闭(0是关闭,1是开启)

    SET GLOBAL AUTOCOMMIT=0; --- 所有新建会话
    SET SESSION AUTOCOMMIT=0; --- 当前会话
    SELECT @@AUTOCOMMIT; --- 查看设置结果

    我们也可以修改配置文件让其永久生效

    vi /etc/my.cnf
    [mysqld]
    autocommit=0

    redo

    redo,顾名思义“重做日志”,是事务日志的一种。

    作用:在事务ACID过程中,实现的是“D”持久化的作用。

    先将数据提取到内存中进行操作,在修改完成后,redo记录数据变化的过程,就算事务的完成,然后就算是断电事务没来的及写入磁盘,下次开启数据库redo也会先执行修改数据。

    innodb_flush_log_at_trx_commit? ---- 此参数控制着事务提交的时候刷新redo日志

    mysql> show variables like "%commit%";
    +--------------------------------+-------+
    | Variable_name                  | Value |
    +--------------------------------+-------+
    | autocommit                     | ON    |
    | binlog_order_commits           | ON    |
    | innodb_api_bk_commit_interval  | 5     |
    | innodb_commit_concurrency      | 0     |
    | innodb_flush_log_at_trx_commit | 1     |
    +--------------------------------+-------+
    5 rows in set (0.00 sec)

    undo

    undo,顾名思义“回滚日志”,是事务日志的一种。

    作用:在事务ACID过程中,实现的是“A、C”原子性和一致性的作用。

    在将数据提取到内存打算修改数据的时候,undo会将数据没改的时候做一个快照,然后如果有一方失败,事务就会返回致原样。

    事务中的锁

    在事务ACID过程中,“锁”和“隔离级别”一起来实现“I”隔离性的作用。

    四种隔离级别:建议使用REPEATABLE? READ

    READ UNCOMMITTED? 允许事务查看其他事务所进行的未提交更改

    READ COMMITTED? ? ? ?允许事务查看其他事务所进行的已提交更改

    REPEATABLE READ???? 确保每个事务的 SELECT 输出一致(InnoDB 的默认级别)

    SERIALIZABLE? ? ? ? ? ? ? 将一个事务的结果与其他事务完全隔离

    ?

    当前文章://www.fwrl.net/pu41q/83226.html

    发布时间:2019-01-24 06:40:57

    找兼职可在家 独立日兼职企业版 10万做什么生意好 最新科技创业致富项目 学生零用钱使用调查 在电脑上怎么能挣钱 网络上做什么赚钱 大学生网上挣钱的方法

    编辑:密帝董

      

    Comments are closed.

  • 只要等一等就能多“等”出8600万美元! 2019-01-23
  • 长颈鹿在中国高纬度地区成功繁育 小鹿刚出生一米八 2019-01-23