MySQL中的数据类型和字段约束

    ,MySQL的数据类型

    数据类型是定义列中可以存储什么类型的数据以及该数据实际怎样存储的基本规则
    数据类型限制存储在数据列列中的数据。例如,数值数据类型列只能接受数值类型的的数据
    在设计表时,应该特别重视所⽤的数据类型。使⽤错误的数据类型可能会严重地影响应⽤程序的 功能和性能。
    更改包含数据的列不是⼀件⼩事(⽽且这样做可能会导致数据丢失)。
    基本常⽤的数据类型

    数据类型:整型、浮点型、字符串、⽇期等

    1、字符串数据类型
    最常⽤的数据类型是串数据类型。它们存储串,如名字、地址、电 话号码、邮政编码等。
    不管使⽤何种形式的串数据类型,串值都必须括在引号内
    有两种基本的串类型,分别为定⻓串和变⻓串

    定⻓串: char
    1. 接受⻓度固定的字符串,其⻓度是在创建表时指定的。 定⻓列不允许存储多于指定⻓度字符的数 据。
    2. 指定⻓度后,就会分配固定的存储空间⽤于存放数据

    5-1-mysql中的数据类型 - 图1
    char(7) 不管实际插⼊多少字符,它都会占⽤7个字符位置

    变⻓串 varchar
    存储可变⻓度的字符串 varchar(7) 如果实际插⼊4个字符, 那么它只占4个字符位置,当然插⼊的数据⻓度 不能超过7个字符。
    5-1-mysql中的数据类型 - 图2
    注意

    既然变⻓数据类型这样灵活,为什么还要使⽤定⻓数据类型?

    回答:因为性能, MySQL处理定⻓列远⽐处理变⻓列快得多。

    Text 变⻓⽂本类型存储

    5-1-mysql中的数据类型 - 图3
    5-1-mysql中的数据类型 - 图4

    2、数值类型
    数值数据类型存储数值。 MySQL⽀持多种数值数据类型,每种存储的数值具有不同的取值范围。⽀持的 取值范围越⼤,所需存储空间越多
    与字符串不⼀样,数值不应该括在引号内
    5-1-mysql中的数据类型 - 图5

    5-1-mysql中的数据类型 - 图6
    decimal(5, 2) 表示数值总共5位 , ⼩数占2位
    float
    tinyint 1字节(8位) ⽆符号 0-255。有符号-128, 127
    int 4字节。 ⽆符号 0-42亿。有符号 -21亿, 21亿
    MySQL中没有专⻔存储货币的数据类型,⼀般情况下使⽤DECIMAL(8, 2), float
    有符号或⽆符号
    所有数值数据类型(除BIT和BOOLEAN外)都可以有符号或⽆符号
    有符号数值列可以存储正或负的数值
    ⽆符号数值列只能存储正数。
    默认情况为有符号,但如果你知道⾃⼰不需要存储负值,可以使⽤UNSIGNED关键字

    注意
    如果将邮政编码类似于01234存储为数值类型,则保存的将是数值1234,此时需要使⽤字符串类型 ⼿机号应该⽤什么进⾏存储呢?
    3、⽇期和时间类型
    MySQL使⽤专⻔的数据类型来存储⽇期和时间值
    5-1-mysql中的数据类型 - 图7
    datetime 8字节1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

    4、⼆进制数据类型
    ⼆进制数据类型可存储任何数据(甚⾄包括⼆进制信息),如图像、多媒体、字处理⽂档等

    通常情况下,不会使⽤⼆进制数据类型进⾏,多媒体数据的存储

    5-1-mysql中的数据类型 - 图8


    ⼆、表的字段约束
    5-1-mysql中的数据类型 - 图9 unsigned ⽆符号(给数值类型使⽤,表示为正数,不写可以表示正负数都可以)
    5-1-mysql中的数据类型 - 图10 字段类型后⾯加括号限制宽度
    5-1-mysql中的数据类型 - 图11 char(5). varchar(7) 在字符类型后⾯加限制 表示 字符串的⻓度
    5-1-mysql中的数据类型 - 图12 int(4) 没有意义,默认⽆符号的int为int(11),有符号的int(10)
    在数字类型后⾯加(5),对取值的范围是没有影响的。
    5-1-mysql中的数据类型 - 图135-1-mysql中的数据类型 - 图145-1-mysql中的数据类型 - 图155-1-mysql中的数据类型 - 图165-1-mysql中的数据类型 - 图175-1-mysql中的数据类型 - 图18 int(4) unsigned zerofill只有当给int类型设置有前导零时,设置int的宽度才有意义。
    not null 不能为空,在操作数据库时如果输⼊该字段的数据为NULL ,就会报错
    default 设置默认值
    primary key 主键不能为空,且唯⼀ . ⼀般和⾃动递增⼀起配合使⽤。
    auto_increment 定义列为⾃增属性,⼀般⽤于主键,数值会⾃动加1
    unique 唯⼀索引(数据不能重复:⽤户名)可以增加查询速度,但是会降低插⼊和更新速度


    三、 MySQL的运算符
    5-1-mysql中的数据类型 - 图19 算术运算符: + 、 - 、 * 、 / 、 %
    ⽐较运算符: = 、 > 、 < 、 >= 、 <= 、 !=
    数据库特有的⽐较: in 、 not in 、 is null 、 is not null 、 like 、 between 、 and
    逻辑运算符: and 、 or 、 not
    5-1-mysql中的数据类型 - 图20 like: ⽀持特殊符号%和_ ;
    其中%表示任意数量的任意字符, _表示任意⼀位字符

    四、主键
    1 、 表中每⼀⾏都应该有可以唯⼀标识⾃⼰的⼀列,⽤于记录两条记录不能重复,任意两⾏都不具有相 同的主键值
    2、应该总是定义主键 虽然并不总是都需要主键,但⼤多数数据库设计⼈员都应保证他们创建的每个表 具有⼀个主键,以便于以后的数据操纵和管理。

    5-1-mysql中的数据类型 - 图215-1-mysql中的数据类型 - 图225-1-mysql中的数据类型 - 图23

    要求
    记录⼀旦插⼊到表中,主键最好不要再修改
    不允许NULL
    不在主键列中使⽤可能会更改的值。

    5-1-mysql中的数据类型 - 图24
    (例如,如果使⽤⼀个名字作为主键以标识某个供应商,当该供应商合并和更改其名字时,必须更改这个主键。)
    ⾃增整数类型:数据库会在插⼊数据时⾃动为每⼀条记录分配⼀个⾃增整数,这样我们就完全不⽤ 担⼼主键重复,也不⽤⾃⼰预先⽣成主键
    可以使⽤多个列作为联合主键,但联合主键并不常⽤。使⽤多列作为主键时,所有列值的组合必须 是唯⼀的