MYSQL建表CREATE TABLE常用注意事项总结

                                                                MYSQL建表CREATE TABLE常用注意事项总结

     

自己总结的MYSQL中建立表时常用的考虑,希望一文能将一些难点和疑点总结完善,作为备忘记录在此。

 

  1. 通常情况下指定列为NOT NULL,除非真的需要存储NULL值。
  2. INTEGER、BOOL、NUMERIC等这些只是MYSQL为了兼容性支持的别名。
  3. MYSQL给整数指定宽度,如INT(20),对大多数应用没有意义,不会限制整数的合法值范围,只是规定了一些交互工具(如命令行客户端)用来显示字符的个数。如果在定义字段的时候指定ZEROFILL,那么当数值的显示宽度小于指定的列宽度时候,则默认补充的空格用0代替。
  4. 在数据量比较大的时候,可以考虑使用BIGINT来代替DECIMAL,将需要存储的数据根据小数位数乘以相应的倍数即可,如100等。
  5. BLOB和TEXT之间仅有的不同是BLOB存储的是二进制数据没有排序规则或字符集,而TEXT类型有字符集和排序规则。
  6. 通常应该尽量使用TIMESTAMP,因为它比DATETIME空间效率更高。MYSQL中存在只能有有一个TIMESTAMP列的限制,其它需要默认时间的列,可以用一个on insert触发器将CURRENT_TIME分配给其它列。                                                        Create trigger sample_my
    Before insert on sample
    For each row
    Begin
       Set new.字段名 = current_timestamp();
    End;
  7. Mysql 5.0之前,BIT是TINYINT的同义词。Mysql 5.0以及更高版本,这是一个特性完全不同的数据类型。BIT列在一列中存储一个或多个TRUE/FALSE值。BIT(1)定义一个包含单个位的字段,BIT(2)存储2个位,以此类推。BIT列的最大长度是64个位。MYSQL把BIT当作字符串类型,而不是数字类型,当检索BIT(1)的值时,结果是一个包含二进制0或1值的字符串,而不是ASCII码的“0”或“1”。对大部分应用,最好避免使用这种类型。
  8. 标识列如果存储UUID值,应该移除“-”符号,或者用UNHEX()函数转换UUID为16字节的数字,并且存储在一个BINARY(16)中,检索时可以通过HEX()函数来格式化为16进制格式。
  9. IPV4实际上是32位无符号整数,不是字符串,用小数点将地址分成四段的表示方式只是让人们易于阅读,所以应该用无符号整数来存储IP地址。INET_ATON()和INET_NTOA()函数在这两种表示方法之间转换。INET_NTOA()函数:将整数转成IP地址;INET_ATON()函数:将IP地址转成整数;
  10. MYSQL 5.0和更高版本的DECIMAL类型允许最多65个数字。DECIMAL只是一种存储格式,实际计算中DECIMAL会转换为DOUBLE类型。
  11. 多列索引的顺序至关重要,将选择性高的列放到索引最前列。
  12. 全文索引适用于MATCH AGAINST操作,而不是普通的WHERE条件操作。
  13. 后续再做补充。

         

一个样例表:

Create table userinfo{

userID int unsigned NOT NULL AUTO_INCREMENT,

userID varchar(36) NOT NULL,  -- 采用UUID

name varchar(64) NOT NULL DEFAULT ‘’,

gender (‘M’,’F’) NOT NULL DEFAULT ‘M’,

birthday dateime not null,

email varchar(64) NOT NULL DEFAULT ‘’,

zip varchar(8) NOT NULL DEFAULT ‘’,

stateID  tinyint unsigned NOT NULL DEFAULT ‘0’,

login_IP  int unsigned NOT NULL DEFAULT '0',

updated timestamp not null

                default current_timestamp

                on update current_timestamp,

PRIMARY KEY(userID),

UNIQUE KEY email(email),

}ENGINE=InnoDB charset=utf8 comment '用户信息';

发布了19 篇原创文章 · 获赞 6 · 访问量 1143

猜你喜欢

转载自blog.csdn.net/ydyuse/article/details/104427641
今日推荐