innodb概括

1、Innodb是一种事务性存储引擎
2、完全支持事务的ACID特性
3、实现事务特性的原理:
使用Redo Log和Undo Log,Undo Log用于帮助未提交事务进行回滚,Redo Log记录
已经提交的事务,Undo Log会随机读写,而Redo Log基本是顺序
4、Innodb支持的是行级锁,在进行写操作时需要的资源更少,支持的并发更多
5、行级锁是由存储引擎层实现的
6、锁:
锁的主要租用是管理共享资源的并发访问
锁用于实现事务的隔离性
共享锁(读锁)
独占锁(写锁)
锁的粒度:根据粒度分为表级锁,行级锁,粒度越大,并发就越小
7、阻塞和死锁:
阻塞:一个事务中的锁需要等待另一个事务中的锁释放,形成的是阻塞
死锁:两个或两个以上的事务在执行中相互占用了对方的资源
8、Innodb状态检查:
show engine innodb status;
---------------------
原文:https://blog.csdn.net/qq_28893679/article/details/78283102

  

查看当前支持的引擎

mariadb> show engines;
+--------------------+---------+----------------------------------------------------------------------------+--------------+-----+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------+--------------+-----+------------+
| CSV | YES | CSV storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| FEDERATED | YES | FederatedX pluggable storage engine | YES | NO | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| Aria | YES | Crash-safe tables with MyISAM heritage | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------------------+--------------+-----+------------+
10 rows in set
#最常用的是innodb和MyISAM
#可见,默认引擎是innodb

  

查看表引擎

引擎是表级别的,在创建表的时候,可以设定engine=innodb或者其他引擎。如果不设定,就按服务的默认引擎来。

mariadb> show create table history;
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| history | CREATE TABLE `history` (
`itemid` bigint(20) unsigned NOT NULL,
`clock` int(11) NOT NULL DEFAULT '0',
`value` double(16,4) NOT NULL DEFAULT '0.0000',
`ns` int(11) NOT NULL DEFAULT '0',
KEY `history_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set

  

innodb支持事务

从下面的数据中可以发现,表使用innodb引擎比使用mysiam引擎,数据量要大得多。innodb支持事务,mysiam不支持事务。

mysql> use config;
Database changed mysql> create table size_test engine=myisam as select * from SvrConfig;
Query OK, 672 rows affected (0.01 sec)
Records: 672 Duplicates: 0 Warnings: 0 mysql> use information_schema
Database changed mysql> select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB')as data from TABLES where table_schema='config' and table_name='size_test';
+--------+
| data |
+--------+
| 0.13MB |
+--------+
1 row in set (0.00 sec) mysql> alter table config.size_test engine=innodb;
Query OK, 672 rows affected (0.06 sec)
Records: 672 Duplicates: 0 Warnings: 0 mysql> select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB')as data from TABLES where table_schema='config' and table_name='size_test';
+--------+
| data |
+--------+
| 0.20MB |
+--------+
1 row in set (0.00 sec)

innodb存储性能  

innodb是高性能的存储引擎,是企业核心数据库的首先,很多大型企业的mysql采用innodb,并在innodb表中存储超过1TB的数据,并发写操作超过800次/s。

innodb支持行级锁

行级锁分为共享锁和排它锁

共享锁

又叫读锁,加上共享锁之后,事务对行只能进行读操作而不能写操作。

事务结束则锁释放,未释放前不能再加其他锁。

其他事务要操作,就要共享这把锁,然后也只能进行读操作。

SELECT `id` FROM  table WHERE id in(1,2)   LOCK IN SHARE MODE
#结果集的数据都会加共享锁

  

排它锁

某个事务对某行加上锁,就只有这个事务可以写。其他事务可以读,不能写。这样就保证写入数据的一致性。

<?php
$uid=$_SESSION['uid'];
//开启事务
sql:begin
//开启行级锁的排他锁
sql:SELECT `coin` FROM user WHERE id=$uid FOR UPDATE
//扣除用户账户钱币
$res=update user set coin=coin-value where id=1;
if($res){
//将用户的提现信息添加到提现表
sql:insert into user values(null,"{$uid}",value);
//判断添加结果
if(add_cash_result){
sql:commit
}else{
sql:rollback
}
}else{
sql:rollback;
}

  

最新文章

  1. iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总
  2. spring spring data jpa save操作事务
  3. javascript中关于日期和时间的基础知识
  4. System V IPC(2)-信号量
  5. Leetcode Perfect Square
  6. Block存储区域
  7. IE8下兼容rgba颜色的半透明背景
  8. xiaocms 关于搜索功能 添加搜索字段
  9. Exception in thread &quot;main&quot; java.lang.OutOfMemoryError: Java heap space
  10. Linux基本操作 9----- 认识与学习bash
  11. Python中函数参数传递问题
  12. Jquery的hover方法让鼠标经过li时背景变色
  13. DedeCMS安装及目录结构
  14. LeetCode_Word Search
  15. 加速ssh连接
  16. Problem B: Ternarian Weights
  17. google guava cache缓存基本使用讲解
  18. PHP编程效率
  19. Eclipse连接MuMu模拟器 方便 测试 查日志
  20. Eclipse配置方法注释模板

热门文章

  1. Oracle rac 配置Weblogic数据源时 实例名及URL的选择
  2. js获取浏览器宽高、网页宽高、屏幕宽高、鼠标位置等(带图片说明)
  3. css 浏览器兼容性问题集合
  4. Opencv— — Circle Filter
  5. python 基础之第二天
  6. [SHOI 2007] 善意的投票
  7. AutoIt with XML: Add a child/grandchild node or remove any node
  8. 微信小程序内嵌网页能力开放 小程序支持内嵌网页文档说明
  9. OnCtlColor
  10. java的Set, List, Map简单介绍