mysql的概念理解(上)

                                                      
 这是一篇设计mysql数据库时候的一些小结。主要是对对MYISAM和INNODB俩种引擎进行简单介绍,还有表的一些属性进行详细介绍。

   MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操做,其代价是你须要常常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具。MYISAM强调了快速读取操做,

   InnoDB:这项技术就是MYSQL++ API。在使用MYSQL的时候,你所面对的每个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理(transaction process)也不支持外来键。尽管要比ISAM和 MyISAM引擎慢不少,可是InnoDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。

   在数据表里添加一个字段,该字段所拥有的属性是:(phpmyadmin字段查看与解释)
   名字(field): 字段直接在数据表显示的名字(字段名)
    
    类型(type):经常使用的类型int(整数型,通常用来储存手机号,学号,平台的编号,或者自增的id)  varchar和char(字符串型长度在0-255之间,前者空间能够自由变更,后者空间一旦设定长度就不会变更,可是会形成前者索引效率相对比较差,在小型开发中,影响不大), text(文本类型长度0-65535)
    
    长度(length):不一样的类型对应不一样的长度,好比有的时候若是用tinyint(只能取0-255的值)合适的长度能够节约数据存储空间(在数据量不大的时候,其实意义不大,如今的数据库都挺大的)

    整理(CHARSET=utf8):该数据表的字符集,会在create test () CHARSET = utf8 进行使用,如今广泛默认的编码格式都是utf8 gbk很容易出现乱码问题,须要进行转换

    默认(DEFAULT):(默认值,就是当添加数据库的时候,没有值状况下显示的值)

    数据类型:binary(binary属性只用于char和varchar值。当为列指定了该属性时,将以区分大小写的方式排序。与之相反,忽略binary属性时,将使用不区分大小写的方式排序)unsigned 属性只针对整型(这个具体的类型和C语言里的是同样的)

   是否为空:通常都默认为not null(通常主要用NOT NULL和NULL俩种类型)
    auto_increment(自增类型,最经常使用的就是用户注册的时候,ID值自动增加)


    数据约束:(主要有五种类型的约束 check的约束mysql暂时不支持)
    primary key (主键约束 = 非空约束+惟一性约束)
    foreign key (外键约束,增长格式:alter table 表 add  constraint 外键约束名称 foreign key (列)  references 表 (主键列);)
    NOT NULL(非空约束)
    UNIQUE(惟一性约束)
    CHECK(校验约束,mysql暂时不支持)
   
    注释(comment):(对这张表的用途的通常说明)

    示例:
  php

  CREATE TABLE `wp_action` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` char(30) NOT NULL DEFAULT '' COMMENT '行为惟一标识',
  `title` char(80) NOT NULL DEFAULT '' COMMENT '行为说明',
  `remark` char(140) NOT NULL DEFAULT '' COMMENT '行为描述',
  `rule` text COMMENT '行为规则',
  `log` text COMMENT '日志规则',
  `type` tinyint(2) unsigned NOT NULL DEFAULT '1' COMMENT '类型',
  `status` tinyint(2) NOT NULL DEFAULT '0' COMMENT '状态',
  `update_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COMMENT='系统行为表'

    下面对MYSQL里一些经常使用的概念进行小结:
    1.索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不同了;聚簇索引能提升多行检索的速度,而非聚簇索引对于单行的检索很快。(InnoDB按照主键进行汇集,若是没有定义主键,InnoDB会试着使用惟一的非空索引来代替。若是没有这种索引,InnoDB就会定义隐藏的主键而后在上面进行汇集。因此,对于 汇集索引 来讲,你建立主键的时候,自动就建立了主键的汇集索引。而普通索引就是非汇集索引)
    2.设计索引的一些理论:
     一.只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。因此咱们在数据库设计时不要让字段的默认值为NULL。
     二.通常状况下不鼓励使用like操做,若是非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可使用索引。
     三.MySQL查询只使用一个索引,所以若是where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。所以数据库默认排序能够符合要求的状况下不要使用排序操做;尽可能不要包含多个列的排序,若是须要最好给这些列建立复合索引。
     四.创建索引的目的就是帮助查询,若是查寻用不到则索引就没有必要创建,另外若是数据表过大(5w以上)则有些字段(字符型长度超过(40))不适合做为索引,另外若是表是常常须要更新的也不适合作索引
    3.索引(INDEX):INDEX(这是最基本的索引,MyIASM中默认的BTREE类型的索引,也是咱们大多数状况下用到的索引。) UNIQUE(与普通索引相似,不一样的就是:索引列的值必须惟一,但容许有空值(注意和主键不一样)。若是是组合索引,则列值的组合必须惟一,建立方法和普通索引相似)    
    ps:
    一.虽然索引大大提升了查询速度,同时却会下降更新表的速度,如对表进行INSERT、UPDATE和DELETE。由于更新表时,MySQL不只要保存数据,还要保存一下索引文件。
    二.创建索引会占用磁盘空间的索引文件。通常状况这个问题不太严重,但若是你在一个大表上建立了多种组合索引,索引文件的会膨胀很快。
mysql

相关文章
相关标签/搜索