MySQL的数据类型

1.详细的建表语句

  Create table 表名字(字段 类型(长度),约束条件)

  数据的分类: a)可以更精准的描述数据 b) 节省内存空间

 

2.数据的类型?

              

       整数类型:

    默认是有符号的   设置为无符号的1.create table t (age tinyint unsigned) 2.建表后修改 alter table t modify age tinyint unsigned

 

  注意:对整数来说,长度不是所占的字节数 是显示数据时的宽度(字符数)

  默认情况下 存储的数值为十进制 小于设置的宽度时,不会填充

  可以加上zerofill 填充

 

  浮点型:             最大长度

  float   4字节       (255,30)

  double  8字节      (255,30)

  decimal  不固定     (65,30)

  例子:create table t(num float(m,d));m表示总长度 d:表示小数点部分的长度

  26.333的m=5  d=3      

 

  区别:float 与double的精度不同 小数部分都不准 decimal的小数是准确的 不会有丢失

  Decimal的默认是(10,0)可以看成取整

 

字符串类型:

         常用的两种:

         Char        定长字符串

         Varcher 可变长度字符串

        

   注意:字符串中 长度指的是数据的字符长度 与字节没有关系

         Create table t (c1 char, c2 varchar(10))

         在创建时 varchar必须指定长度 char有默认值

 

         不同点:

    1)  Char类在去数据的时候,就根据长度来获取,不关心真实数据的长度,每次取固定的长度会造成空间的浪费

    2)    Varchar类在去数据时,先获取数据的长度,在根据长度获取真实的数据,解决了存储空间的浪费,但是存取的速度变慢了

  相同点:

           括号中的数字都是表示存储的最大字符长度

 

 

  mysql会在存储数据时自动将数据末尾的空格去掉

        如果必须要存空格 需要修改sql_mode  增加 PAD_CHAR_TO_FULL_LENGTH 意思是把空格当作有效数据

 

   由于自动去除空格这个机制 在使用等于符号 和like时有区别

            select *from t1 where name = "yh     "; 会自动去除空格

            select *from t1 where name like "yh     "; 不会自动去除空格

    like 用于模糊匹配   使用%表示0或任意个任意字符 使用_表示一个任意字符

 

 日期和 时间

         Year time date datetime timestamp

         Timestamp 特点:可以输入null 会自动输出当前时间 记录被修改时会自动更新时间

         枚举:enum 可以指定一堆字符串的值 在插入数据时,必须选一个

         集合:set 可以指定一堆数据 在插入数据时 必须选一个或多个

共同点:数据都是字符串

 

3.严格模式

  什么是严格模式?

           对插入的数据严格要求,不在范围内的直接报错

  什么是非要个模式?

           不在范围内的数据插入也不报错,只是存储的时候存储的是最大值

  5.6默认的是非严格模式   5.7 默认的是严格模式

 

  查看SQL模式

           Select @@sql_mode;

           Show variables like ”sql_mode”;

  修改SQL模式

           Set @@sql_mode=’值’; 一般不改

 

 

4. 约束

  约束是一种数据的限制

           比如:unsigned无符号 字符串的长度 浮点的长度

 

  作用:保护数据的正确性和完整性

                  

        额外的约束

               语法:创建时指定约束:create table t (字段名 类型(长度) 约束名1 约束名n…)

                        后期修改:alter table t modify 字段名 类型(长度) 约束名1 约束名n…

 

NOT NULL :非空约束

UNIQUE:唯一性约束

DEFAULT:默认值约束

PRIMAULT KEY:主键约束:限制该字段 不能为空 并且是唯一的 可以唯一标识一条数据

FOQREIGN KEY:外键约束:用来指向另一个表的主键

 

 

每一个表都应该有一个主键 需要唯一标识 否则可以可能出现完全相同的两个数据 无法区分

    UNIQUE 不能重复  但是可以为空 这样也不能唯一标识

    UNIQUE NOT NULL 不能为空且唯一  可以唯一标识一条数据  书写顺序无所谓

 

 

    UNIQUE NOT NULL 与 主键的区别

        UNIQUE NOT NULL 不能被其他表引用 (不能作为其它表的外键)

        UNIQUE NOT NULL 约束一个表中可以有多个   但是主键只能有一个

 

  索引:用于加速查询

  InnoDB 中的索引是树形结构

  为了提高查询效率 InnoDB为找一个不为空 且唯一的字段作为主键

   如果表中不存在这样的字段 会自动帮你建一个隐藏主键字段  但是无法提升查询效率

 

   只要是使用innoDB 就应该为每个表指定一个非空 且唯一的字段

      InnoDB阻止数据时 首先使用主键  如果没有主键 找一个非空且唯一  如果也没有 建一个隐藏字段

 

 

  多字段联合主键: 不常用

          学生表  stu_id course_id 做为联合主键

          1 1 已有数据

          1 2 可以插入

          2 1 可以插入

          1 1 不能插入

        只有当两个字段都重复才算重复

 

    当一个表中 由于业务需求没有一个非空且唯一的字段时 我们可以建一个新的字段专门作为主键

    管理主键的值挺麻烦的  你得记录上一次的主键值

    mysql可以帮你自动管理主键  auto_increment 自动增长

    auto_increment 只能用于整型字段 并且该字段必须具备索引

    所以 通常 主键都会加上auto_increment

 

    手动修改自动增长计数

    alter table 表名 auto_increment  新的值;

    注意:如果新的值小于当前的最大值 是无效的

 

    通常建一个表就要建一个主键  主键的类型通常是整型

 

5. 存储引擎

  发动机

       汽油机

       柴油机 柴油价格便宜 动力还强  噪音大  不完全燃烧

     电机 加速快  噪音小  续航问题

 

一个产品或服务的核心部分称之为引擎

        mysql的核心功能存取数据

        mysql存储引擎就是负责存取数据那一段代码

posted @ 2018-11-20 20:01  彼岸花纽约  阅读(166)  评论(0编辑  收藏  举报