MySQL数据类型

数据类型分类

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

  • 数值类型
  • mysql设置长度不够自动截取 mysql 长度约束_MySQL数据类型

  • 日期和时间类型
  • mysql设置长度不够自动截取 mysql 长度约束_MySQL表约束_02

  • 字符串类型
  • mysql设置长度不够自动截取 mysql 长度约束_MySQL数据类型_03

char与varchar

  • char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
  • varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:
varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。
当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844(因为utf中,一个字符占用3个字节),如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。

MySQL表的约束

表的约束关键字

表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary key,auto_increment,unique key 。

空属性

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

主键

主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主
键所在的列通常是整数类型。

创建表的时候直接在字段上指定主键
id int unsigned primary key;

在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。
primary key(id, name) -- id和name为复合主键

当表创建好以后,可以再次追加主键
alter table 表名 add primary key(字段列表)

删除主键
alter table 表名 drop primary key;

自增长

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。

自增长的特点:

  • 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
  • 自增长字段必须是整数
  • 一张表最多只能有一个自增长
例:字段id设置为主键自增长
id int unsigned primary key auto_increment

唯一键

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。

例:
create table student(
	id int unique;
	name varchar(20);
);

外键

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

foreign key (字段名) references 主表(列)