MySQL的数据模型
MySQL的数据类型主要分为三大类:
- 数值型(Numeric Type)
- 日期与时间型(Date and Time Type)
- 字符串类型(String Type)
1. 数值
MySQL的数值类型按照精确程度,大致可以分为两类:
- 精确数值(Exact Value),包括INTEGER、DECIMAL、NUMERIC等;
- 近似数值(Approximate Value),包括FLOAT、REAL、DOUBLE PRECISION等。
若按类型簇划分,则可分为三簇:
- Integer类型,包括INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT;
- Fixed-Point类型,包括DECIMAL, NUMERIC;
- Floating-Point类型,包括FLOAT, DOUBLE。
一般地,关键字INT代指INTEGER,关键字DEC(desc只降序)代指DECIMAL, DOUBLE代指DOUBLE PRECISION(a nonstandard extension)。BIT类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。数值类型的存储、范围及用途如下表:
类型 | 大小(字节) | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT | 4 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 | (-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度浮点数值 |
DOUBLE | 8 | (1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度浮点数值 |
DECIMAL | 对于DECIMAL(M,D),为M+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
DECIMAL类型常被声明为DECIMAL(M,D)
,其中M
为precision,指允许的最多数字位数(the maximum number of digits);D
为scale,指小数点后的小数位数(the number of digits to the right of the decimal point);一般D
不大于M
。对于Floating-Point类型,MySQL允许类似的声明语法:FLOAT(M,D)
、REAL(M,D)
、DOUBLE PRECISION(M,D)
。
常见的类型转换:
-- string to decimal
cast(cover_ratio as decimal(4,2))
2. 日期与时间
日期和时间类型(Date and Time Type)包括了如下5种类型:
- DATE,指日期,遵从'YYYY-MM-DD'(或'YY-MM-DD')格式,支持区间段['1000-01-01', '9999-12-31'];
- TIME,指时间,遵从'HH:MM:SS'(或'HHH:MM:SS')格式,支持区间段['-838:59:59', '838:59:59'];
- DATETIME,包含了日期与时间,一般精确到秒(精确度最高到微妙),遵从 'YYYY-MM-DD HH:MM:SS'(或'YY-MM-DD HH:MM:SS')格式,支持区间段['1000-01-01 00:00:00', '9999-12-31 23:59:59'];
- TIMESTAMP,包含了日期与时间,一般精确到秒(精确度最高到微妙),无格式遵从,支持区间段['1970-01-01 00:00:01' UTC, '2038-01-19 03:14:07' UTC];
- YEAR,指年份,常被声明为YEAR或YEAR(4) (1-byte type);
至于应选择什么数据类型表示时间戳,这篇文章给出了答案。MySQL同时支持ODBC语法来表示日期和时间类型:
{ d '2016-10-21' } -- date
{ t '2016-10-21' } -- time
{ dt '2016-10-21' } -- datetime
{ ts '2016-10-21' } -- timestamp
官方提供了Date and Time函数,下面给出一些常见的类型转换:
-- string to date
STR_TO_DATE('01,5,2016','%d,%m,%Y')
-- date to string
DATE_FORMAT(NOW(), '%d %m %Y')
-- timestamp to date_string
DATE_FORMAT(registration_time, '%Y-%m-%d')
-- int to date
FROM_UNIXTIME(measured_on) > '2016-01-01'
3. 字符串
MySQL中有两个重要的概念:character set
、collation
,分别表示字符编码集、字符校对规则,显示所有可用的命令:
show character set;
show collation;
String类型大致可以分为如下三类:
- char类型,包括
CHAR
、VARCHAR
、TEXT
,分别表示定长字符串、变长字符串、长文本; - binary类型,包括
BINARY
、VARBINARY
、BLOB
,为定长、变长的二进制数据及较长的二进制数据; - enum类型与set类型。
其中,根据字符串(文本)长度,TEXT
可细分为TINYTEXT
、TEXT
、MEDIUMTEXT
;根据二进制数据长度,BLOB
可细分为TINYBLOB
、BLOB
、MEDIUMBLOB
、LONGBLOB
。binary类型最大的特点是没有编码集和校对规则,存储形式为byte。
MySQL内置的string函数,下面给出一些我遇到过的用法:
-- replace occurrences of a specified string
replace('苹果 iPad Air', '苹果 ', '')
-- concat strings
concat_ws(',', 'hello', 'world')
-- string to int
CAST('10' AS UNSIGNED)
CAST('-10' AS SIGNED)
MySQL的数据模型的更多相关文章
- MySQL Workbench的使用教程 (初级入门版)
MySQL Workbench 是 MySQL AB 最近释放的可视数据库设计工具.这个工具是设计 MySQL 数据库的专用工具. MySQL Workbench 拥有很多的功能和特性:这篇由Djon ...
- (转)MySQL Workbench的使用教程 (初级入门版)
转自:http://www.cnblogs.com/yqskj/archive/2013/03/01/2938027.html MySQL Workbench 是 MySQL AB 最近释放的可视数据 ...
- Sakila——MySQL样例数据库解析(已经迁移)
一.Introduction Sakila可以作为数据库设计的参考,也可作为实验数据.我是用作数据仓库和ODI学习的实验数据. The Sakila sample database was devel ...
- golang web框架 beego 学习 (四) 连接mysql
1 DB参数配置在app.conf appname = gowebProject httpport = runmode = dev [db] host= localhost port= databas ...
- 初学者使用MySQL_Workbench 6.0CE创建数据库和表,以及在表中插入数据。
标签: mysqlworkbench数据库 2013-10-09 20:17 19225人阅读 评论(14) 收藏 举报 分类: mysql(1) 版权声明:本文为博主原创文章,未经博主允许不得转 ...
- Photon Server 服务端编程
Photon Server 和 Unity3D 数据交互: Photon Server 服务端编程 Unity3D 客户端编程 VS2017 之 MYSQL实体数据模 一:Photon Server的 ...
- Unity3D 客户端编程
Photon Server 和 Unity3D 数据交互: Photon Server 服务端编程 Unity3D 客户端编程. VS2017 之 MYSQL实体数据模 1:打开unity新建新项目, ...
- vs2012新建实体数据模型(EF)时无Mysql数据源
sql转mysql数据库,用到EF,遇到vs2012新建实体数据模型时无Mysql数据源的问题. 问题截图如下: 解决方法1:(简单的的解决方法,有可能解决问题,如不能解决问题,请看解决方法2): ( ...
- Visual Studio2017中如何让Entity Framework工具【ADO.NET实体数据模型】支持MYSQL数据源
熟悉Entity Framework应该对以下图片不陌生,他就是ADO.NET实体数据模型向导:可以将数据库的表自动生成模型类,或者创建Code First的模型文件. 但是这个模型向导默认只显示微软 ...
随机推荐
- B样条基函数的定义和性质
定义:令U={u0,u1,…,um}是一个单调不减的实数序列,即ui≤ui+1,i=0,1,…,m-1.其中,ui称为节点,U称为节点矢量,用Ni,p(u)表示第i个p次(p+1阶)B样条基函数,其定 ...
- 如何安全的将VMware vCenter Server使用的SQL Server Express数据库平滑升级到完整版
背景: 由于建设初期使用的vSphere vCenter for Windows版,其中安装自动化过程中会使用SQL Server Express的免费版数据库进行基础环境构建.而此时随着业务量的增加 ...
- windows环境redis主从安装部署
准备工作 下载windows环境redis,我下载的是2.4.5,解压,拷贝一主(master)两从(slaveof).主机端口使用6379,两从的端口分别为6380和6381, 我本地索性用6379 ...
- servlet 简介,待完善
什么是Servlet?① Servlet就是JAVA 类② Servlet是一个继承HttpServlet类的类③ 这个在服务器端运行,用以处理客户端的请求 Servlet相关包的介绍--javax. ...
- Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP
回到目录 .Net MVC之所以发展的如些之好,一个很重要原因就是它公开了一组AOP的过滤器,即使用这些过滤器可以方便的拦截controller里的action,并注入我们自己的代码逻辑,向全局的异常 ...
- Android之ContentProvider数据存储
一.ContentProvider保存数据介绍 一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProvider是以类似数据库中表的方式将数 ...
- TFS 2015 敏捷开发实践 – 看板的使用
看板在现代应用开发过程中使用非常广泛,不管是使用传统的瀑布式开发还是敏捷开发,都可以使用看板管理.因为看板拥有简单的管理方法,直观的显示方式,所以很多软件开发团队选择使用看板进行软件开发管理.本文不在 ...
- ubuntu安装mysql
好记性不如烂笔头,记录一下,ubuntu安装mysql的指令. 安装MySQL: sudo apt-get install mysql-server sudo apt-get install mysq ...
- 开源一个WEB版本GEF,基于SVG的网页流程图框架
8月开始断断续续的制作这个web gef,没有任何依赖,完全原生js开发,目前已经完成了雏形,基本上可以在项目里应用了. 下图展示的是demo1的效果,包括拖拽,生成连线,点击生成\取消墙体,整个de ...
- 【Web动画】CSS3 3D 行星运转 && 浏览器渲染原理
承接上一篇:[CSS3进阶]酷炫的3D旋转透视 . 最近入坑 Web 动画,所以把自己的学习过程记录一下分享给大家. CSS3 3D 行星运转 demo 页面请戳:Demo.(建议使用Chrome打开 ...