zoukankan      html  css  js  c++  java
  • 45、存储引擎与数据类型

    一、存储引擎

      存储引擎:负责将不同类型的数据分别用不同的存储方式进行存储

      MySQL主要引擎有:Innodb、myisam、memory、Blackhole

    1.1、innodb

      是MySQL5.5版本之后默认的存储引擎

      存储数据更加安全

    1.2、myisam

      MySQL5.5版本之前默认的存储引擎

      速度比innodb快,但是我们需要更加注重数据的安全

    1.3、memory

      内存引擎(数据全部存放在内存中),断电数据就会直接消失

    1.4、Blackhole

      黑洞引擎,不管存什么都会消失

    1.5、查看所有引擎

      show engines

    1.6、不同引擎在存储表中的不同点

      create table t1(id int)engine=innodb;

      create table t2(id int)engine=myisam;

      create table t3(id int)engine=memory;

      create table t4 (id int)engine=Blackhole;

    1.7、存数据

      insert table t1 values(1);

      insert table t2 values(2);

      insert table t3 values(3);

      insert table t4 values(4);

    二、创建表的完整语法

    2.1、创建表的语法

      create table 表名(

          字段名1 类型(宽度)约束条件,

          字段名2 类型(宽度)约束条件

          字段名3 类型(宽度)约束条件)

    2.2、创建表的要求

      1.在同一张表中字段名不能重复

      2.宽度和约束条件是可选的,可写可不写,字段名和字段类型是必须要写的

      3.同一个字段名可以携带多个约束条件,中间使用空格间隔开

      4.最后一行不能有逗号,否则会报错

    2.3、创建表中的宽度

      宽度:一般情况下指的是对存储数据的限制,

         默认情况下为1,存数据时只会为一个字节,当存的数据为null时,等同于空

         create table t1 (name char);

         insert into t1 values(null);关键字null

      MySQL5.6版本默认没有开启严格模式,规定只能存一个字符,如果给了多个字符,就会直接取截,剩下一个

      MySQL5.7版本之后开启严格模式,一旦超过规定字符就会直接报错

      使用数据库的原则:

        能尽量少给数据库干活,就不要给数据库加活

    2.4、约束条件

      约束条件:null

      not null 不能插入null

      create table t1(id int,name char not null);

    2.5、宽度和约束条件的关系

      宽度是用来限制数据的储存

      约束条件是在宽度的基础上添加而外的约束

    三、严格模式

    3.1、怎么查看严格模式

      show variables like “%mode”;

    3.2、模糊匹配/查询

        关键字 like

           %:匹配任意多个字符

           _:匹配任意单个字符

    3.3、修改严格模式

      set session 只在当前窗口有效

      set global 全局有效

      get global sql_mode = ‘STRICT_TRANS_TABLES’;

      修改以后需要重新进入服务端

    三、基础数据类型

    3.1、整型

      整型分为tinyint、smallint、meduimint、int、nigint

      我们可以根据对应的类型以及数值,添加到表中,测得对应的范围

      create table t1(id tinyint);

      insert into t1 values(-129),(256);

    3.2、约束条件之无符号 unsigned

      create table t1(id tinyint unsigned)

      整型默认情况下都是带符号的

    3.3、整型中的宽度

      create table t1(id int(8));

      insert into t1 values(123456789);

      整型中的宽度不是用来限制位数的,当小于宽度,会自动使用0进行补充,

      只要添加的数值在该整型的类型范围内,有几位就会显示几位

    四、浮点型

      浮点型分为float、double、decimal

    4.1、浮点型的精度验证

      精度:float《double《decimal

    create table t1(id float(255,30));    #一共255位数,其中30位为小数点后数字
    create table t2(id double(255,30));
    create table t3(id decimal(65,30));
    #添加
    insert into t1 values(1.111111111111111111111);
    insert into t2 values(1.111111111111111111111);
    insert into t3 values(1.111111111111111111111);

    五、字符类型

      字符类型分为char、varchar

    5.1、char

      char(4):数据超过四个,直接报错,小于四个,使用空格补充

        缺点:浪费空间

        优点:存取简单,按照固定的字符存取

    5.2、varchar

      varchar(4):数据超过四个,直接报错,小于四个,有几个存几个(没有空格)

        缺点:存取麻烦,存取都需要先制作报头,通过报头反馈的信息才能读出数据

        优点:节省空间

    5.3、字符类型的长度计算

    create table t1(name char(4));
    create table t2(name varcher(4));
    insert into t1 values('a');
    insert into t2 values('a');
    #计算字段长度:char_langth
    select char_langth(name) from t1;    #硬盘中会有空格存在,但是显示时会将空格隐藏
    select char_langth(name) from t2;
    #修改sql_mode 使mysql不自动将隐藏的空格删除
    set global aql_mode = 'STEICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';

    六、时间类型

      时间类型分为date、datetime、time、year

      date:年月日 

      datetime:年月日时分秒

      time:时分秒

      year:年

    create table student(id int,
                                  name varchar(16),     
                                  born_year year,        
                                  birth date,
                                  study_time time,
                                  reg_time datetime );
    insert into student values(1,'egon','1970','1970-11-11','11:11:11','1970-11-11 11:11:11')             

    七、枚举与集合类型

      枚举:enum(多选一)

      集合:set(多选多)

    7.1、枚举的使用

      存数据时只能从枚举中选取一个存储,否则报错

    create table user(id int,
                              name char(16),
                              gender enum('male','female','others'));
    insert into user values(1,'json','male');    #正确
    insert into user values(2,'egon','abc');    #报错

    7.2、集合的使用

      存数据时可以从集合中选取一个或者读多个存储,但不能选择集合外的

    create table teacher(id int,   
                                   name char(16),
                                   gender enum(‘male’,'famale'),
                                   hobbly set('read','dbj','drink_tea'));
    insert into teacher values(1,'json','male','read,dbj');#正确
    insert into teacher values(2,'egon','famale','abc') #报错

    八、约束条件

    约束条件:

      not null:不能存在空

      zorefill:补零

      unsigned:无符号(正负号)

      default(‘male’):默认值(可以在集合后搭配默认值,后续可以不用输入,输入时则更改)

      unique(ip,port):唯一(unique限定的值必须要有唯一性,否则报错)

    zorefill和unsigned一起用时,可以限制整型的取值范围,不能有负数,并且范围值将是原来的两倍

  • 相关阅读:
    构造方法
    $this
    public/private/protected三种访问控制符的区别
    vsftpd的虚拟主机配置,错误记录
    高斯模糊css
    css绘制三角形
    禁止缩放的一行代码
    自适应的Javascript代码resize.js
    判断是pc端还是手机端js
    倒计时
  • 原文地址:https://www.cnblogs.com/jingpeng/p/12829164.html
Copyright © 2011-2022 走看看