MySQL数据库设计(一)
1、 选择MySQL数据表类型:
MySQL支持多种数据表类型,最重要的有三种:MyISAM,InnoDB,HEAP。默认情况下MySQL会根据配置文件中default-storage-engine选项决定表类型。
MyISAM
特点是成熟、稳定和易于管理。
InnoDB
可以看作是MyISAM的更新换代产品,增加了以下几种新功能,事务,数据行级锁定,外键约束,崩溃恢复。 InnoDB并非只有优点,其缺点也有一箩筐,1、表空间管理复杂,复制表数据不能通过复制文件完成(MyISAM可以)。2、占用更多的存储空间,3、不支持全文检索,其余的缺点不一一说明了。
选择MyISAM还是InnoDB?
如果希望是最节省空间的方式存储数据,则选择MyISAM。如果需要事务或更高的安全性,或者允许很多用户同时修改某个表,那么InooDB的表更好。
HEAP
HEAP数据表只存在于内存中,使用散列索引(hash index)数据记录的存取非常快,主要充当临时数据表,与普通表相比,heap表在功能上受到了许多限制,主要适合于 数据量小,访问速度要求很高的场合。
临时表:只通过create temporary table命令创建的表,其存储类型也是出于上面介绍的几种表类型之一。
2、 选择MySQL数据类型:
整型: tinyint,smallint,mediumint,int,integer,bigint,serial
注意:
1、定义格式:tinyint(m),m的取值不会限制存储的范围,但是可能被截断。
2、无符号和有符号的区别:unsigned,tinyint如果是有符号,其取值为-128-127,如果是无符号则0-255.
3、serial是bigint auto_increment not null primariy key的简写。
4、auto_increment必须和not null、primary key或unique属性同时使用。一个表最多有一个这样的列,使用select last_insert_id()得到最近生成的ID
5、bool是tinyint的同义词
浮点数:double,float
1、 用法:double(m,d):m总长度,d小数位个数
2、 影响精度的是d,按照d进行四舍五入。其存储的数据可能不精确
定点数:decimal
以字符串形式保存数据,不存在误差
日期和时间:date,time,datetime,timestamp
1、 timestamp存储记录最后的修改时间,很少用于应用开发中。
2、 date,datetime存在范围检查,但是,0000-00-00合法
3、 默认可接受的字面值,2005-12-31,09/12/22,其中短格式70-99代表1970-1999,00-69代表2000-2069.
字符串:char,varchar,xxxText
1、 varchar和xxxtext都可以存储65535个字符,区别是varchar必须在建表时声明,而xxxtext恰恰不能声明。
2、 注意varchar存储单位为字节,varchar不再删除前后空格。
二进制数据:xxxblob,bit
1、 blob和text数据类型存储字符时有几乎一样的属性,主要区别是text按照文本模式排序,而blob以二进制排序。
2、 把二进制数据存储在数据库不是一个好主意,主要表现在速度慢,只能整体读出
创建数据表列时重要的属性和选项:
1、 null not null
2、 default
3、 default current_timestamp
4、 on update current_timestamp
5、 primary key
6、 auto_increment
7、 unsigned
8、 character set name