本文内容:

  • 数据类型
    • 数值类型
      • 整数型
      • 浮点型
      • 定点型
    • 日期时间类型
    • 字符串类型
    • 补充:
      • 显示宽度与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 -263263-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的数据类型和字段属性的更多相关文章

  1. MySQL常用的数据类型和字段属性

    数据类型 数值 tinyint 十分小的数据 1个字节 smallint 较小的数据 2个字节 mediumint 中等大小的数据 3个字节 int 标准的整数 4个字节 常用 bigint 较大的数 ...

  2. MySQL (三)-- 字段属性、索引、关系、范式、逆规范化

    1 字段属性 主键.唯一键和自增长. 1.1 主键 主键:primary key,一张表中只能有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复. 一张表只能有最多一个主键. 1.1 ...

  3. 修改MYSQL 表中的字段属性

    1.登录数据库 >mysql -u root -p 数据库名称 2.查询所有数据表 >show tables; 3.查询表的字段信息 >desc 表名称; 4.1.修改某个表的字段类 ...

  4. 修改MySQL表中的字段属性

    登录数据库 >mysql -u root -p 数据库名称 查询所有数据表 mysql>show tables; 查询表的字段信息 mysql>desc 表名称; 1.修改某个表的字 ...

  5. Linux下修改MySQL数据表中字段属性

    一.修改某个表的字段类型及指定为空或非空 alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空]; alter table 表名称 modify 字段名称 字段类 ...

  6. mysql的数据类型与列属性

  7. MySQL之字段数据类型和列属性

    数据类型: 对数据进行统一的分类,从系统的角度出发,为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类:数值类型.字符串类型.时间日期类型. 数值型: 数值型数据: ...

  8. mysql 字段属性 与 排序

    mysql中常见的数据类型:varchar(n).float.int(n).bigint(n).date.datetime.text 字段属性 默认值:DEFAULT '默认值' 非空:NOT NUL ...

  9. Mysql 整数类型的字段的属性设置及常用的函数

    数据类型 二.MySQL支持的数据类型 数值类型.日期类型.字符串类型 1.数值类型 1)整数类型 tinyint.smallint.mediumint.int和bigint 2)zerofill属性 ...

随机推荐

  1. MFC原理第三讲.RTTI运行时类型识别

    MFC原理第三讲.RTTI运行时类型识别 一丶什么是RTTI RTTI. 运行时的时候类型的识别. 运行时类型信息程序.能够使用基类(父类)指针 或者引用 来检查这些指针或者引用所指的对象. 实际派生 ...

  2. 在.net core 中PetaPoco结合EntityFrameworkCore使用codefirst方法进行开发

    在.net core开发过程中,使用最多的就是注入方法.但是在.net core使用PetaPoco时,PetaPoco还不支持进行注入方式进行处理一些问题. 今天对PetaPoco进行了一些扩展,可 ...

  3. javascript小实例,移动端页面中的拖拽

    上文说到,想将移动端的拖拽说一说,那现在趁有时间,就将这个福利文带来了,哈哈! 在我还不知道怎么做移动端的手势操作的时候,我觉得这TM实在是太难了,这是多么高深的学问啊,手势操作耶,上滑下滑左滑右滑的 ...

  4. 安装Ubuntu的Mozilla Firefox的Adobe Flash Player时学习/lib、/usr/lib、/usr/local/lib的区别

    想对比一下Ubuntu和windows下视频效果体验的区别.安装了Ubuntu新版14.04.在之前的学习工程中,从来没想过使用虚拟机里的火狐浏览器看视频浏览网页,所以还真没有安装Flash的Linu ...

  5. [转]innodb的锁时间

    本文转自:https://www.cnblogs.com/sunss/p/3170132.html 观察innodb的锁时间,需要关注: mysqladmin extended-status -r - ...

  6. 24.QTableView函数使用,右击菜单实现

    QTableView view(this); QStandardItemModel model(this); /*设置表头水平标题*/ model.setHorizontalHeaderItem(,n ...

  7. 【Java每日一题】20170316

    20170315问题解析请点击今日问题下方的“[Java每日一题]20170316”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...

  8. 为啥JQuery被淘汰了?

    摘要: 技术进步永不止步. 原文:jQuery的没落和技术发展的一般规律 作者:凌霄光 Fundebug经授权转载,版权归原作者所有. jQuery的成就 jQuery是一个伟大的库, 它解决了dom ...

  9. 字符串拼接引发的BUG

    译者按: bug虽小,却是个磨人的小妖精! 原文: Fixing a bug: when concatenated strings turn into numbers in JavaScript 译者 ...

  10. 谈谈 final finally finalize 区别

    声明 本篇所涉及的提问,正文的知识点,全都来自于杨晓峰的<Java核心技术36讲>,当然,我并不会全文照搬过来,毕竟这是付费的课程,应该会涉及到侵权之类的问题. 所以,本篇正文中的知识点, ...