数据类型

  1. 串数据类型

    这是最常用的数据类型,有两种基本的串类型:分别为定长串和不定长串。定长串结束长度固定的字符,其长度是创建表是指定的,不允许多于指定的字符数据,它们分配的存储空间与指定的一样多,CHAR属于定长串类型。变长串存储长度可变的文本,有些变长数据类型具有最大的定长,而有些则是完全变长的,不管哪种只有指定的数据得到保存(不会添加额外的空格保存),TEXT属于变长串类型。变长数据类型灵活,定长数据类型高效,Mysql处理定长数据类型比变长列快很多,Mysql不允许对变长列(或一个列的可变部分)进行索引,这会极大影响性能。具体类型描述如下表:

数据类型 说明
CHAR 1~255个字符的定长串,它的长度必须在创建时指定,否则MySQL假定为CHAR(1)
VARCHAR 可变长度,最多不超过255字节,如在创建时指定VARCHAR(n),则可存储0~n个字符的变长串
TINYTEXT 同TEXT,最大长度为255字节
MEDUIMTEXT 同TEXT,最大长度为16K
TEXT 最大长度为64K的变长文本
LONGTEXT 同Text,最大长度为4GB(纯文本,一般不会到4G)
ENUM 接受最多64K个串组成的预定义集合的某个串
SET 接受最多64K个串组成的预定义集合的零个或多个串
  1. 数值类型

    存储数值,每种类型具有不同的存储范围,支持取值范围越大,所需存储空间越多。所有数值类型(除BIT和Boolean外)都可以有符号或无符号,有符号数据列可存储正或负的数值,默认情况为有符号。

类型说明 存储需求 取值范围
tinyint[(m)] 1字节 有符号值:-128 到127(- 2^7 到2^7 – 1) 无符号值:0到255(0 到2^8 – 1)
smallint[(m)] 2字节 有符号值:-32768 到32767(- 2^15 到2^15 – 1) 无符号值:0到65535(0 到21 6 – 1)
mediumint[(m)] 3字节 有符号值:-8388608 到8388607(- 2^23 到2^23 – 1 ) 无符号值:0到16777215(0 到2^24 – 1)
int[(m)] 4字节 有符号值:-2147683648 到2147683647(- 2^31 到2^31- 1) 无符号值:0到4294967295(0 到2^32 – 1)
bigint[(m)] 8字节 有符号值:-9223372036854775808 到9223373036854775807(- 263-1) 无符号值:0到18446744073709551615(0到2^64 – 1)
float[(m, d)] 4字节 最小非零值:±1.175494351e – 38
double[(m, d)] 8字节 最小非零值:±2.2250738585072014e – 308
decimal (m, d) m字节(mysql < 3.23),m+2字节(mysql > 3.23 ) 可变;其值的范围依赖于m 和d
  1. 时间类型

    MySQl中有多种表示日期和时间的数据类型。其中YEAR表示年份,DATE表示日期,TIME表示时间,DATETIME和TIMESTAMP表示日期和实践。具体如下表:

数据类型 存储字节数 取值范围
DATE 4 1000-01-01——9999-12-31
TIME 3 -838:59:59——838:59:59
DATETIME 8 1000-01-01 00:00:00——9999-12-31 23:59:59
TIMESTAMP 4 19700101080001——20380119111407
YEAR 1 1901——2155
  1. 二进制类型

    二进制类型可存储任何数据,如文字、图像、多媒体等。具体类型描述如下:

数据类型 说明
TITYBLOB 最大长度为255字节
BLOB 最大长度为64KB
MEDIUMBLOB 最大长度为16MB
LONGBLOB 最大长度为4GB

表约束

  1. 默认值约束

    为数据表中的字段指定默认值 , 添加记录是如果没有给这个字段赋值即为默认值 , BLOB,TEXT类型不支持默认值约束

数据类型与约束 - 图1

  1. # 创建表时为字段添加默认值
  2. # default '默认值' , 设置默认值的关键词
  3. mysql> create table `my_default`(
  4. -> `name` char(10),
  5. -> `age` int(10) default 0
  6. -> );
  7. # 删除默认值
  8. # alter table `表名` modify `字段名` 字段类型 unsigned;
  9. $ alter table `my_default` modify `age` int unsigned;
  10. # 添加默认约束
  11. # alter table `表名` modify `字段名` 字段类型 unsigned default 默认值;
  12. $ alter table `my_default` modify `age` int unsigned default 0;
  1. 非空约束

    字段值不能为空

数据类型与约束 - 图2

  1. # 创建数据表时设置非空并设置默认值
  2. mysql> create table `my_not_null` (
  3. -> `n1` int(10),
  4. -> `n2` int(10) not null,
  5. -> `n3` int(10) not null default 0
  6. -> );
  1. 唯一约束

    保证字段中的值不能重复出现,但允许存在多个null

唯一约束有两种方式定义

  • 列级约束
    语法格式 字段名 数据类型 UNIQUE;
    数据类型与约束 - 图3
  • 表级约束
    语法格式 UNIQUE (字段名1,字段名2);
    数据类型与约束 - 图4

    1. # 列级约束
    2. mysql> CREATE TABLE my_unique_0(
    3. -> `id` int unsigned unique,
    4. -> `username` varchar(10) unique
    5. -> );
    6. #表级约束
    7. mysql> CREATE TABLE my_unique_3(
    8. -> `id` int(10) unsigned,
    9. -> `username` varchar(10),
    10. -> unique(id),
    11. -> unique(username)
    12. -> );
  • 添加约束

    给字段添加唯一性约束,如果已经存在相同值会添加失败

  1. # alter table `表名` add unique(字段名);
  2. $ alter table `good` add unique(user);
  • 删除约束
    1. # alter table `表名` drop index `字段名`;
    2. $ alter table `good` drop index `user`;
  1. 主键约束

    表中的唯一标识

主键创建也分为列级和表级

  • 列级约束
    语法格式 字段名 数据类型 PRIMARY KEY
  • 表级约束
    语法格式 字段名1,字段名2

    1. mysql> create table my_primary(
    2. -> `id` int unsigned primary key,
    3. -> `username` char(10)
    4. -> );
  • 删除主键

    1. # alter table `表名` drop primary key;
    2. $ alter table my_primary drop primary key;
  • 添加主键

    1. # alter table `表名` add primary key(字段名);
    2. $ alter table `my_primary` add primary key(id);

    自动递增

    自动生成主键值,防止主键冲突

语法格式 字段名 字段类型 AUTO_INCREMENT