MySQL 常用字段类型,介绍及其建表使用方法经验分享
由于工作的公司没有专业的DBA又经常需要建立各种各种的表来满足自己的业务逻辑,所以经常查看MySQL 手册或者谷歌查看相关资料,所以本人就根据我的工作经验和相关资料来介绍一下MySQL各种字段类型及其使用。(由于本人还算是菜鸟哪里写的不对请多多指正,有兴趣的可以探讨一下)
MySQL字段类型
int型包括(tinyint, smallint, mediumint, int, bigint)
tinyint是1个字节表达范围就是2的8次方(-128-128) 或者(0-255) 很多人不明白为什么有两种情况,因为在计算机中有一种说法叫做无符号,也就是全部是正整数,所以在用MySQL 选择整形字段的时候一定要加上unsigned也就是无符号,因为负数基本不会用到。
smallint是2个字节表达范围2的16次方
smallint是3个字节表达范围2的24次方
int是4个字节表达范围2的32次方,记住这个类型是不能存储手机号的,很多人用它存然后直接报错了,因为int最长到10长度,手机号是11位,所以如果存手机号我的建议就是下面的char类型
bigint是8个字节表达方位就是2的64次方。
char型
表达范围0-255字节数,如果是存字母就是255个,因为每个字母只占一个字节,无论是什么编码,如果是存gbk存中文就是2个字节代表一个汉字,所以就是255/2,如果是utf8编码就是255/3,因为utf8编码下的中文占用三个字节代表一个汉字。正确的说应该叫做Unicode编码 又叫做万国码,他的实现有utf8
varchar型
表达范围是0-65535字节,我有一个长辈同事,年龄较大,他到现在还认为varchar最大是0-255,这是错误的,如果是在MySQL5.0.3 之前的版本是对的,后面的版本都已经改成了65535字节理论上存储汉字utf8就是2000多个。
text型
表达范围就是65535字节,一般用来存商品描述,等字符数比较多的等,它也有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,存储容量不同,含有字符集。
blob型
以二进制形式存储数据,是的可以存储图片。度出去依然是图片。
decimal型
DECIMAL列的声明语法是DECIMAL(M,D), M是数字的最大数(精度)。其范围为1~65(在较旧的MySQL版本中,允许的范围是1~254), D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M,一般用来存储money 也就是钱比如:decimal(10,2),他是以字符串形式存储数字的,不会引起存储的数据不正常,缺斤短两,存储精度需求高的最好选择这个字段,那些选择bigint类型存钱的 真不知道是怎么想的。应该是不知道有这个字段类型吧
float型
浮点型,也就是存小数,效果一般。
enum型
枚举类型,就是建字段的时候输入几个默认的字符,存储也只能存储这几个字符中的一个。例如:enum(“Y”,‘’N”);
set型
一个集合。可以有0到64个值,均来自于指定内容和enum类似,但是enum只能存储一个值,但是set可以存储多个值,如果用多个值用逗号隔开存储。
date型
存储日期格式:'YYYY-MM-DD',范围:'1000-01-01'到'9999-12-31'。
time型
存储时间格式:'HH:MM:SS';
datetime
其实就是date和time合起来,存储日期和时间格式:'YYYY-MM-DD HH:MM:SS',范围:'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。
timestamp型(时间戳)
格式:'YYYYMMDDHHMMSS'、'YYMMDDHHMMSS'、'YYYYMMDD'、'YYMMDD',范围:'1970-01-01 00:00:00'到'2037-01-01 00:00:00'。
一般存储时间还是用int型,存储时间戳
year型
存储年份的,格式”YYYY“;
好了就介绍这些,我用的比较多的吧,还有一些大同小异,如果需要特殊的看看MySQL手册 ,基本上就差不多了。
下面我写点 我对建表的一些理解和建议:
1、建表的时候最好有主键id,主键是可以没有的,但是为了关联和查询快最好使用int型当做主键,记得是unsigned(无符号);
2、 我看看到很多人为了存储几十到几百的数字使用了,int(3) 这样的类型,其实这样做是不对的,因为只要是int就是占用4个字节,无论是存多少相当于多余出来的浪费了;
3、char和varchar一个是定长一个是可变长度,一般char存储手机号,密码定长加密过的,为什么不建议varchar,因为varvhar类型是变长,在搜索上会慢于char型,如果用户表的登录和密码 最好选择char这样效果会好很多,查询起来很快,其他的字段可以看情况选择varchar类型,告诉大家一个很多人不知道的东西例如:char(10)和varchar(10),都存储10个字符,varchar 会多占用一个字节,因为需要存储长度,计算机在搜索的时候定长的数据搜索起来会更快;
4、 能用定长的字段就用定长,能用更紧凑的类型就用更紧凑的类型。效果会好很多;
5、建表的时候字段要合理,不是多建在一个表里,也不是非得都拆开放,具体情况看使用场景;
6、建表的时候在最常where的字段加上索引,普通索引就够了,不过不一定,例如邮箱或者手机号,这些可以加一些唯一索引(uniqie) ,这样可以保证数据唯一,查询起来也更快;
7、 根据使用场景和业务,添加不同的索引,索引常用的有:主键索引,唯一索引,普通索引, 和全文索引。可以将多个字段放在一起建索引叫做,联合索引,例如我将用户名和密码加上索引了,其实这样不建议,因为搜索的时候,最好不要select * from table where username=”usename” and password=”password”,而是要select * from table where username=”username” ,查询出来后再将结果和password对比;
8、查询数据的时候能用主键,就用主键,这样查询MySQL不需要扫描表而是像人翻目录一样,立马找出来,其实MySQL所有的索引建立都是为了这个”目录“,能够在查询的时候立马找出来;
9、如果考虑到将来数据增长会很快,可以在建表的时候做好分表,比如评论表,可以根据一个hash算法,建立多个评论表,这样查询起来会好很多,其实无非就是将大块的数据,分散开,减少大面积的表扫描
其实还有很多MySQL建表和优化需要写出来,由于时间的问题暂时先写这些,以后有时间再继续。
MySQL 常用字段类型,介绍及其建表使用方法经验分享的更多相关文章
- MySQL的字段属性+SQLyog查看建表语句
MySQL的字段属性 写在前面:数据库就是单纯的表,用来存储数据,只有行和列.行代表数据,列代表字段(id.name.age这种就叫字段) 1.长度 2.默认 3.主键 4.非空 5.Unsigned ...
- MySQL 常用字段类型与对应的Java类型
varchar 不定长字符串 字符串或是没有合适类型时,可以选择它作为字段类型 对应Java中的String int bigint 数值 一般以int作为数字的默认选择,数值很大时使用bigint 对 ...
- mysql 常用字段类型
tinyint[(m)] [unsigned] [zerofill] 1字节 极小整数,数据类型用于保存一些范围的整数数值范围: 有符号: -128 - 127. 无符号: - 255 特别的: My ...
- MySQL 字段类型介绍
MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...
- Django中的常用字段类型与参数
Django中的常用字段类型 1. 数值型 以下都是数值相关的,比如AutoField,它在MySQL中的类型为int(11),而BooleanField在MySQL中对应的类型是tinyint(1) ...
- Oracle与mysql的字段类型整理
Oralce的字段类型整理如下: Mysql的字段类型整理如下: 最后面一栏是对应JAVA的基本类型.希望对初学者有用,初学者在学习JAVA的时候,不知道怎么把JAVA的对象指向到ORALCE或者MY ...
- SQL常用字段类型
中文常用字段类型 1. 名称类 nvarchar(10) 2. 数量 int 3. 时间 date 4. 货币 money 5. 编号 ...
- PDO 查询mysql返回字段整型变为String型解决方法
PDO 查询mysql返回字段整型变为String型解决方法 使用PDO查询mysql数据库时,执行prepare,execute后,返回的字段数据全都变为字符型. 例如id在数据库中是Int的,查询 ...
- MySQL 常见索引类型介绍
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. MySQL 主要索引类型有如下几种: 1.主键索引 2.唯一索引 3.普通索引 4.空间索引 5.全文索引 假设有如下一张 ...
随机推荐
- C语言--位运算符
一.位运算符 1.按位与:& 1> 功能 * 只有对应的两个二进制位为1时,结果位才为1,否则为0 * 举例:10用二进制表示为1010, 7用二进制表示为0111.对两个数值进行&a ...
- hdu 1255 覆盖的面积
http://acm.hdu.edu.cn/showproblem.php?pid=1255 #include <cstdio> #include <cstring> #inc ...
- mysql/Java服务端对emoji的支持
更改好后的字符集: 乱码 推荐大家看 深入MySQL字符集设置 ,区分检查client端.server端的编码:最简单暴力的方式,是在所有的环节都显式明确的指定相同的编码. 比如使用python的My ...
- logstash 内置匹配IP
10.252.142.174 - - [06/Sep/2016:08:41:36 +0800] "GET /api/validate/code/send?mobilePhone=186522 ...
- Gym 100570E : Palindrome Query
De Prezer loves palindrome strings. A string s1s2...sn is palindrome if and only if it is equal to i ...
- 关于UIButton中的ContentEdgeInsets的深入研究
UIButton的contentEdgeInsets属性的深入研究 由于用UIButton这个属性做过一些东西,但是对它的规律始终不太了解,虽然苹果官方文档的解释大体上可以理解为,这个属性设置的是内边 ...
- 十分钟搭建自己的hadoop2/CDH4集群
版本及准备 我部署的是hadoop-2.0.0-cdh4.2.0.tar.gz,下载地址为http://archive.cloudera.com/cdh4/cdh/4/hadoop-2.0.0-cdh ...
- Linux权限管理(笔记)
权限管理:r: w:x: 三类用户:u: 属主g: 属组o: 其它用户 chown: 改变文件属主(只有管理员可以使用此命令)# chown USERNAME file,... -R: 修改目录 ...
- JAX-WS 可运行项目
该项目是通过JAX-WS实现的WebService服务,其中包括了1.关于最简单的WebService服务的创建2.关于文件交互的WebService的创建 代码中包括了服务端代码和客户端代码(客户端 ...
- Jndi and c3p0 in Tomcat
Tomcat 中Jndi是使用Tomcat自带的连接池抛弃Tomcat自带的连接池.使用c3p0 . 环境:Tomcat 5.5.20下面配置只适合Tomcat 5.5.X 下面来看Jndi 与 c3 ...