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

Wesley13
• 阅读 495

数据类型:

对数据进行统一的分类,从系统的角度出发,为了能够使用统一的方式进行管理,更好的利用有限的空间。

SQL中将数据类型分成了三大类:数值类型、字符串类型、时间日期类型。

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

数值型:

  数值型数据:都是数值,系统将数值型分为整数型和小数型。

   整数型:

存放整形的数据,在SQL中因为更多考虑如何节省磁盘空间,所以系统将整形又细分为5类。

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

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

SQL中的数值类型全部都默认有符号,但是可以分正负。

有时候需要使用无符号数据:需要给数据类型限定:int unsigned;    无符号,从0开始。

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

插入数据测试:

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

在查看表结构的时候,发现每个字段的数据类型之后会自带一个括号,里面有指定的数字。

这个数据是显示宽度,没有特别的含义,只是默认的告诉用户可以显示的形式而已,实际上用户是可以控制的,这种控制不会改变数据本身的大小。

显示宽度的意义:当数据不够显示宽度的时候,会自动让数据变成对应的显示宽度,通常需要搭配一个前导0来增加宽度,不改变值的大小:()

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

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

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

小数型:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

字符串类型:

  在SQL中,将字符串类型分为6类:char、varchar、text、blob、enum和set

定长字符串:char,磁盘(二维表)在定义结构的时候,就已经确定了最终数据的存储长度。

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

  变长字符串:varchar在分配空间的时候,按照最大的空间分配,但是实际上最终用了多少,是根据具体数据来确定的。

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

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

字符串文本:

  如果数据量非常的大,通常说超出255个字符,就会使用文本字符串。

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

枚举字符串:

  枚举:enum,事先将所有可能出现的结果都设计好,实际上存储的数据必须是规定好的数据中的一个。

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

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

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

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

 证明字段存储的数据是数值:将数据取出来 +0,就可以判断出原来的数据存储的到底是字符串还是数值,如果是字符串最终结果永远是0,否则就是其他值。

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

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

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

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

  集合字符串:

集合跟枚举很类似:实际上存储的是数值,而不是字符串(集合是多选)

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

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

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

集合中每一个元素都是对应一个对应的二进制位:

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

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

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

MySQL的记录长度:

mysql中规定:任何一条记录最长不能超过65535个字节(varchar永远达不到理论值)

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

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

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

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

列属性:

真正约束字段的是数据类型,但是数据类型的约束很单一,需要有一些额外的约束,来更加保证数据的合法性。

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

空属性:

两个值:null(默认)和not null(不为空)

虽然是默认为空,数据库基本都是字段为空,但是在实际开发的时候,应当尽可能的保证所有的数据都不应该为空,空数据是没有意义的,空数据没有办法参与运算。

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

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

  列描述:

comment(描述),没有实际的含义,是专门用来描述字段,会根据表创建语句保存,用来给数据库管理员来进行解释的。

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

  默认值:

某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性使用默认值。

默认值关键字:default;

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

默认值的生效(使用):在数据进行插入的时候,不改变字段的赋值。

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

想要使用默认值,可以不一定去指定列表,故意不使用字段列表:可以使用default关键字代替。

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

主键(primary key):

一张表只能有一个字段可以使用对应的键,用来唯一约束该字段里面的数据,不能够重复,这种键称为主键。

  增加主键:

  SQL操作中有多种方式可以给表增加主键:大体分为三种。

  方案一:在创建表的时候,直接在字段之后跟上primary key关键字(主键本身不允许为空)。其优点:非常直接,缺点:只能使用一个字段作为主键。

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

  方案二:在创建表的时候,在所以得字段之后,使用primary key(主键字段列表)来创建主键(如果有多个字段作为主键,可以是复合主键)

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

   方案三:当表已经创建好之后,额外追加主键,可以通过修改表的字段属性,直接追加。(前提:表中的字段对应的数据本身是独立的(不重复));

Alter table 表名 add primary key(字段列表);

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

   主键约束:

主键对应的字段中的数据不允许重复:一旦重复,数据操作失败(增和改)

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

  更新主键与删除主键

没有办法更新主键,主键必须先删除,后增加。

Alter table 表名 drop primary key;

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

  主键分类:

在实际创建表的过程中,很少使用真实业务数据作为主键字段(业务主键:如学号,课程号);大部分时候,是使用逻辑性的字段(字段没有业务含义,值是什么没有关系),将这种主键称为逻辑主键。

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

自增长(auto_increment):

当对应的字段没有值或者给默认值、或者给null的时候,会自动的被系统触发。系统会从当前字段中已有的最大值再进行+1操作,得到一个新的不同的字段。

自增长通常是跟主键搭配。

自增长特点:

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

自增长的使用:

当自增长被给定的值是null或者默认值的时候会触发自动增长。

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

  自增长如果对应的字段输入了值,那么自增长失效,但是下一次还是能够正确的自增长(从最大值+1)

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

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

  修改自增长:

自增长如果涉及到字段的改变,必须先删除自增长,后增加(一张表只能有一个自增长)

修改当前自增长已经存在的值:修改只能比当前已经有的自增长的最大值大,不能够小(小不会生效)

Alter table 表名 auto_increment = 值;

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

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

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

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

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

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

  删除自增长:

自增长是字段的一个属性:可以通过modify来进行修改(保证字段没有auto_increment即可)

Alter table 表名  modify 字段 类型;

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

  唯一键:

  一张表往往有很多字段需要具有唯一性,数据不能重复,但是一张表中只能有一个主键。

  唯一键(unique key)就可以解决表中有多个字段需要唯一性约束的问题。

  唯一键的本质和主键差不多:唯一键默认是允许自动为空,而且可以多个为空(空字段不参与唯一性比较)

  增加唯一键:

  与主键类似,有三种方案。

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

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

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

  唯一键约束:

  唯一键与主键本质相同,唯一区别就是唯一键默认允许为空,而且是多个为空。(如果唯一键也要求不能为空,那么与主键就是一样的)

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

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

索引:

几乎所有的索引都是建立在字段之上。

索引:系统根据某种算法,将已有的数据(未来可能新增的数据),单独建立一个文件,文件能够实现快速的配置数据,并且能够快速找到对应标的记录。

索引的意义:

1、提升查询数据的效率。

2、约束数据的有效性(唯一性等)

增加索引的前提条件:索引本身会产生索引文件(有时候可能毕书尽文件还大),会非常耗费磁盘空间。

如果某个字段需要作为查询条件经常使用,那么可以使用索引(一定会想办法增加);

如果某个字段需要进行数据的有效约束,也可以使用索引(主键、唯一键)

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

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

索引详细讲解: https://www.cnblogs.com/chenshishuo/p/5030029.html

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这