关于字段的选择其实很多地方都有进行详细的介绍,我这里只写一下我在使用过程中的心得感受。如果想要全面的了解的话,大家可以去看高性能MYSQL这一本书籍,里面有一章节介绍的特别全面,基本涉及MYSQL中全部的字段的介绍。

我这里给大家介绍的就一些常用的字段,例如:int、float、double、 decimal、varchar、char、 date、datetime等八种常用的类型。

在数据库设计过程中我们要本着够用的原则,如果一味的把数据字段范围设为最大或者默认值的话,会导致存储空间大量的浪费。在数据量特别大的情况下,这样的设计原理将会使数据库空间造成严重的浪费,也会对数据库的执行效率造成很大的影响。所以我们在做数据库设计的时候要谨慎再谨慎、小心再小心。

下面说一下字段各自的使用原则:

1.当数据存储的是字符,且长度是一个固定区间定值的话就可以考虑使用char来进行存储,如果字符长度是未知的且长度变化特别明显的话,这个时候最好使用varchar来存储。但是不管使用的是哪种字段来进行存储,都不要把字段的初始长度设置为最大化,应该是根据业务需求来存储最合适的长度字段。

2.数据库设计过程中尽量使用int来作为字段类型,因为在所有的数据类型中int不管是存储空间还是执行速度方面都是最好的。例如:如果业务中存储的都是数据的话而且长度不是特别长的话,就可以考虑使用int来进行存储,或者业务中要对数据进行排序的时候需要使用某一标识权重之类的,也可以使用int来进行存储。但是不要因为int高效,而有意识的把所有字段都设计成int来处理,最终还是要根据业务的具体需求来设计相应的字段。

3.在涉及到金额的时候如果对精度要求不高的情况下可以优先使用float,其次是使用double来进存储。如果对精度要求比较高的情况下最好使用decimal来存储,但是相应的它 的效率没有float和double那么高效。具体使用哪种还是要根据业务的具体需求来选择。

4.关于date和datetime的用法,就要看你想要存储时间的精确值了,如果仅仅是想要精确到天的话使用date就可以了,如要要精确到秒一级别的就要使用datetime了。有时候大家使用datetime的使用却只是存储到天的日期单位时,这个时候就会自动添加00:00:00在数据的后面,作为秒一级别的数据。

5.int(5)和int(10)的区别是什么?想必大家也很好奇吧,其实5和10其实只是显示长度的却别而已,也就是不管int(x)x的值是什么值,存储数字的取值范围还是int本身数据类型的取值范围,x只是数据显示的长度而已。

6.varchar(10)和char(10)的差别是什么?存储超过时候会发生什么问题呢?这个问题其实也相对经典,我也是整了很久才搞清楚的。在MYSQL5,5以后,varchar(x)x中范其实是存储字段的长度范围,就是一个字符代表一个长度,不管这个字符是汉子还是字符都算是一个长度单位。varchar虽然设置长度值,可是因为varchar是可变的长度类型,也就是当存储的长度小于x时候,其实实际的存储空间不是x而是实际存储的字符长度+一些标示空间。当然如果超过x的长度的话还是会报错的。而char(y)中y的值就是存储空间实际的存储长度,超过这个长度的话就会报错。
---------------------

数据库中字段的数据类型与JAVA中数据类型的对应关系

 
类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述
           
VARCHAR L+N VARCHAR java.lang.String 12  
CHAR N CHAR java.lang.String 1  
BLOB L+N BLOB java.lang.byte[] -4  
TEXT 65535 VARCHAR java.lang.String -1  
           
INTEGER 4 INTEGER UNSIGNED java.lang.Long 4  
TINYINT 3 TINYINT UNSIGNED java.lang.Integer -6  
SMALLINT 5 SMALLINT UNSIGNED java.lang.Integer 5  
MEDIUMINT 8 MEDIUMINT UNSIGNED java.lang.Integer 4  
BIT 1 BIT java.lang.Boolean -7  
BIGINT 20 BIGINT UNSIGNED java.math.BigInteger -5  
FLOAT 4+8 FLOAT java.lang.Float 7  
DOUBLE 22 DOUBLE java.lang.Double 8  
DECIMAL 11 DECIMAL java.math.BigDecimal 3  
BOOLEAN 1 同TINYINT      
           
ID 11 PK (INTEGER UNSIGNED) java.lang.Long 4  
           
DATE 10 DATE java.sql.Date 91  
TIME 8 TIME java.sql.Time 92  
DATETIME 19 DATETIME java.sql.Timestamp 93  
TIMESTAMP 19 TIMESTAMP java.sql.Timestamp 93  
YEAR 4 YEAR java.sql.Date 91

MYSQL数据库设计之字段选择原则的更多相关文章

  1. mySql 数据库设计原则

    mysql数据库设计原则: 必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存页优化使得资源利用率更高 禁止使用存储过程.视图.触发器.Event 解读:高并发大数据 ...

  2. mysql 数据库设计(转)

    本规范适用于mysql 5.1或以上版本使用 数据库范式 第一范式(1NF)确保每列保持原子性 第一范式(1NF):数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项. ...

  3. mysql数据库设计规则总结

    MySQL数据库设计总结   规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎. 注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的 ...

  4. MySQL 数据库设计的“奥秘”

    2 MySQL 数据库设计的"奥秘" [主题]逻辑设计:数据类型与 Schema 所谓"万丈高楼平地起",一个稳固的建筑离不开扎实的基础.同样,良好的的「逻辑设 ...

  5. php大力力 [020节]mysql数据库唯一id字段如何设置

    2015-08-26 php大力力020.mysql数据库唯一id字段如何设置 不懂 以下有些文章 mysql唯一id 自动生成 uuid mysql 里面可以用uuid()语句来生成一个UUID:s ...

  6. MySQL数据库添加一个字段

    MySQL数据库添加一个字段 1.添加一个字段 alter table tableName add 列名  数据类型; 2.添加一个字段设置默认值 alter table tableName add ...

  7. mysql数据库数据(字段数过大)太多导入不了的解决方法

    mysql数据库数据(字段数过大)太多导入不了的决方法: 1.打开navicat 工具 2.在数据库上右键,执行右键菜单命令“命令列界面” 3.在打开的窗口中,运行set global max_all ...

  8. MySQL数据库中tinyint字段值为1,读取出来为true的问题

    原文:https://blog.csdn.net/shuyou612/article/details/46788475 MySQL数据库中tinyint字段值为1,读取出来为true的问题   今天在 ...

  9. MySQL 数据库设计 笔记与总结(3)物理设计

    [物理设计的工作] ① 选择合适的数据库管理系统:Oracle,SQLServe,MySQL,PgSQL ② 定义数据库.表及字段的命名规范 ③ 根据所选的 DBMS 系统选择合适的字段类型 ④ 反范 ...

随机推荐

  1. kibana 安装

    一 介绍 kibana 主要实现对日志的可视化显示. 二 安装 下载安装包: wget https://download.elastic.co/kibana/kibana/kibana-4.1.2-l ...

  2. 已知起始点,获取每段等距离途经点的经纬度(用百度js api作)

    已知两个中文地址,自动规划路径,获取路径上每个3公里的点的经纬度 <html> <head> <meta http-equiv="Content-Type&qu ...

  3. 设计模式--访问者模式C++实现

    访问者模式C++实现 1定义Visitor Pattern 封装一些作用于某种数据结构中各元素的操作,他可以在不改变数据结构的前提下定义作用于这些元素新的操作 2类图 角色分析 Visitor抽象访问 ...

  4. 1-23-shell脚本之-if流程控制语句和for循环语句的使用

    大纲: 1.逻辑判断 2.if流程控制语句 3.for循环控制语句   ---------------------------------------------- 在开始之前,先了解一下逻辑判断符号 ...

  5. 【Raspberry Pi】 小问题汇总

    注: 此系列为自己之前所搭建网站内容. 目前入手树莓派2,将遇到的一些琐碎的问题记录在此. 1. 更改时区 查看日期命令:date 输入sudo dpkg-reconfigure tzdata后按提示 ...

  6. 031——VUE中表单控件处理之使用vue控制input和textarea表单项

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 转载:【Oracle 集群】RAC知识图文详细教程(一)--集群概念介绍

    文章导航 集群概念介绍(一) ORACLE集群概念和原理(二) RAC 工作原理和相关组件(三) 缓存融合技术(四) RAC 特殊问题和实战经验(五) ORACLE 11 G版本2 RAC在LINUX ...

  8. hdu1814

    题解: 2-sat nm暴力 虽然似乎复杂度最低 代码: #include<cstdio> #include<cmath> #include<algorithm> ...

  9. QT出现 Cannot create children for a parent that is in a different thread 的解决方法:

    timer = new Timer(this);改成 timer = new Timer();就可以了. 因为你timer是属于主线程的,尽量不要在非主线程里创建新的对象并指定其对象为主线程内的对象, ...

  10. New Concept English three(11)

    Customs Officers are quite tolerant these days, but they can still stop you when you are going throu ...