19.MySQL整改-MyISAM存储引擎变更为INNODB

MySQL的MyISAM存储引擎改为INNODB存储引擎

一、存储引擎变更背景

1.否支持行级锁

  MyISAM 只有表级锁(table-level locking),而 InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。

         表级锁: MySQL 中锁定粒度最大的一种锁,对当前操作的整张表加锁,实现简单,资源消耗也比较少,加锁快,不会出现死锁。其锁定粒度最大,触发锁冲突的概率最高,并发度最低,MyISAM 和 InnoDB 引擎都支持表级锁。

         行级锁: MySQL 中锁定粒度最小的一种锁,只针对当前操作的行进行加锁。 行级锁能大大减少数据库操作的冲突。其加锁粒度最小,并发度高,但加锁的开销也最大,加锁慢,会出现死锁。

InnoDB 存储引擎的锁的算法有三种:

Record lock:记录锁,单个行记录上的锁

Gap lock:间隙锁,锁定一个范围,不包括记录本身

Next-key lock:record+gap 临键锁,锁定一个范围,包含记录本身

2.是否支持事务

  MyISAM 不提供事务支持。

  InnoDB 提供事务支持,具有提交(commit)和回滚(rollback)事务的能力。

MySQL InnoDB 引擎使用 redo log(重做日志) 保证事务的持久性,使用 undo log(回滚日志) 来保证事务的原子性。

MySQL InnoDB 引擎通过 锁机制、MVCC 等手段来保证事务的隔离性( 默认支持的隔离级别是 REPEATABLE-READ )。保证了事务的持久性、原子性、隔离性之后,一致性才能得到保障。

3.是否支持外键

  MyISAM 不支持,而 InnoDB 支持。

4.是否支持数据库异常崩溃后的安全恢复

  MyISAM 不支持,而 InnoDB 支持。

  使用 InnoDB 的数据库在异常崩溃后,数据库重新启动的时候会保证数据库恢复到崩溃前的状态。这个恢复的过程依赖于 redo log 。

二、存储引擎变更

1.非INNODB存储表的检查

select table_schema,table_name,engine,TABLE_ROWS,AVG_ROW_LENGTH,DATA_LENGTH,

INDEX_LENGTH

from information_schema.tables where table_schema not in('mysql','sys','information_schema','PERFORMANCE_SCHEMA')

and engine <> 'InnoDB' 

order by table_schema,TABLE_ROWS desc;

发现有一个表示MyISAM存储引擎的。

 

2.表结构检查

mysql> show create table my_test1;

+--------------+-----------------------------------------------------------------------------------+

| Table    | Create Table                                                                     |

+----------+----------------------------------------------------------------------------------------+

| my_test1 | CREATE TABLE `my_test1` (

  `id` int(11) DEFAULT NULL,

  `name` varchar(50) DEFAULT NULL

) ENGINE=MyISAM DEFAULT CHARSET=utf8                                                            |

+----------+------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

3.改变表的存储结构

mysql> alter table my_test1 engine=innodb;

Query OK, 0 rows affected (0.05 sec)

Records: 0  Duplicates: 0  Warnings: 0

4.检查表的存储引擎

可以发现表已经变成Innodb存储引擎。且数据条数正常。

 

5.检查是否支持事务

mysql> select * from my_test1;

+------+-------+

| id   | name  |

+------+-------+

|    1 | xsq1  |

|    2 | xsq22 |

|    3 | xsq3  |

|    4 | xsq4  |

|    5 | xsq5  |

+------+-------+

5 rows in set (0.00 sec)

mysql> insert into my_test1 values(6,'xsq6');

Query OK, 1 row affected (0.00 sec)

mysql> select * from my_test1;

+------+-------+

| id   | name  |

+------+-------+

|    1 | xsq1  |

|    2 | xsq22 |

|    3 | xsq3  |

|    4 | xsq4  |

|    5 | xsq5  |

|    6 | xsq6  |

+------+-------+

6 rows in set (0.00 sec)

mysql> rollback;

Query OK, 0 rows affected (0.01 sec)

mysql> select * from my_test1;

+------+-------+

| id   | name  |

+------+-------+

|    1 | xsq1  |

|    2 | xsq22 |

|    3 | xsq3  |

|    4 | xsq4  |

|    5 | xsq5  |

+------+-------+

5 rows in set (0.00 sec)

可以看到回滚后插入的数据就没有了,但是如果是MyISAM存储引擎,可以插入,修改,删除,但是不支持提交和回滚。默认直接提交。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值