第九章:第10节 MySQL基础篇——表定义语句

更新于:2017-07-24 11:51:37

MySQL的数据类型都了解一遍,我们开始全面地学习怎么创建一个表,以及都有哪些属性:


创建表的基本形式:


create  table  [if not  exists] 表名(字段列表, [约束或索引列表]) [表选项列表];

说明:列表都是表示“多个”,相互之间用逗号分开。

字段基本形式:  字段名   类型   [字段修饰属性];


我们在学整数型时已学过两个属性(unsigned、zerofill),字段的属性还有很多的,大部分字段都是通用的。


字段属性设置:


not null: 不为空,表示该字段不能放“null”这个值,不写,则默认是可以为空。定义字段时最好加上这个属性,楠神觉着允许“null”值并没什么好处。


auto_increment:  设定int类型字段的值可以“自增长”,即其值无需“写入”,而会自动获得并增加

此属性必须随同 primary key  或 unique key 一起使用。一个表只能有一个auto_increment属性的字段。


primary key: 设定为主键。是唯一键“加强”:也不能重复并且不能使用null(唯一性,不为空),并且可以作为确定任意一行数据的“关键值”,最常见的类似:where id= 8;  或  where  user_name = ‘zhangsan’;

通常,每个表都应该有个主键(但:一个表只能设定一个主键),而且大多数表,喜欢使用一个id并自增长类型作为主键。


主键可以作为字段的属性这样写:

1.png


但通常我们都是这样写:

1.png

建议大家建表时,一定要有第2行、第4行的语句,用“id”命名为一个表的主键字段。


unique key : 设定为唯一键:表示该字段的所有行的值不可以重复(唯一性)。类似于主键的作用,一个表可以没有唯一键,也可以有多个唯一键。唯一键可以当做字段的属性定义,也可以单独一行设置。


default‘默认值’: 设定一个字段在没有插入数据的时候自动使用的值。text类型是不能设置默认值的。


comment‘字段注释’设置字段的注释文字,用引号引起来。


一个字段有多个属性,属性之间是没有先后顺序和大小之分的。


下面这张表的定义,是楠神做过的一个项目的后台管理员表,供大家参考学习:


1.png


一定要注意一点,每一个字段的定义结尾加上一个英文逗号,只有最后一行不能有英文逗号,不然会报错的。


这张表大部分我们都能看懂了,可能第19行还有20行,有些地方我们还不懂。比如19行“key”前面既没有“primary”也没有“unique”,那这是什么语句,起什么作用?20行的“ENGINE=InnoDB”又是什么?


前面楠神为什么说“primary key”、“unique key”单独写一行,最好不要直接当成字段属性去写。因为主键、唯一键其实是表的两种索引,字段是字段,索引是索引,分开后结构更分明。17行——19行 为这个表定义了三个索引:“主键索引id”、“唯一索引name”、“普通索引is_kf”。


什么是索引:


我们都用过新华字段吧,大家想想新华字典几百页,我们为什么能很快就找到想要查找的文字呢?是不是完全依靠它的拼音查找部首查找,没有哪个傻子会挨页地查找一一比对,这效率简直太慢了。


数据库里的数据与新华字典是一样的道理,“查”操作远大于“增删改”,为了不让MySQL查数据时像个傻子样一一查找,严重消耗MySQL资源,需要为数据表建立起自己的“拼音查找”、“部首查找”,这就是索引。


如何建立索引,应建立什么样的索引,这完全取决于数据表的实际业务需求,是一门大学问。


可以说索引是非常非常重要的,关乎到MySQL的性能问题,很多MySQL的优化大多优化索引。第九章我们只做简单学习,等到第十章mysql进阶篇还会加深学习索引的。