博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL的数据模型
阅读量:6714 次
发布时间:2019-06-25

本文共 3035 字,大约阅读时间需要 10 分钟。

MySQL的数据类型主要分为三大类:

  1. 数值型(Numeric Type)
  2. 日期与时间型(Date and Time Type)
  3. 字符串类型(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 decimalcast(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

官方提供了,下面给出一些常见的类型转换:

-- string to dateSTR_TO_DATE('01,5,2016','%d,%m,%Y')-- date to stringDATE_FORMAT(NOW(), '%d %m %Y')-- timestamp to date_stringDATE_FORMAT(registration_time, '%Y-%m-%d')-- int to dateFROM_UNIXTIME(measured_on) > '2016-01-01'

3. 字符串

MySQL中有两个重要的概念:character setcollation,分别表示字符编码集、字符校对规则,显示所有可用的命令:

show character set;show collation;

String类型大致可以分为如下三类:

  • char类型,包括CHARVARCHARTEXT,分别表示定长字符串、变长字符串、长文本;
  • binary类型,包括BINARYVARBINARYBLOB,为定长、变长的二进制数据及较长的二进制数据;
  • enum类型与set类型。

其中,根据字符串(文本)长度,TEXT可细分为TINYTEXTTEXTMEDIUMTEXT;根据二进制数据长度,BLOB可细分为TINYBLOBBLOBMEDIUMBLOBLONGBLOB。binary类型最大的特点是没有编码集和校对规则,存储形式为byte。

MySQL内置的,下面给出一些我遇到过的用法:

-- replace occurrences of a specified stringreplace('苹果 iPad Air', '苹果 ', '')-- concat stringsconcat_ws(',', 'hello', 'world')-- string to intCAST('10' AS UNSIGNED)CAST('-10' AS SIGNED)

转载地址:http://gqhlo.baihongyu.com/

你可能感兴趣的文章
Android官方开发文档Training系列课程中文版:分享简单数据之从其它APP接收简单数据...
查看>>
OpenSSL将于9月22日发布多个漏洞补丁
查看>>
大数据助推新型智库建设
查看>>
新加坡欲重组通信和媒体管制机构
查看>>
《CCNP ROUTE 300-101学习指南》——2.2节构建EIGRP拓扑表
查看>>
《为自己工作——世界顶级设计师成功法则》目录—导读
查看>>
Libreboot 项目向开源社区示好和致歉
查看>>
《CMYK 2.0——设计师色彩管理手册》—第1章1.3节副作用
查看>>
java.util.concurrent.locks.LockSupport
查看>>
红帽加入 Node.js 基金会白金会员
查看>>
《OpenGL编程指南》一2.7 独立的着色器对象
查看>>
Ionic 3.4.2 发布,漂亮的 HTML5 移动应用框架
查看>>
Linux Kernel 4.9-rc8,4.9 分支最后一个候选版
查看>>
想开发 Android 分支?没门!
查看>>
《Web异步与实时交互——iframe AJAX WebSocket开发实战》—— 2.2 相关关键技术及工作原理...
查看>>
《Nmap渗透测试指南》—第1章1.5节Mac OS安
查看>>
重磅,企业实施大数据的路径
查看>>
linux之cp/scp命令+scp命令详解
查看>>
Spark 源码分析 -- BlockStore
查看>>
《C语言编程初学者指南》一1.7 创建并运行第一个C程序
查看>>