浅谈mysql的存储引擎(表类型)

什么是MySql数据库

通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合。

我们通常说的MySql数据库,sql server数据库等等其实是数据库管理系统,它们可以存储数据,并提供查询和更新数据库中的数据的功能等等。根据数据库如何存储数据和如何操作数据的实现机制不同,这些数据库之间即有区别又有共同点。

MySql数据库是开放源代码的关系型数据库。目前,它可以提供的功能有:支持sql语言、子查询、存储过程、触发器、视图、索引、事务、锁、外键约束和影像复制等。在后期,我们会详细讲解这些功能。

同Oracle 和SQL Server等大型数据库系统一样,MySql也是客户/服务器系统并且是单进程多线程架构的数据库。

MySql区别于其它数据库系统的一个重要特点是支持插入式存储引擎。

那么什么是存储引擎呢?

存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。

在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。

MySql中有哪些存储引擎?

1 MyISAM:这种引擎是mysql最早提供的。MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非你配置MySQL默认使用另外一个引擎。这种引擎又可以分为静态MyISAM、动态MyISAM 和压缩MyISAM三种:

静态MyISAM:如果数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型。因为数据表中每一条记录所占用的空间都是一样的,所以这种表存取和更新的效率非常高。当数据受损时,恢复工作也比较容易做。

动态MyISAM:如果数据表中出现varchar、xxxtext或xxxBLOB字段时,服务器将自动选择这种表类型。相对于静态MyISAM,这种表存储空间比较小,但由于每条记录的长度不一,所以多次修改数据后,数据表中的数据就可能离散的存储在内存中,进而导致执行效率下降。同时,内存中也可能会出现很多碎片。因此,这种类型的表要经常用optimize table 命令或优化工具来进行碎片整理。

压缩MyISAM:以上说到的两种类型的表都可以用myisamchk工具压缩。这种类型的表进一步减小了占用的存储,但是这种表压缩之后不能再被修改。另外,因为是压缩数据,所以这种表在读取的时候要先时行解压缩。

但是,不管是何种MyISAM表,目前它都不支持事务,行级锁和外键约束的功能。

2 MyISAM Merge引擎:这种类型是MyISAM类型的一种变种。合并表是将几个相同的MyISAM表合并为一个虚表。常应用于日志和数据仓库。

3 InnoDB:InnoDB表类型可以看作是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能。InnoDB和BDB存储引擎提供事务安全表。BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分发版里。InnoDB也 默认被包括在所有MySQL 5.1二进制分发版里,你可以按照喜好通过配置MySQL来允许或禁止任一引擎。

4 memory(heap):这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为是存在于内存中,所以这种类型常应用于临时表中。MEMORY存储引擎提供“内存中”表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。就像MyISAM一样,MEMORY和MERGE存储引擎处理非事务表,这两个引擎也都被 默认包含在MySQL中。

注释:MEMORY存储引擎正式地被确定为HEAP引擎。

5 archive:这种类型只支持select 和 insert语句,而且不支持索引。常应用于日志记录和聚合分析方面。

6 EXAMPLE:存储引擎是一个“存根”引擎,它不做什么。你可以用这个引擎创建表,但没有数据被存储于其中或从其中检索。这个引擎的目的是服务 ,在MySQL源代码中的一个例子,它演示说明如何开始编写新存储引擎。同样,它的主要兴趣是对开发者。

下面我们介绍一下如何查看和设置数据表类型。

MySql中关于存储引擎的操作

1 查看数据库可以支持的存储引擎

用show engines; 命令可以显示当前数据库支持的存储引擎情况,如图1所示:

图1 数据库的存储引擎

由上图可见当前系统的默认数据表类型是MyISAM。当然,我们可以通过修改数据库配置文件中的选项,设定默认表类型。

2 查看表的结构等信息的若干命令

要查看表的定义结构等信息可以使用以下几种命令:

2.1Desc[ribe] tablename; //查看数据表的结构

例如,查看表t1的结构,可得下图。

图2:查看表t1的结构

2.2 Show create table tablename;

//显示表的创建语句

同上查询表t1,得下图:

图3 显示创建表t1的语句

2.3 show table status like ‘tablename’/G显示表的当前状态值

同上查询表t1,得下图:

图4 显示表t1 的当前状态值

综上可见,后两种方式都可以帮助我们查看某一表的存储引擎类型(图中已用红色方框标出)。

3  设置或修改表的存储引擎

3.1创建数据库表时设置存储存储引擎的基本语法是:

Create table tableName(

columnName(列名1)  type(数据类型)  attri(属性设置),

columnName(列名2)  type(数据类型)  attri(属性设置),

……..) engine = engineName

例如,假设要创建一个名为user的表,此表包括id,用户名username和性别sex三个字段,并且要设置表类型为merge。则可用如下的方式创建此数据表,

create table user(

id int not null auto_increment,

username char(20) not null,

sex char(2),

primary key(id)

) engine=merge

具体执行结果见下图:

图5 创建表user

查看创建后表user的信息,可见表的当前存储引擎是merge,如图所示:

图6 显示表t1 的当前状态值

3.2修改存储引擎,可以用命令Alter table tableName engine =engineName

假如,若需要将表user的存储引擎修改为archive类型,则可使用命令alter table user engine=archive。如下图所示:

图7 修改表user的存储引擎

查看修改后的表类型,可见表类型已经变为archive类型。

图8 显示表user修改后的状态值

小结

在本文中主要介绍了什么是MySql数据库,并进一步引出了它的一个重要特性, 即插入式的多存储引擎机制。然后,简单介绍了什么是存储引擎和MySql中几种主要的存储引擎。最后,介绍了如何查看数据库支持的所有存储引擎,如何查看数据库表的存储引擎类型及如何设置或修改表的存储引擎类型。刚刚入门学习MySql,文中有错误之处,还请大家多多指导!

转载自:http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html

原创文章,转载请注明: 转载自搞代码

微信 赏一包辣条吧~

支付宝 赏一听可乐吧~

支付宝的数据库是MySQL变种_浅谈MySql的储存引擎(表类型)相关推荐

  1. mysql 安全问题_浅谈MySQL数据库的Web安全问题

    数据安全是现在互联网安全非常重要一个环节.而且一旦数据出现问题是不可逆的,甚至是灾难性的. 有一些防护措施应该在前面几个博文说过了,就不再赘述.比如通过防火墙控制,通过系统的用户控制,通过Web应用的 ...

  2. mysql重传_浅谈 MySQL 中的事务和 ACID

    所谓事务(Transaction),就是通过确保成批的操作要么完全执行,要么完全不执行,来维护数据库的完整性.举一个烂大街的例子:A 向 B 转账 1000 元,对应的 SQL 语句为:(没有显式定义 ...

  3. 谈谈mysql优化_浅谈MySQL SQL优化

    本文首发于个人微信公众号<andyqian>,期待你的关注 前言 有好几天没有写文章了,实在不好意思.之前就有朋友希望我写写MySQL优化的文章.我迟迟没有动笔,主要是因为,SQL优化这个 ...

  4. mysql 用户通配符_浅谈mysql通配符进行模糊查询的实现方法

    在mysql数据库中,当我们需要模糊查询的时候 ,我们会使用到通配符. 首先我们来了解一下2个概念,一个是操作符,一个是通配符. 操作符 like就是SQL语句中的操作符,它的作用是指示在SQL语句后 ...

  5. mysql维护计划任务_浅谈MySQL event 计划任务

    一.查看event是否开启 show variables like '%sche%'; set global event_scheduler =1; 二. -- 设置时区并设置计划事件调度器开启,也可 ...

  6. mysql 计划任务消耗_浅谈MySQL event 计划任务

    一.查看event是否开启 show variables like '%sche%'; set global event_scheduler =1; 二. -- 设置时区并设置计划事件调度器开启,也可 ...

  7. mysql事务的管理方式_浅谈MySQL事务管理(基础)

    本篇文章给大家带来的内容是浅谈MySQL事务管理(基础),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助.事务处理用来维护数据库等完整性,保证mysql操作要么成功,要么失败(myisa ...

  8. MySQL子查询的优缺点_浅谈mysql的子查询

    浅谈mysql的子查询 mysql的子查询的优化一直不是很友好,一直有受业界批评比较多,也是我在sql优化中遇到过最多的问题之一,你可以点击这里 ,这里来获得一些信息,mysql在处理子查询的时候,会 ...

  9. mysql revoke 授权_浅谈MySQL中授权(grant)和撤销授权(revoke)用法详解

    MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利 grant selec ...

最新文章

  1. 适合初学者的数据结构_数据结构101:图-初学者的直观介绍
  2. 医学影像设备学_【技士/师证考试宝典】第四篇 医学影像设备学2
  3. 为什么叫欧文德鲁大叔
  4. 让Python pip下载速度加速
  5. 推荐原创Python号主:猪哥
  6. 自动生成宣传单打印页--提高工作效率
  7. WiFi产品的一般射频电路设计
  8. Kaldi在线搭建语音识别系统-李健
  9. html不能打开图片,HTML无法打开图片
  10. [附源码]Java计算机毕业设计SSM鞍山丘比特房屋租赁管理系统
  11. 计算机器设备重置成本时不应计入的费用是,自考《资产评估00158》章节试题:第3章...
  12. MATLAB中的乘除法 “ * ” 和 “ .* ” and “ / ” 和 “ ./ ”
  13. 五德凤雏-集成微模块史上最强大的逐浪CMS v8.5.0正式发布
  14. python for循环语句1到100_python——循环语句
  15. 桌球歷史:削球、快攻、弧圈球
  16. 【渝粤题库】陕西师范大学201331 民事诉讼法学作业
  17. 股指期货网址(股指 期货)
  18. 缔造微软帝国的程序员保罗·艾伦因病离世
  19. 使用第三方软件设置在线客服系统——iBangKF网站免费在线客服系统
  20. IBM x系列服务器光通路诊断灯错误解释

热门文章

  1. ubuntu下的一些常用软件游戏
  2. 龙蜥社区成立Anolis OS Course SIG,打造龙蜥OS学习平台
  3. linux运维工程师培训课程_Linux系统资深运维工程师的进阶秘籍
  4. 51赛尔号巅峰多精灵使用的常胜精灵全面分析
  5. Asp.Net MVC中DropDownListFor的用法
  6. 下载和阅读Android源码
  7. Houdini Chop 数据chan格式
  8. 泸州老窖正式获批入主华西证券
  9. php五子棋胜负,五子棋入门:一局棋的胜负与和棋
  10. C语言实验题——约瑟夫问题(JSU-ZJJ)