前言:大学里的第一个项目,也是人生的第一个项目,很难,也明白了在大学里老师基本啥都不会教你~~~但是为了自己的将来,奋勇向前!
说明:这个系列的所有文章都是参考《MySQL 5 权威指南》(第3版)再加上我自已在做这个项目时的感受写得,由于还是菜鸟级别,老鸟就可以直接绕过了 呵呵
MySQL我之前也接触过,但是觉得还是有必要细致的整理一番,顺便以后也可以回头来看看。
-------------------------------------------------------神奇分割线---------------------------------------------------------------
MySQL数据表类型
不同于其他数据库系统,MySQL支持多种不同的数据表类型,主要有MyISAM,InnoDB,HEAP等3种,他们各自有各自的特点。注意:如果在创建数据表时没有设置其类型,则MySQL服务器会根据具体情况在MyISAM和InnoDB之间做出选择,默认呢的数据表类型由配置文件里的default-table-type选项决定。
- MyISAM数据表
MyISAM数据表的特点是成熟,稳定,易于管理。他还细分为MyISAM Static 和 MyISAM Dynamic和 MyISAM Compressed (数据库系统自动选择) - MyISAM Static:
如果数据库表里的数据列各自都有预先定义好的固定长度,MySQL服务器将自动选择这种数据表类型。 - MyISAM Dynamic:
如果数据表里定义有且只有一个VACHAR,xxxTEXT或xxxBLOG字段,MySQL将自动选择这种数据表类型。和静态表相比,这种类型的数据表的空间往往小得多:存储字符串和二进制对象所需要的字节数仅仅是他们的实际长度(再加上几个字节的开销)
这种类型的数据表会因为记录的不同长度,而在数据库文件里留下“空洞”(这个道理和硬盘碎片差不多)。当被编辑的数据表变得越来越碎片化时,数据的存取时间会变得越来越长,因此要经常使用SQL命令 OPTIMIZE TABLE 或者某个优化工具进行碎片整理。 - MyISAM Compressed:
动态和静态MyISAM数据表都可以使用myiasmchk工具压缩。压缩效果很好(一般压到一半左右),但是读取数据时必须先解压。在低速硬盘+高速CPU的系统上,这种数据表类型可能也表现出比较优秀的性能。 - InnoDB数据表
InnoDB数据表是较新的一代表类型。
*事务
InnoDB支持事务。允许把几条有着内在逻辑关系的SQL命令当做一个整体来执行。如果在执行过程中发生了错误,所有的命令都将被撤销。
*数据行级锁定机制
MyISAM在执行LOCK TABLE命令会锁定整个表,而InnoDB只会锁定正在使用的行,并且InnoDB驱动程序能够自动识别“死锁现象”
*外键约束条件
如果在数据表之间定义了关系,InnoDB驱动程序将自动保证数据表的引用一致性在执行过DELETE命令之后也能保持。
*崩溃恢复 - HEAP数据表
HEAP数据表比较特殊,他只将表存储在内存中,因为根本不用到,就不提了。
当然除了以上几种之外MySQL还提供了很多种表类型,但一般来说用得最多的就是MyISAM和InnoDB了,对于其他的就以后再说吧
-------------------------------------------神奇分割线----------------------------------------
个人感受:
MySQL支持不同表类型在同一个数据库里,这个很好啊,相对来说MyISAM更加节约空间和时间,而InnoDB最大的特点莫过于支持事务功能,安全性更高,并且他支持一些较新较高级的功能。
由于我这个项目对于数据库的操作比较频繁,并且很多情况下是同时的(MyISAM只支持LOCK TABLE)这样InnoDB就是首选了。
而且我在设计时用了开发工具,虽然不是很熟悉,但是软件会自动选择较为合适的数据表类型。