本文实例讲述了mysql数据类型和字段属性。分享给大家供大家参考,具体如下:

本文内容:

数据类型

数值类型

整数型

浮点型

定点型

日期时间类型

字符串类型

补充:

显示宽度与zerofll

记录长度

字段属性

空\不为空值:NULL、NOT NULL

主键:primary key

唯一键:unique key

自增长:auto_increment

默认值:default

字段描述:comment

补充:

复合键

首发日期:2018-04-08

数据类型:

mysql的数据类型就是存储数据的类型。

数值类型:

整数类型:tinyint,smallint,mediumint,integer,bigint

默认是有符号,如果需要使用无符号的数据类型要在后面加"UNSIGNED"

类型

简写

字节大小

(signed)范围

(unsigned)范围

备注

整数型:

TINYINT

1

0~255

-128~127

SMALLINT

2

0~65535

-32768~32767

MEDIUMINT

3

0~16777215

-8388608~8388607

INTEGER

INT

4

0~4294967295

-2147483648~2147483647

BIGINT

8

0~264-1

-263~263-1

小数类型:

浮点类型:float(size,d),double(size,d)

size是数值的最大位数,d是小数点右侧的位数(即使你没输够那么多位也会补全那么多位)。

FLOAT的精度为6~7位(依据情况不同?毕竟机器是以二进制存储的),DOUBLE的精度为14~15位

整数部分的个数为SIZE-D,直接存入的值的个数不能多于这个,但如果浮点数四舍五入导致整数进位而溢出超过最大位数的,系统允许成立(某些版本貌似已经不允许了,所以一般小数位也不要超过)。

很多时候没必要关注两个浮点的数值范围大小(是极大的),注重点应该是它的精度。

定点型:decimal(size,d)

size是数值的最大位数,最大为65,d是小数点右侧的最大位数,最大为30。

定点型不允许因为小数部分四舍五入导致整数部分长度超出范围。

DECIMAL是不会损失精度的。可以理解成使用“字符串”存储(MYSQL权威指南这么说)。

直接不带括号的数据类型float、double、decimal代表没有小数部分

时间日期类型:

时间日期类型包括date,time,datetime,timestamp,year;

Datetime:时间日期,格式是YYYY-MM-DD HH:II:SS,表示的范围是从1000到9999年(有些版本已经允许0-9999?不确定);

Date:日期,格式是YYYY-MM-DD ,表示的范围是从1000到9999年

Time:时间段,格式是HH:II:SS, 指定的时间在某个区间之间,有正负。表示的范围 -838:59:59~838:59:59,这代表某个日期的前后时间范围【如果你仅仅想要用来表示24小时内的时间,可以忽略它的时间范围】

Timestamp:格式是YYYY-MM-DD HH:II:SS,表示的范围从1970-01-01 00:00:00到2038-01-19 03:14:07 【一旦该行记录被修改,那么timestamp会修改成当前时间。】

Year:年份,表示的范围1901-2156

原本有两种格式,year(2)和year(4),但5.7中移除了year(2)。

字符串类型  :

set  :集合字符串。将一个个特定的字符串放到集合里面。

定义了集合之后,不能插入集合元素之外的字符串,(可以插入多个符合条件的字符串)

集合字符串实际上也是仅仅存储数值,系统自动转换成对应的字符串。

集合中每一个元素对应一个二进制位,被选中的为1,没选中的为0,左边为二进制中的低位,右边为高位,从右到左得到二进制结果

create table my_set(

hobby set('football','basketball','pingpong','computer')

)charset utf8;

insert into my_set values('basketball,computer');

insert into my_set values(3);-- 3=0011

insert into my_set values(5);-- 5=0101

enum  :枚举字符串

有点类似set,但这里只能插入一个字符串(set类型的字段的值可以是多个set元素,但enum只能是其中一个元素)

将可能出现的数据列举出来,实际存储的数据只能是列举出来的数据。

使用枚举有利于统一数据,以及节省存储空间(枚举只是存储数值,系统转换成字符串)。

枚举元素实际上按定义的顺序标号,从1开始,所以可以直接插入枚举元素对应的数值。

如:

create table my_enum(

gender enum('male','female','unknown')

)charset utf8;

blob  :二进制数据字符串

存储二进制数据(少用)

text  :文字字符串

存储文字,当字符大于255时,一般使用text;

varchar  :变长字符串

varchar(L),L代表字符长度,单位为字符,最大长度为65536。在实际存储中需要1到2个字节来存储长度(1还是2由实际大小决定,216=35536,<=255的一般一个字节),在使用时根据定义的大小来分配空间,但会根据实际需要使用的缩小空间(比如规定60大小,实际只有30,那么实际空间就是31~32)。

当L大于255时,建议使用Text,而不是varchar;

char  :定长字符串

char(L),L代表字符长度,单位为字符,最大长度为255,不使用L时默认为1

不同环境中根据字符大小,实际占有的空间不同;在UTF8环境下,char(4)所用的字节数为4*3=12;

补充:

显示宽度 与填充 :

在列类型后面显示的数值,代表数据最终显示的最少位数(包含符号)。

一般不够显示宽度的数据都会采用空格填充,也可以使用zerofill来使用零填充(零填充会导致数据类型自动变成无符号的)。

tiny(3)的空格填充效果:

,zerofill效果:

create table myInt(t1 TINYINT(3));

drop table myInt;

insert into myInt values(127),(1);

select * from myInt;

alter table myInt modify t1 tinyint(3) zerofill;

select * from myInt;

不要轻易的使用最大限度来存储字符串,因为涉及记录长度问题  :

MySQL中规定任何一条数据最长不能超过65535个字节

如果有任何一个字段允许为空,那么系统会自动从整个记录中保存一个字节来存储NULL;

text文本不占用记录长度,额外存储。

UTF8中varchar的最大限度:65535-2(需要两个字节来存储长度)  /3=21844,所以最大字符数为21844

GBK中varchar的最大限度:65535-2(需要两个字节来存储长度) /2=32766

字段属性:

字段属性是字段除数据类型外的属性,一般有空\不为空值、主键、唯一键、自增长、默认值、描述等属性。

空\不为空值:NULL、NOT NULL

字段的数据默认情况下是允许为空的,比如说一条人的信息记录中可以没有邮箱(或许有些人考虑用“空字符串”来代表),我们允许可以不填入数据的字段可以设置为null;但比如说某些必填数据,我们不想填入的时候留空,可以设置这个字段为not null

允许为空时的数据,空的数据显示为null:

不为空的字段,插入null时,会报错:

null\not null属性的定义方式(因为默认允许空,所以主要关注not null):

;当然也可以通过修改字段的形式来给字段定义not null属性

主键:primary key

主键用于唯一标识每一条记录(每个人都有自己唯一的身份证)

每一张表只能有一个主键。

因为唯一标识,所以主键字段的数据不能为空,并且主键字段的数据值不能重复

主键也是一种索引,可以提高查找速率。

主键的定义:

1.定义表结构的时候定义成字段的属性。

2.修改表结构,增加一个带主键的字段。

3.修改表结构,给某一字段增加主键属性。

主键的用途:主键的主要用途是用来唯一标识每一条记录,比如我们想将两个表(学生表跟老师表)的多对多关系封装到一个表中,这个抽取的映射字段一般都是各自的主键。

;并且由于主键的数据的不可重复性,也用来约束数据的唯一性。

主键的删除:

alter table 表名 drop primary key;

唯一键:unique key

唯一键的功能与主键有点类型,但不同的是主键只能有一个,唯一键可以有多个,而且唯一键的字段的数据允许为空。

唯一键可以约束字段,使得字段的数据不能重复

如果唯一键同时也有not null,并且表中没有主键的话,在desc查看表结构中会显示成主键

如果唯一键也不允许为空,那么功能与主键相同

唯一键的定义方法可以参考主键的。

唯一键的删除:

alter table 表名 drop index 唯一键名; -- 唯一键默认使用字段名来定义名字

自增长:auto_increment

自增长的功能是可以使某个字段的数据随着记录的插入而进行增长(不给这个字段插入数据的情况下)

自增长的前提是这个字段必须是一个“索引”,比如主键、唯一键

自增长的前提这个字段的数据类型是一个数值型的,(如果给了float,也不会增长成小数,而仅仅是整数)

一个表只能有一个自增长。

只有不给值,或者给null的情况下,才能正确自增长;如果某一次自增长失败了,那么下一次会从当前字段的最大值开始继续自增长。

自增长的定义方法:

;当然也可以通过修改字段的形式来给字段定义not null属性

自增长的修改:

修改增长速度:set auto_increment = 值;

修改下次增长的值:alter table 表名 auto_increment = 值; 【修改的值只能变大,不能变小,因为可能导致数据重复问题】

自增长的查看:show vairable like "auto_increment%";

自增长的删除:利用alter来删除,alter修改字段属性的时候如果不带上原来的属性就会被删掉:

默认值:default

默认值的功能是当我们不给一个字段赋值的时候,使用默认值作为数据,比如不选择性别的时候,默认使用“保密”;

默认值的定义方式:

字段描述:comment

字段描述是用来描述字段的,能在查看数据表创建语句的时候显示出来(不会再select结果中显示出来),可以帮助我们了解某一个字段的意义。

定义方式:

补充:

复合键:可以将多个字段组成一个键,比如学生可以选多门课,但学生号跟课程号一起的时候应该是唯一的,这里使用主键来限制这个情况

定义方法(复合以主键为例):

数据约束(以上面的表为例):

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总》

希望本文所述对大家MySQL数据库计有所帮助。

mysql字段类型原理_mysql数据类型和字段属性原理与用法详解相关推荐

  1. mysql mediumint 长度_mysql字段类型tinyint、smallint、mediumint、int、bigint详解

    mysql建模的过程中,对于优化来讲一个非常重要的点就是字段类型的设置,好的字段类型的设置可以帮助更快的查询数据同时能节约硬盘空间,这对于优化数据库来讲是非常重要的. mysql的字段类型大体来讲分为 ...

  2. mysql set类型使用_MySQL的SET字段类型使用方法

    MySQL的SET字段类型使用方法 SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值.指定包括多个SET成员的SET列值时各成员之间用逗号(',')间隔开.这样SET成员值 ...

  3. mysql 体重 类型 身高_MySQL 数据类型

    介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 mysql常用数据类型概括: #1. 数字: 整型:tinyint int bigint 小 ...

  4. mysql通过集合查询_MySQL使用集合函数进行查询操作实例详解

    本文实例讲述了MySQL使用集合函数进行查询操作.分享给大家供大家参考,具体如下: COUNT函数 SELECT COUNT(*) AS cust_num from customers; SELECT ...

  5. 转载:MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解

    转自:http://www.jb51.net/article/39199.htm 本篇文章是对MySQL数据库INSERT.UPDATE.DELETE以及REPLACE语句的用法进行了详细的分析介绍, ...

  6. mysql time类型数据_MySQL数据类型

    MySQL中定义数据字段的类型对你数据库的优化是非常重要的; MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型; 整数类型 Int(N)中N的涵义 定义了 init(5) ...

  7. mysql 时间取日期函数_mysql 获取当前日期函数及时间格式化参数详解

    MYSQL 获取当前日期及日期格式 获取系统日期: NOW() 格式化日期: DATE_FORMAT(date, format) 注: date:时间字段 format:日期格式 返回系统日期,输出 ...

  8. mysql 优化300例_MySQL配置文件my.cnf参数优化和中文详解

    Mysql参数优化对于新手来讲,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次性完成,需要不断的 ...

  9. mysql数据库帐户_MySQL数据库用户帐号管理基础知识详解

    MySQL管理员应该知道怎样通过指定哪些用户可连接到服务器.从哪里进行连接,以及在连接 时做什么,来设置MySQL用户账号.MySQL3.22.11引入了两个更容易进行这项工作的语句:GRANT 语句 ...

最新文章

  1. 【leetcode】86. Partition List
  2. 计算机原理及基础 —— 有符号类型和无符号类型
  3. mysql 的节点组是什么_什么是MySQL集群
  4. Matrix Differentiation(矩阵求导)以及矩阵求导常用公式
  5. (福利)中秋灯谜,猜中有奖
  6. 关于数据库中的锁,你不知道的是...
  7. SVP——一种用于深度学习的高效数据选择方法
  8. mysql pxc集群 原理 (图解+秒懂+史上最全)
  9. Java Web九大内置对象及四大域对象
  10. 结构体定义的几种方式
  11. 洛谷p1069 细胞分裂(noip2009普及组第三题,素数判断+筛法)
  12. QT 调试时出现 Unable to create a debugging engine.
  13. 硬盘安装Fedora 12
  14. js圆周运动动画_JavaScript动画实例:沿圆周运动的圆圈
  15. 手把手教你抄板(待更新)
  16. topm java cpu3.3_快讯:TOPM 3-0 XQ,TOPM强势压迫,势如破竹喜获三连胜
  17. 华为手机怎么变鸿蒙系统,刚公布,未来你的华为手机将迎来这些改变→
  18. 生死狙击九天取密(逍遥工作室)
  19. php lamda,什么是lambda(函数)?
  20. mysql repair crash_MySQL错误修复:Table crashed repair failed

热门文章

  1. 中秋节之Python绘制许愿树和月饼(打开程序员世界的大门)
  2. 搭建redis高可用:主从、哨兵、集群
  3. JSP-详细总结form表单:name= method=post(get) action=
  4. 拒绝流氓软件----Windows软件推荐
  5. H5直播/点播播放器
  6. ds数据库_面向公民数据科学家的ds 101 Alteryx
  7. 《密码与安全新技术专题》课程总结报告
  8. 深度学习量化交易---0.1.股票K线图绘制
  9. mysql中文占几个char_数据库中一个汉字占几个字符?
  10. shell输出每一行的最后几个字符