MySql 的数据储存引擎
1、存储引擎是什么?
Mysql中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。MySql默认配置了许多不同的存储引擎,可以预先设置或者在MySql服务器中启用。
2、MYSQL支持的数据引擎
MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。
InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。
BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。
Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。
Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。
Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。
Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。
Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。
Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。
3:InnoDB详解
InnoDB是为处理超大型数据量时获得最大性能而设计的。它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。
InnoDB支持ACID事务,支持行级锁定.
4: 行锁 要锁的表的引擎 必须为InnoDB
分为两种模式的行锁
共享锁 lock in share mode
排他锁 for update
操作:
set autocommit=0
function locl_row($sql,$lock_type){
mysql_query("set autocommit=0");
mysql_query("begin work");
$res = mysql_query($sql.$lock_type);
retrun $res;
}
function commit(){
mysql_query("commit;");
}
5:案例
注意 数据库 引擎 为innodb
/**
* 抢代金劵 锁行
*/
if (!empty($_REQUEST['act']) && $_REQUEST['act'] == 'juan_qiang')
{
$juan_id=1;
//判断用户是否登录
if ($user_id=$_SESSION['user_id']) {
//查询是否已经抢过代金劵
$sql = "SELECT id FROM ".$ecs->table("week01_juan_log")." WHERE user_id=".$user_id." AND juan_id=".$juan_id;
//exit($db->getOne($sql));
if (!$db->getOne($sql)) {
unset($sql);
$db->query("set autocommit=0");
$db->query("begin work");
//查询 获取到代金劵的剩余数量
$sql = "SELECT * FROM ".$ecs->table('week01_juan')." WHERE juan_id =".$juan_id." FOR UPDATE";
$arr = $db->getRow($sql);
$num = $arr['juan_num'];
unset($sql);unset($arr);
//判断剩余的数量是否大于0
if ($num>0) {
$sql = "UPDATE ".$ecs->table('week01_juan')." SET juan_num=juan_num-1 WHERE juan_id=".$juan_id;
if ($db->query($sql)) {
unset($sql);
$addtime = time();
$sql = "INSERT INTO ".$ecs->table("week01_juan_log")."(juan_id,user_id,addtime) VALUE($juan_id,$user_id,$addtime)";
if ($db->query($sql)) {
unset($sql);
sleep(10);
$db->query("commit");
exit("4"); //抢成功 同时 记录成功
}
$db->query("commit");
exit("3"); //抢成功 同时记录失败
}
$db->query("commit");
exit("2"); //抢失败
}
}
exit("1"); //已经抢过
}
exit("0"); //没有登录
}
6 锁表
6.0: 准备:
2个用户操作同一个数据库
6.1: 选择数据库
use test
6.2: 查询数据 两个用户均可以操作
select name from test where id=1;
6.3: 在数据之前锁表 谁锁表 就只有谁可以使用
锁表 有两种模式
表共享读锁: Table Read Lock
仅允许[所有人]读,
[空间外]如需写、更新要等待[空间退出].
[空间内]如需写、更新会引发mysql报错.
表独占写锁: Table Write Lock
仅允许[空间内]读写更新,
[空间外]如需写、更新要等待[空间退出]
操作:
lock tables test read/write; //锁表
select name from test where id=1; //执行操作
unlock tables; //解锁
6.4: 可以封装函数 来简化 //锁表 解锁
//可以添加在cls_mysql页面里;
function lock ($table_name,$lock_type){
mysql_query("lock tables ".$tanble_name." ".$lock_type);
}
MySql 的数据储存引擎的更多相关文章
- (转)MySQL 常用数据存储引擎区别
MySQL 常用数据存储引擎区别 原文:https://laravel-china.org/articles/4198/mysql-common-data-storage-engine mysql有多 ...
- MySQL数据库Innodb储存引擎----储存页的结构
上一篇博客回顾: 1:数据库拥有众多的储存引擎,现在主要使用的是Inoodb,这个储存引擎有Compact,Redundant,Dynamic,Compressed四种行格式 2:Compact行格式 ...
- MySQL 常用数据存储引擎区别
mysql有多种存储引擎,目前常用的是 MyISAM 和 InnoDB 这两个引擎,除了这两个引擎以为还有许多其他引擎,有官方的,也有一些公司自己研发的.这篇文章主要简单概述一下常用常见的 MySQL ...
- MySQL 的数据存储引擎
MySQL的存储引擎 InnoDB: MySQL5.5之后的默认存储引擎. 采用MVCC来支持高并发,并且实现了四个标准的隔离级别(默认可重复读). 支持事务,支持外键.支持行锁.非锁定读(默认读取操 ...
- MySQL之数据存储引擎
1.什么是存储引擎: 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处 理文本用txt类型,处理表格用excel,处理图片用png等,数据库中的表也应该有不同的 ...
- mysql 的 存储结构(储存引擎)
1 MyISAM:这种引擎是mysql最早提供的.这种引擎又可以分为静态MyISAM.动态MyISAM 和压缩MyISAM三种: 静态MyISAM:如果数据表中的各数据列的长度都是预先固定好的, ...
- Mysql 储存引擎
查看当前版本支持哪些储存引擎 mysql> show engines; InnoDB 支持事务机制 : 保证操作安全性 行级锁定 : 开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最 ...
- MySQL数据库储存引擎Inoodb一--记录储存结构
在开文我先说明一下,接下来的数据库知识文章都是在微信公众号“我们都是小青蛙”学习然后在通过自己的理解进行书写的.有兴趣的朋友可以去关注这个微信公众号.话不多说,我们在日常使用数据库进行数据持 久化的时 ...
- MYSQL索引类型。MYSQLc储存引擎
MYSQL索引类型,MYSQLc储存引擎 MySQL索引创建与删除 MySQL存储引擎的 ...
随机推荐
- 【Git】笔记1
学习廖雪峰Git教程的笔记 Git是什么: Git是目前世界上最先进的分布式版本控制系统 Git与Github的关系:github是一个用git做版本控制的项目托管平台,它为开源项目免费提供Git存储 ...
- CentOS yum的详细使用方法
yum是什么yum = Yellow dog Updater, Modified主要功能是更方便的添加/删除/更新RPM包.它能自动解决包的倚赖性问题.它能便于管理大量系统的更新问题yum特点可以同时 ...
- SQLServer触发器
触发器的作用: 自动化操作,减少了手动操作以及出错的几率. 触发器是一种特殊类型的存储过程,它不同于前面介绍过的一般的存储过程. [在SQL内部把触发器看做是存储过程但是不能传递参数] 一般的存储过程 ...
- 51nod1019逆序数(归并排序/树状数组)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1019 题意:中文题诶- 思路: 方法1:归并排序- 归并排序过 ...
- CodeForces 282C(位运算)
C. XOR and OR time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- 1.Windows安装PostgreSQL
按照下面的步骤,Windows机器上安装PostgreSQL.请确保已开启第三方防病毒,同时安装. 挑选你想要的PostgreSQL的版本号,可以点击以下链接下载 EnterpriseDB Windo ...
- java向oracle数据库中插入当前时间
public class Test{public static void main (String args []){ java.util.Date a = new java.util.Date(); ...
- Faster-rnnlm代码分析3 - EvaluateLM(前向计算ForwardPropagate)
先采用一个简单的输入文本做测试 [root@cq01-forum-rstree01.cq01.baidu.com rnnlm]# pwd /home/users/chenghuige/rsc/app/ ...
- Delphi编译dll时出错"Cannot debug project unless a host application is defined.use the run|parameters...dialog box."
问题: 在编写DLL程序的时候,按下F9或者按下那个绿色的箭头,会报错,如下 原因: 是因为你按下的F9或者那个绿色箭头是表示“Run”这个程序,但是DLL不是可执行文件,所以当然不能够运行,所以就会 ...
- GMap.Net开发之技巧小结
1.在GMap地图上,如果要让添加的图标(Marker)有个高亮(highlight)的效果,可以在MouseOver到Marker的时候设置Marker外观效果. 如果要让图标有个报警闪烁的效果,可 ...