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 的数据储存引擎的更多相关文章

  1. (转)MySQL 常用数据存储引擎区别

    MySQL 常用数据存储引擎区别 原文:https://laravel-china.org/articles/4198/mysql-common-data-storage-engine mysql有多 ...

  2. MySQL数据库Innodb储存引擎----储存页的结构

    上一篇博客回顾: 1:数据库拥有众多的储存引擎,现在主要使用的是Inoodb,这个储存引擎有Compact,Redundant,Dynamic,Compressed四种行格式 2:Compact行格式 ...

  3. MySQL 常用数据存储引擎区别

    mysql有多种存储引擎,目前常用的是 MyISAM 和 InnoDB 这两个引擎,除了这两个引擎以为还有许多其他引擎,有官方的,也有一些公司自己研发的.这篇文章主要简单概述一下常用常见的 MySQL ...

  4. MySQL 的数据存储引擎

    MySQL的存储引擎 InnoDB: MySQL5.5之后的默认存储引擎. 采用MVCC来支持高并发,并且实现了四个标准的隔离级别(默认可重复读). 支持事务,支持外键.支持行锁.非锁定读(默认读取操 ...

  5. MySQL之数据存储引擎

    1.什么是存储引擎: 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处 理文本用txt类型,处理表格用excel,处理图片用png等,数据库中的表也应该有不同的 ...

  6. mysql 的 存储结构(储存引擎)

    1 MyISAM:这种引擎是mysql最早提供的.这种引擎又可以分为静态MyISAM.动态MyISAM 和压缩MyISAM三种:    静态MyISAM:如果数据表中的各数据列的长度都是预先固定好的, ...

  7. Mysql 储存引擎

    查看当前版本支持哪些储存引擎 mysql> show engines; InnoDB 支持事务机制 : 保证操作安全性 行级锁定 : 开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最 ...

  8. MySQL数据库储存引擎Inoodb一--记录储存结构

    在开文我先说明一下,接下来的数据库知识文章都是在微信公众号“我们都是小青蛙”学习然后在通过自己的理解进行书写的.有兴趣的朋友可以去关注这个微信公众号.话不多说,我们在日常使用数据库进行数据持 久化的时 ...

  9. MYSQL索引类型。MYSQLc储存引擎

                                                            MYSQL索引类型,MYSQLc储存引擎 MySQL索引创建与删除 MySQL存储引擎的 ...

随机推荐

  1. 【QT】视频播放

    在网上没找到,在书上也没有.后来突然想直接在官网的类里面找Video 居然就有了. 把http://qt-project.org/doc/qt-5/qmediaplayer.html的例子补充完整后就 ...

  2. 【编程题目】求1+2+…+n, 要求不能使用乘除法、for、while、if、else、switch、case和条件语句

    看到这个问题,第一个反应是真变态啊. 然后,直觉是不能用循环就只能用递归了.可递归怎么跳出来却遇到了麻烦, 我连goto语句都考虑了也没弄好. 后来想到一个非常NC的方法:查找表. 如果n限定一个比较 ...

  3. [Android Pro] Gradle Tips#2-语法

    referece to : http://blog.csdn.net/lzyzsd/article/details/46935063 在第一篇博客中,我讲解了关于tasks和构建过程中task的不同阶 ...

  4. IOS之笑脸app

    ios笑脸app实现 import UIKit @IBDesignable class FaceView: UIView { @IBInspectable var lineWidth:CGFloat= ...

  5. 昨天在公司加班,上午好像就是弄一个ftp的linux服务问题

    在网上找了一些方法,可是其中有通过匿名方式登陆,但是在root的权限下才能存放文件,可是把匿名用户登陆取消之后又不能登陆,就是没有列出怎么来添加一个ftp的用户,今天打算直接装一个linux系统在虚拟 ...

  6. jQuery - 1.简单的JQuery

    1.简单的JQuery 2.jQuery对象(包装集).Dom对象 3.JQuery提供的函数 1.简单的JQuery $(document).ready(function () { alert(&q ...

  7. Python 打包程序判断是否已经运行

    代码如下: # -*- coding: UTF8 -*- from win32com.client import Dispatch import win32com import sys, os fro ...

  8. CSS中设置DIV垂直居中的N种方法 兼容IE浏览器

    在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...

  9. 【Java EE 学习 21 上】【其它类型的监听器】【使用HttpSessionActivationListener监听session的活化和钝化】

    一.ServletContextListener  Method Summary  void contextDestroyed(ServletContextEvent sce)           R ...

  10. 【JAVA集合框架之工具类】

    一.概述 JAVA集合框架中有两个很重要的工具类,一个是Collections,另一个是Arrays.分别封装了对集合的操作方法和对数组的操作方法,这些操作方法使得程序员的开发更加高效. public ...