mysql_innodb引擎
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;
}
mysql_innodb引擎的更多相关文章
- mysql_innodb存储引擎的优化
采用innodb作为存储引擎时的优化 innodb_buffer_pool_size 如果用 Innodb,那么这是一个重要变量.相对于 MyISAM 来说,Innodb对于 buffer size ...
- MySQL数据库和InnoDB存储引擎文件
参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...
- Java 8 的 Nashorn 脚本引擎教程
本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...
- 【开源】.Net 动态脚本引擎NScript
开源地址: https://git.oschina.net/chejiangyi/NScript 开源QQ群: .net 开源基础服务 238543768 .Net 动态脚本引擎 NScript ...
- UE4新手引导之下载和安装虚幻4游戏引擎
1) 进入虚幻4的官方主页(https://www.unrealengine.com/) 这里你可以获得关于虚幻4的最新资讯,包括版本更新.博客更新.新闻和商城等.自2015年起,该引擎已经提供免费下 ...
- Mysql存储引擎及选择方法
0x00 Mysql数据库常用存储引擎 Mysql数据库是一款开源的数据库,支持多种存储引擎的选择,比如目前最常用的存储引擎有:MyISAM,InnoDB,Memory等. MyISAM存储引擎 My ...
- Mysql存储引擎比较
Mysql作为一个开源的免费数据库,在平时项目当中会经常使用到,而在项目当中我们的着重点一般在设计使用数据库上而非mysql本身上,所以在提到mysql的存储引擎时,一般都不曾知道,这里经过网上相关文 ...
- Chrome V8引擎系列随笔 (1):Math.Random()函数概览
先让大家来看一幅图,这幅图是V8引擎4.7版本和4.9版本Math.Random()函数的值的分布图,我可以这么理解 .从下图中,也许你会认为这是个二维码?其实这幅图告诉我们一个道理,第二张图的点的分 ...
- UWP简单示例(三):快速开发2D游戏引擎
准备 IDE:VisualStudio 2015 Language:VB.NET/C# 图形API:Win2D MSDN教程:UWP游戏开发 游戏开发涉及哪些技术? 游戏开发是一门复杂的艺术,编码方面 ...
随机推荐
- Java其实不支持垃圾回收
Java其实不支持垃圾回收.如果真的支持的话,大多数Java程序在运行的一开始就应该把程序本身删除,因为这些程序本身就是垃圾. // TODO: This is a 分割线. Please no ...
- 有关Option.inSamplSize 和 Compress 图片压缩
1.图片占用内存:占用的内存 = 图片长度 * 图片宽度 * 单位像素占用的字节数 注: 图片长度和图片宽度就是图片在行列上的像素数量. 图片格式: ALPHA_8:表示8位Alpha位图,即A=8, ...
- Shell之内容匹配与格式输出
对于大文本或者有些特定格式的文本,有时我们要查找特定内容或定位指定的区域,这样就需要内容匹配. 关于内容匹配,我们常使用的有几个命令: grep,支持正则,查找包含有匹配项的行. cut,提取指定的列 ...
- webpack v3 结合 react-router v4 做 dynamic import — 按需加载(懒加载)
为什么要做dynamic import? dynamic import不知道为什么有很多叫法,什么按需加载,懒加载,Code Splitting,代码分页等.总之,就是在SPA,把JS代码分成N个页面 ...
- Java 使用POI操作EXCEL及测试框架搭建、测试开发的一些想法
无论是UI自动化测试还是接口自动化测试都需要进行数据驱动,一般很常见的一种方式就是用excel来管理数据,那么就涉及到一些代码对EXCEL的操作,之前我们介绍过用CSV来处理EXCEL,但是它的功能还 ...
- java HttpClient POST请求
一个简单的HttpClient POST 请求实例 package com.httpclientget; import java.awt.List; import java.util.ArrayLis ...
- c++之拷贝构造函数详解
C++中经常使用一个常量或变量初始化另一个变量,例如: double x=5.0: double y=x; 使用类创建对象时,构造函数被自动调用以完成对象的初始化,那么能否象简单变量的初始化一样,直接 ...
- 安装ubuntu16.04之后无法关机和重启
这个问题是由于NVIDA驱动导致的,查询显卡型号,安装对应版本的驱动就可以解决此问题.ubuntu16.04 NVIDIA 驱动安装
- OpenCV在Zedboard上的移植
OpenCV编译 本文的前提是zynq交叉编译环境设置 下载opencv3.1.0源码,并解压 wget https://github.com/Itseez/opencv/archive/3.1.0. ...
- CodeForces 1091G. New Year and the Factorisation Collaboration
题目简述:若你获得“超能力”:固定$n$,对任意$a$,可以快速求出$x \in [0, n)$(若存在),使得$x^2 \equiv a \pmod n$,若存在多个$x$满足条件,则返回其中一个( ...