MySQL中的数据类型

MySQL中的数据类型

数据类型:指的是数据表中的字段中支持存放的数据类型

1.数值类型

有多种数据类型可以存放数值

  • 1.tinyint
    内存空间大小:1byte(一个字节是八位)
    范围:
    • 有符号:-128~127
    • 无符号:0~255
      说明:特小型整数(年龄)
  • 2.smallint
    内存空间大小:2byte
    范围:
    • 有符号:-32768~32767
    • 无符号:0~65535
      说明:小型整数
  • 3.mediumint
    内存空间大小:3byte
    范围:
    • 有符号:-2^31~2^31-1
    • 无符号:0~2^32-1
      说明:中型整数
  • 4.int/integer(默认使用)
    内存空间大小:4byte
    范围:
    • 有符号:
    • 无符号:
      说明:整数
  • 5.bigint
    内存空间大小:8byte
    范围:
    • 有符号:
    • 无符号:
      说明:大型整数
  • 6.float
    内存空间大小:4byte
    范围:
    说明:单精度
  • 7.double(默认使用)
    内存空间大小:8byte
    范围:
    说明:双精度(存在问题,比如一个数是36.2,那么就会被显示为36.200000000
  • 8.decimal
    内存空间大小:(根据参数而定)第一个参数+2
    范围:(根据参数而定)
    说明:
    • decimal的使用有两个参数,这个必须声明;如,decimal(10,2),代表的就是这个数据算上小数位一共有10位,其中小数位有2个:99999999.23

2.字符串类型

存储字符序列的类型

  • char
    • 字符序列的长度范围:0~255个字节(字符)注意:一个汉字占两个字符
    • 说明:定长字符串,最多存储255个字符如,char(3)\char(255);数据长度最长为规定的长度,当数据长度不够规定好的长度时,会自动用/uoooo码补齐,以空格的形式呈现
  • varchar
    • 字符序列的长度范围:0~65536个字节(字符)
    • 说明:可变长度字符串,最大长度是65536。如,varchar(50),那这事最大长度就是50个字符,最多存25个汉字
  • tinyblob
    • 字符序列的长度范围:0~255个字节
    • 说明:存储二进制字符串
  • blob(音频图片视屏在计算机中都会转化为二进制进行存储)
    • 字符序列的长度范围:0~65535
    • 说明:存储二进制字符串
  • mediumblob
    • 字符序列的长度范围:0~1677215个字节
    • 说明:存储二进制字符串
  • longblob
    • 字符序列的长度范围:0~4294967295个字节
    • 说明:存储二进制字符串
  • tinytext
    • 字符序列的长度范围:0~255个字节
    • 说明:文本数据(字符串)
  • text
    • 字符序列的长度范围:0~65535个字节
    • 说明:文本数据(字符串)
  • mediumtext
    • 字符序列的长度范围:0~1677215个字节
    • 说明:文本数据(字符串)
  • longtext(当varchar存不下时,用这个)
    • 字符序列的长度范围:0~4294967295个字节
    • 说明:文本数据(字符串)

3.日期类型

在mysql数据库中,我们可以使用字符串来存储时间,但是,如果需要基于时间字段进行查询,比如,要查找某个时间段之内的数据,就不便于查询了

  • date
    • 格式:2021-09-05
    • 说明:日期,只存储年月日
  • time
    • 格式:11:11:11
    • 说明:时间,只存储时分秒
  • year
    • 格式:2021
    • 说明:只存储年份
  • datetime
    • 格式:2021-09-05 11:11:11
    • 说明:日期+时间(时间与日期用空格隔开)
  • timestamp(与datetime一致,只是格式不同)
    • 格式:20210905 111111
    • 说明:日期+时间(没有分隔符,叫做时间戳)

利用日期类型存储数据时,我们就可以很好的查询某一日期之前或之后的数据,或者某两个日期之间的数据

字段约束

约束介绍

每个字段都指定数据类型,每个字段后都增加了对字段的限制,比如, not null、unique等,我们将这个称之为字段约束;这是在创建表的时候,对这个表的某一字段列中数据的限制性的要求(对表中列的数据进行限制)

创建限制的原因:

  • 1.保证数据的有效性(有过的不能再有)
  • 2.保证数据的完整性(某些字段必须有)
  • 3.保证数据的正确性

常见字段约束:

  • 1.非空约束:not null;限制此列的值不能为空,必须填写
  • 2.唯一约束:unique;在数据表中的多条数据,此字段的值不能重复
  • 3.主键约束:primary key;非空+唯一,能够表示数据表中唯一的一条数据(唯一约束,可以不写,但是主键必须要写)
  • 4.外键约束:foreign key;建立不同表之间的关系

(以上约束违反之后,数据无法成功添加)

主键约束

非空+唯一,能够表示数据表中唯一的一条数据;与唯一约束的区别就是,主键不能为空;
一个表中最多只能有一个主键,但是,主键可以是一个字段,也可以是多个字段的组合,这叫做联合组件
创建主键:

  • 1.创建表时定义主键:直接在字段后面写上primary key如,book_id char(10) primary key,
  • 2.创建表声明字段后,单独起一行(最后一行)来声明主键:primary key(字段名)如,primary key(book_id)
    修改主键约束
    利用alter关键字,alter table books drop primary key;这样原来被设定为逐渐的字段就不再是主键了

添加主键约束:(创建是没有定义主键,创建完成后在设定主键)
这依然是修改表元素,所以还用alter,alter table books modify book_id char(10) primary key;

主键的自动增长

当一个表中没有字段适合来作为为主键,那我们可以另外声明一个字段(这个字段可能和这个表的数据没有任何联系),来作为这个表的主键

  • 自动增长的作用:
    是为了避免数据过多而无法正确添加主键;设置主键自动生长后,只需要填写其他字段,填写完毕后主键会自动填写

自动增长的定义(auto_increment)

create table type(
  type_id primary key auto_increment,
  type_name varchar(20) not null,//不适合做主键,于是定义上面的一条自定义字段,并设置为自动生长
  type_remark varchar(200) not null//不适合做主键
);

注意:自动增长是从1开始的,每添加一条记录,自动的增长的列会自动加1在,但是如果我们把某条记录删除然后再添加新的记录,这个自动增长的数据不会回调,也就是接着刚刚删除了的数据继续往上加;也就是,原本三条记录,删了一条,然后再加一条,这是新的记录的id是4,而不是3,只保证唯一性,不保证连续性

联合主键

联合主键:将数据表中的两个或以上的字段组合在一起设置为表的主键

创建方式:创建表声明字段后,单独起一行(最后一行)来声明主键:primary key(字段名1,字段名2)如,primary key(stu_id,course_id)
注意:

  • 1.不可以在多个字段后声明primark key,否则会被识别为定义了多个主键
  • 2.实际项目中联合主键使用频率不高

所以,当表中没有明确字段作为主键时,首选添加主键的方式进行创建

外键约束(多表关联部分再将)

posted @ 2023-02-24 20:01  BattleTrumpet  阅读(158)  评论(0)    收藏  举报