在前面的学习中我们知道数据库其实就是很多表的一个集合,在创建表的时候,禁止使用中文做字段名,禁止使用字符型作为主键,禁止无主见或是唯一索引的出现,同时我们需要考虑为每一个字段设置合适的数据类型。
整形
类型大小范围tinyint1字节(-128,127)smallint2字节(-32768,32767)mediumint3字节(-8388608,8388607)int4字节(-2字节,2字节)bigint8字节(-4字节,4字节)我们经常看到一些数据表中用int作为主键字段,其中最常用的是tinyint与int,同时我们在很多地方可以看到int(4)int(8)这种写法,这种其实是表示宽度,都是代表四个字节。
浮点型 浮点型分为单精度的float,双精度的double与小数值的decimal三种,可是在实际的生产中我们一般不建议用浮点型,因为它属于并不精确的类型,同时我们经常用decimal来表示存储的金钱字段。
时间类型
类型大小(字节)格式date3YYYY-MM-DDtime3HH-MM-SSyear1YYYYdatetime8/5YYYY-MM-DD HH-MM-SStimestamp4YYYYMMDDHHMMSS字符串类型
类型大小(字节)用途char0-255定常字符串varchar0-255(65535)变长字符串blob0-65535短文本字符串text0-65535长文本数据在面试中问的最多的就是char与varchar的差距,char类型用于定长字符串,大小固定,如果没有达到最大位数那么后面补充空格,varchar是变长字符串,长度范围0-65535,不会补充空格,并且超过指定长度会被截断。varchar可以动态改变存储的长度,可以节约磁盘空间,提高效率。
索引是对数据库表中的一列或者多列的值进行排序的一种结构,就好比目录,通过目录可以快速的找到逍遥的内容。目前常用的索引结构有二叉树结构与哈希结构。 在二叉树结构中,常用的是B树与B-树,mysql用的是B-树的索引结构。 聚集索引与普通索引 MySQL数据库中的B-树索引分为两大类,分别为聚集索引与非聚集索引(普通索引),我们知道InnoDB存储引擎表是索引组织表,聚集索引其实就是一种索引组织形式,索引键值的逻辑顺序决定了表数据行的无理存储顺序,聚集索引叶子节点存放表中所有行数据信息,也就是我们所说的索引就是数据,普通索引在叶子节点并不包括行数据记录,只会在叶子节点存放自己本身的键值和主键的值,通过普通索引叶子节点上的逐渐来获取想要的行数据记录。
上图是我用explain搜索的一条信息,我们可以看到在type这里是ALL,代表全搜索,ref是索引,这里没有使用索引,所以是NULL,ROWS是所搜索的行数,由于全搜索所以肯定全部走一遍,效率很低 接下来我们添加索引来看看,在创建索引之前我们要考虑合理性
经常被查询的列经常用于表连接的列经常排序分组的列接下来我们给id构建索引。 这里type变成了ref代表索引,key这里是使用的index_id这个索引进行查找。 主键索引和唯一索引 主键索引其实就是聚集索引,每张表中有且只有一个主键,可以由表中一个或多个字段组成,主键索引必须满足三个条件,主键必须唯一,不能包含null值,一定要保证是自增的 创建主键的语法
alter table table_name add primary key(column);唯一索引是约束条件的一种,其实就是不能有重复的值,但是可以有null值,一个表只能有一个主键,可是可以有很多个唯一索引。 创建唯一索引的语法
alter table table_name add unique(colum);哈希索引 哈希索引采用哈希算法,把键值换成哈希值,不能进行排序,模糊查找,范围查询等功能,但是相对B+树来说查询效率更高。