数据库操作原理归根到底还是对文件操作,只不过是数据库文件。

MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用。如果技术高超,还可以使用MySQL+API自己做一个引擎。下面介绍几种数据库引擎:

 ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到 数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不 支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实 时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。
    MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具。MYISAM强调了快速读取操作,这可能就是为什么MySQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式。MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。
    HEAP:HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MYISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。要记住,在用完表格之后就删除表格。
    InnoDB:InnoDB数据库引擎都是造就MySQL灵活性的技术的直接产品,这项技术就是MYSQL+API。在使用MYSQL的时候,你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理(transaction process)也不支持外来键。尽管要比ISAM和 MyISAM引擎慢很多,但是InnoDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,如果你的设计需要这些特性中的一者 或者两者,那你就要被迫使用后两个引擎中的一个了。
    如果感觉自己的确技术高超,你还能够使用MySQL+API来创建自己的数据库引擎。这个API为你提供了操作字段、记录、表格、数据库、连接、安全帐号的功能,以及建立诸如MySQL这样DBMS所需要的所有其他无数功能。深入讲解API已经超出了本文的范围,但是你需要了解MySQL+API的存在及其可交换引擎背后的技术,这一点是很重要的。估计这个插件式数据库引擎的模型甚至能够被用来为MySQL创建本地的XML提供器(XML provider)。(任何读到本文的MySQL+API开发人员可以把这一点当作是个要求。)

InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型这里主要对比MyISAM和InnoDB两个引擎的区别:

基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

1. 构成上的区别:

(a)MyISAM:每个MyISAM在磁盘上存储成三个文件。 *.frm是描述了表的结构,*.MYD保存了表的数据记录,*.MYI则是表的索引
每个数据库都会在data目录下生成一个文件夹。

(b)InnoDB:数据库下面只会生成一个文件,基于磁盘的资源是InnoDB表空间数据文件(*.frm)。但是其他位置会出现它的日志文件ib_logfile0 和数据存放在ibdata1,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB。

事务处理上方面:

(a)MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持

 (b)  InnoDB提供事务支持事务,外部键等高级数据库功能.(下一节我们详细介绍了mysql事务)

3 SELECT   UPDATE,INSERTDelete操作:

a)前者:如果执行大量的SELECT,MyISAM是更好的选择

b)后者:1.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表
   2.DELETE   FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
   3.LOAD   TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用

4.AUTO_INCREMENT的操作:

(a)前者:

每表一个AUTO_INCREMEN列的内部处理。
  MyISAMINSERTUPDATE操作自动更新这一列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。(当AUTO_INCREMENT列被定义为多列索引的最后一列,可以出现重使用从序列顶部删除的值的情况)。

(b)后者:自动增长计数器仅被存储在主内存中,而不是存在磁盘上

5.其他的方面:

表的具体行数
  
  select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含   where条件时,两种表的操作是一样的  myisam

  InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行

  
  
  表锁  myisam

  提供行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in
   SELECTs),另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”

最新文章

  1. SQLAlchemy文档翻译
  2. c#制作一个屏幕保护程序
  3. Architecture.the-reactive-manifesto
  4. 基于HTML5 geolocation 实现的天气预报功能
  5. Unity Ragdoll(布娃娃系统)
  6. 史密斯(smith)圆图讲解
  7. GPT vs MBR 分区 ,,, Legacy BIOS vs UEFI BIOS
  8. android MTK驱动背光唤醒流程
  9. jvm 之 国际酒店 8 月 19 一次full GC 导致的事故
  10. 深入浅出ExtJS 第六章 布局
  11. Git 学习资源
  12. Thinkphp3.2学习——架构_URL模式
  13. TP3.2写提交的验证码验证
  14. Android切换横竖屏不销毁前台Activity,也不影响后台Activity
  15. [转] createObjectURL方法 实现本地图片预览
  16. linux tail命令及其它日志查看命令的用法
  17. Android代码安全工具集
  18. 初识 Asp.Net数据验证控件
  19. python实现一个栏目的分页抓取列表页抓取
  20. Storm Trident API

热门文章

  1. pywin32获得tkinter的Canvas窗口句柄,并在上面绘图
  2. 模拟jenkins通过shell给ansible传入变量
  3. caffe fastercbnnahdemo
  4. 洛谷 P1341 无序字母对(欧拉回路)
  5. uploadifive使用笔记
  6. 苹果浏览器移动端click事件延迟300ms的原因以及解决办法
  7. 为什么Web前端变的越来越复杂,变得更加难学了
  8. Eclipse 常见Maven web项目
  9. js操作元素导致元素错位和大小改变
  10. \_\_doc\_\_