Mysql库、表、列介绍

MySQL逻辑结构

库:库名,属性(字符集,校对规则,表空间加密)
表:表名,表属性(存储引擎,字符集,校对,表空间加密),列(列名,列属性),数据行

字符集

showcharset;

UTF8:字符最大长度3个字节
UTF8mb4:字符最大长度4个字节

校对(排序规则)规则

showcollation;

存储引擎

showengines;

数字类型

  • 整型

选择数据类型建议:合适的、简短的、完整的
  • 浮点型与定点数
    • FLoat:表示不指定小数位的浮点数。
      Float(M,D):表示一共存储M个有效数字,其中小数部分占D位。
      Float(10,2):整数部分为8位,小数部分为2位。
    • Double又称之为双精度:系统用8个字节来存储数据,表示的范围更大,10^308次方,但是精度也只有15位左右。
    • Decimal:系统自动根据存储的数据来分配存储空间,每大概9个数就会分配四个字节来进行存储,同时小数和整数部分是分开的。
    • 定点数:能够保证数据精确的小数(小数部分可能不精确,超出长度会四舍五入),整数部分一定精确
      Decimal(M,D):M表示总长度,最大值不能超过65,D代表小数部分长度,最长不能超过30。

字符串类型

  • Char(64)
    定长字符:指定长度之后,系统一定会分配指定的空间用于存储数据。
    基本语法:char(L),L代表字符数(中文与英文字母一样),L长度为0到255。
  • Varchar(64)
    变长字符:指定长度之后,系统会根据实际存储的数据来计算长度,分配合适的长度(数据没有超出长度)。
    基本语法:Varchar(L),L代表字符数,L的长度理论值位0到65535。
    因为varchar要记录数据长度(系统根据数据长度自动分配空间),所以每个varchar数据产生后,系统都会在数据后面增加1-2个字节的额外开销:是用来保存数据所占用的空间长度。
    如果数据本身小于255个字符:额外开销一个字节;如果大于255个,就开销两个字节。
    • 区别
      char一定会使用指定的空间,varchar是根据数据来定空间。
      char的插入数据效率理论上比varchar高:varchar是需要通过后面的记录数来计算。
      如果确定数据一定是占指定长度,那么使用char类型;
      如果不确定数据到底有多少,那么使用varchar类型;
      如果数据长度超过255个字符,不论是否固定长度,都会使用text,不再使用char和varchar。
  • Text longtext
    文本类型:本质上mysql提供了两种文本类型。
    Text:存储普通的字符文本。
    Blob:存储二进制文本(图片,文件),一般都不会使用blob来存储文件本身,通常是使用一个链接来指向对应的文件本身。
    Text:系统中提供的四种text。
    Tinytext:系统使用一个字节来保存,实际能够存储的数据为:2^8+1。
    Text:使用两个字节保存,实际存储为:2^16+2。
    Mediumtext:使用三个字节保存,实际存储为:2^24+3。
    Longtext:使用四个字节保存,实际存储为:2^32+4。
    • 注意:
      1、在选择对应的存储文本的时候,不用刻意去选择text类型,系统会自动根据存储的数据长度来选择合适的文本类型。
      2、在选择字符存储的时候,如果数据超过255个字符,那么一定选择text存储。
  • Enum
    枚举类型:在数据插入之前,先设定几个项,这几个项就是可能最终出现的数据结果。
    如果确定某个字段的数据只有那么几个值:如性别,男、女、保密,系统就可以在设定字段的时候规定当前字段只能存放固定的几个值:使用枚举。
    基本语法:enum(数据值1,数据值2…)
    系统提供了1到2个字节来存储枚举数据:通过计算enum列举的具体值来选择实际的存储空间:如果数据值列表在255个以内,那么一个字节就够,如果超过255但是小于65535,那么系统采用两个字节保存。
  • Set
  • 集合
    是一种将多个数据选项可以同时保存的数据类型,本质是将指定的项按照对应的二进制位来进行控制:
    1表示该选项被选中,0表示该选项没有被选中。
    基本语法:set(‘值1’,’值2’,’值3’…)
    系统为set提供了多个字节进行保存,但是系统会自动计算来选择具体的存储单元。
    1个字节:set只能有8个选项。
    2个字节:set只能有16个选项。
    3个字节:set只能表示24个选项。
    8个字节:set可以表示64个选项。
    Set和enum一样,最终存储到数据字段中的依然是数字而不是真实的字符串。
    数据在存储的时候,如果被选中,那么对应的位的值就为1,否则为0。
    系统在进行存储的时候会自动将得到的最终的二进制颠倒过来,然后再进行转换成十进制存储。
    Set集合的意义:
    • 1、规范数据
    • 2、节省存储空间
      Enum:单选框(只能插入一个)
      Set:复选框(可以插入多个)

时间类型

列约束及属性

primarykey:主建约束,同时保证唯一性和非空.每个表只能有一个PK,我们建议业务无关列(数字列)。
foreignkey:外键约束,用于限制两个表的关系,保证从表该字段的值来自于主表相关联的字段的值。
notnull:非空约束,保证字段的值不能为空
default:默认约束,保证字段总会有值,即使没有插入值,都会有默认值
unique:唯一,保证唯一性但是可以为空,比如手机号。
auto_increment:自增长列
unsigned:无符号
comment:注释

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Mysql库、表、列介绍》
文章链接:https://wrlog.cn/2023/07/1526/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。