没有合适的资源?快使用搜索试试~ 我知道了~
MySQL常用数据类型和建库策略.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 158 浏览量
2022-01-12
20:43:02
上传
评论
收藏 150KB PDF 举报
温馨提示
![preview](https://dl-preview.csdnimg.cn/75560332/0001-8776360d4a4203a9da62159a90f47f71_thumbnail.jpeg)
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
试读
16页
MySQL常用数据类型和建库策略.pdf
资源推荐
资源详情
资源评论
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/release/download_crawler_static/75560332/bg1.jpg)
百度文库 - 让每个人平等地提升自我
1
1. MYSQL 5 数据类型 , 长度范围
1.1 数值类型
MySQL支持所有标准 SQL数 值数据类型 . 这些类型包括严格数值数据类型
(INTEGER,SMALLINT,DECIMAL和 NUMERIC),以及近似数值数据类型 (FLOAT,REAL
和 DOUBLE PRECISION).关键字 INT 是 INTEGER的同义词 , 关键字 DEC是 DECIMAL
的同义词 .
BIT 数据类型保存位字段值 , 并且支持 MyISAM,MEMORY,InnoDB和 BDB表. 作为
SQL标准的扩展 ,MySQL也支持整数类型 TINYINT,MEDIUMINT和 BIGINT.下面的表
显示了需要的每个整数类型的存储和范围 .
MySQL还支持选择在该类型关键字 后面的括号内指定整数值的显示宽度 ( 例
如,INT(4)). 该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧
填满宽度 .
显示宽 度并不限制可以在列内保存的值的范围 , 也不限制超过列的指定宽度的
值的显示 .
当结合可选扩展属性 ZEROFILL使用时 , 默认补充的空格用零代替 . 例如 , 对于声
明为 INT(5) ZEROFILL的列 , 值 4 检索为 00004. 请注意如果在整数列保存超过显
示宽度的一个值 , 当 MySQL为复杂联接生成临时表时会遇到问题 , 因为在这些 情
况下 MySQL相信数据适合原列宽度 .
所有整数类型可以有一个可选 ( 非标准 ) 属性 UNSIGNED.当你想要在列内只允许
非负数和该列需 要较大的上限数值范围时可以使用无符号值 .
浮点和定点类型也可以为 UNSIGNED.同数类型 , 该属性防止负值保存到列中 . 然
而, 与整数类 型不同的是 , 列值的上范围保持不变 .
如果为一个数值列指定 ZEROFILL,MySQL自动为该列添加 UNSIGNED属性 .
对 于浮点列类型 , 在 MySQL中单精度值使用 4 个字节 , 双精度值使用 8 个字节 .
FLOAT类型用于表示近似数值数据类型 .SQL 标准允许在关 键字 FLOAT后面的括
号内选择用位指定精度 ( 但不能为指数范围 ).MySQL还支持可选的只用于确定存
储大小的精度规定 .0 到 23 的精度对应 FLOAT 列的 4 字节单精度 .24 到 53 的精
度对应 DOUBLE列的 8 字节双精度 .
MySQL允许使用非标准语法 :FLOAT(M,D)或 REAL(M,D)或 DOUBLE PRECISION(M,D).
这里 ,"(M,D)" 表示该值一共显示 M位整数 , 其中 D 位位于小数点后面 . 例如, 定义
为 FLOAT(7,4)的一个列可以 显示为 -999.9999.MySQL 保存值时进行四舍五入 ,
因此如果在 FLOAT(7,4)列内插入 999.00009, 近似结果是 999.0001.
![](https://csdnimg.cn/release/download_crawler_static/75560332/bg2.jpg)
百度文库 - 让每个人平等地提升自我
2
MySQL 将 DOUBLE视为 DOUBLE PRECISION(非标准扩展 ) 的同义词 .MySQL还将 REAL
视为 DOUBLE PRECISION(非标准扩展 ) 的同义词 , 除非 SQL服务器模式包括
REAL_AS_FLOAT选项 .
为了保证最大可能的可移植性 , 需要 使用近似数值数据值存储的代码应使用
FLOAT或 DOUBLE PRECISION,不规定精度或位数 .
DECIMAL和 NUMERIC类 型在 MySQL中视为相同的类型 . 它们用于保存必须为确切
精度的值 , 例如货币数据 . 当声明该类型的列时 , 可以 ( 并且通常要 ) 指定精度和标
度; 例如 :
salary DECIMAL(5,2)
在该例子中 ,5 是精度 ,2 是标度 . 精度表示保存值的主要位数 , 标度表示小数点后
面可以保存的位数 .
在 MySQL 5.1中以二进制格式保存 DECIMAL和 NUMERIC值.
标准 SQL要求 salary 列能够用 5 位整数位和两位小数保存任何值 . 因 此, 在这种
情况下可以保存在 salary 列的值的范围是从 -999.99 到 999.99.
在标准 SQL中, 语法 DECIMAL(M)等价于 DECIMAL(M,0). 同样 , 语法 DECIMAL等价
于 DECIMAL(M,0),可以通过计算确定 M的值 . 在 MySQL 5.1中支持 DECIMAL和
NUMERIC数据类型的变量形式 .M 默认值是 10.
DECIMAL或 NUMERIC的最大位数是 65, 但具 体的 DECIMAL或 NUMERIC列的实际范
围受具体列的精度或标度约束 . 如果此类列分配的值小数点后面的位数超过指定
的标度允许的范围 , 值被转换为该 标度 .( 具体操作与操作系统有关 , 但一般结果
均被截取到允许的位数 ).
BIT 数据类型可用来保存位字段值 .BIT(M) 类型允许存储 M位 值.M 范围为 1 到
64.
要指定位值 , 可以使用 b'value' 符.value 是一个用 0 和 1 编写的二进制值 . 例
如,b'111' 和 b'100000000' 分别表示 7 和 128. 参见 9.1.5 节," 位字段值 ".
如果为 BIT(M) 列分配的值的长度小于 M位, 在值的左边 用 0 填充 . 例如, 为 BIT(6)
列分配一个值 b'101', 其效果与分配 b'000101' 相同 .
当要在一个数值列内保存一个超出该列允许 范围的值时 ,MySQL的操作取决于
此时有效的 SQL模式. 如果模式未设置 ,MySQL将值裁剪到范围的相应端点 , 并保
存裁减好的值 . 但是, 如果模式设置 为 traditional(" 严格模式 "), 超出范围的
值将被拒绝并提示错误 , 并且根据 SQL标准插入会失败 . 参见 5.3.2 节,"SQL 服务
器模式 ".
![](https://csdnimg.cn/release/download_crawler_static/75560332/bg3.jpg)
百度文库 - 让每个人平等地提升自我
3
如 果 INT 列是 UNSIGNED,列范围的大小相同 , 但其端点会变为到 0 和 4294967295.
如果你试图保存 -9999999999 和 9999999999, 以非严格模式保存到列中的值是 0
和 4294967296.
如果在浮点或定点列中分配的值超过指定 ( 或默认 ) 精度和标 度规定的范
围,MySQL以非严格模式保存表示范围相应端点的值 .
当 MySQL没有工作在严格模式时 , 对于 ALTER TABLE,LOAD DATA INFILE,UPDATE
和多行 INSERT语句, 由于裁剪发生的转换将报告为警告 . 当 MySQL工作在严格模
式时 , 这些语句将失败 , 并且部分或全部值 不会插入或更改 , 取决于是否表为事
务表和其它因素 .
Type Bytes Minimum Value Maximum Value
(Signed/Unsigned) (Signed/Unsigned)
TINYINT 1 -128 127
0 255
SMALLINT 2 -32768 32767
0 65535
MEDIUMINT 3 -8388608 8388607
0 16777215
INT 4 -2147483648 2147483647
0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
0 18446744073709551615
这 里将数字类型按照分类方法分为三类 : 整数类 , 小数类和数字类 .
我所谓的 "数字类 ", 就是指 DECIMAL 和 NUMERIC,它们是同一种类型 . 它严格的
说不是一种数字类型 , 因为他们实际上是将数字以字符串形式保存的 ; 他的值的
每一位 ( 包括小数点 ) 占一个字节的存储空间 , 因此这种类型耗费空间比较大 .
但是它的一个突出的优点是小数的位数固定 , 在运算中不会 "失真 ", 所以比较适
合用于 " 价格 "," 金 额" 这样对精度要求不高但准确度要求非常高的字段 .
小数类 , 即浮点数类型 , 根据精度的不同 , 有 FLOAT 和 DOUBLE 两种. 它们的优势
是精确度 ,FLOAT 可以表示绝对值非常小 , 小到约 1.17E-38 (0.000...0117, 小
数点后面有 37 个零) 的小数 , 而 DOUBLE 更是可以表示绝对值小到约
2.22E-308 (0.000...0222, 小数点后面有 307 个零 ) 的小数 .FLOAT 类型和
DOUBLE 类型占用存储空间分别是 4 字节和 8 字节 . 如果需要用到小数的字段 ,
精度要求不高的 , 当然用 FLOAT 了. 可是说句实在话 , 我们 " 民用" 的数据 , 哪有要
求精度那么高的呢 ?这两种类型至今我没有用过――我还没有遇到适合于使用它
们的事例 .
![](https://csdnimg.cn/release/download_crawler_static/75560332/bg4.jpg)
百度文库 - 让每个人平等地提升自我
4
用 的最多的 , 最值得精打细算的 , 是整数类型 . 从只占一个字节存储空间的
TINYINT 到占 8 个字节的 BIGINT, 挑选一个 " 够用" 并且占用存储空间最小的类
型是设计数据库时应该考虑的 .TINYINT,SMALLINT,MEDIUMINT,INT 和 BIGINT
占用存储空间分别为 1 字节 ,2 字节,3 字节 ,4 字节和 8 字节, 就无符号的整
数而言 , 这些类型能表示的最大整数分别为 255,65535,16777215,4294967295
和 18446744073709551615.如果用来保存用户的年龄 ( 举例来说 , 数据库中保存
年龄是不可取的 ), 用 TINYINT 就够了 ; 九城的《纵横》里 , 各项技能值 , 用
SMALLINT 也够了 ; 如果要用作一个肯定不会超过 16000000 行的表的
AUTO_INCREMENT 的 IDENTIFY 字段 , 当然用 MEDIUMINT 不用 INT, 试想 , 每行节
约一个字节 ,16000000 行可以节约 10 兆多.
1.2 日期和时 间类型
表示时间值的 DATE和时间类型为 DATETIME,DATE,TIMESTAMP,TIME和 YEAR.每个
时间类型有一 个有效值范围和一个 "零"值, 当指定不合法的 MySQL不能表示的
值时使用 "零"值.TIMESTAMP类型有专有的自动更新特性 , 将在后面描述 .
如 果试图插入一个不合法的日期 ,MySQL将给出警告或错误 . 可以使用
ALLOW_INVALID_DATES SQL模式让 MySQL接受某些日期 , 例如 '1999-11-31'. 当你
想要保存一个 " 可能错误的 " 用户已经在数据库中指定 ( 例如 , 以 web形式 ) 用于
将来处理的值时很有用 . 在这种模式下 ,MySQL只验证月范围为从 0 到 12, 日范围
为从 0 到 31. 这些范围可以包括零 , 因为 MySQL允许在 DATE或 DATETIME列保存
日/ 月和日是零的日期 . 这在应用程序需要保存一个你不知道确切日期的生日时
非常有用 . 在这种情况下 , 只需要将日期保存为 '1999-00-00' 或'1999-01-00'.
如果保存此类日期 ,DATE_SUB()或 DATE_ADD等需要完整日期的函数不会得到正
确的结 果.( 如果你不想在日期中出现零 , 可以使用 NO_ZERO_IN_DATE SQL模式).
MySQL还允许将 '0000-00-00' 保 存为 "伪日期 "( 如果不使用 NO_ZERO_DATE SQL
模式 ). 这在某些情况下比使用 NULL值更方便 ( 并且数据和索引占用的空间更
小).
将 sql_mode 系统变量设置为相应模式值 , 可以更确切你想让 MySQL支持哪种日
期. 参见 5.3.2 节,"SQL 服务器模式 ".
当使用日 期和时间类型时应记住以下几点 :
· MySQL以标准输出格式检索给定日期或时间类型的值 , 但它尽力解释你指定的
各种输入值格式 ( 例如 , 当你指定一个分配给或与日期或时间类型进行比较的值
时). 只支持下面章节中描述的格式 . 期望你能提供有效值 . 如果你使用其它格式
的值会发生意想不到的结果 .
· 包含两位年值的日期会令人模糊 , 因为世纪不知道 .MySQL使用以下规则解释
两位年值 :
o 70-99 范围的年值转换为 1970-1999.
剩余15页未读,继续阅读
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
wenkudashen
- 粉丝: 0
- 资源: 9万+
![benefits](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-1.c8e153b4.png)
下载权益
![privilege](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-2.ec46750a.png)
C知道特权
![article](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-3.fc5e5fb6.png)
VIP文章
![course-privilege](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-4.320a6894.png)
课程特权
![rights](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-icon.fe0226a8.png)
开通VIP
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)