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一起用时,可以限制整型的取值范围,不能有负数,并且范围值将是原来的两倍

  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    leetcode 213. 打家劫舍 II JAVA
    leetcode 48. 旋转图像 java
    leetcode 45. 跳跃游戏 II JAVA
    leetcode 42. 接雨水 JAVA
    40. 组合总和 II leetcode JAVA
    24. 两两交换链表中的节点 leetcode
    1002. 查找常用字符 leecode
    leetcode 23. 合并K个排序链表 JAVA
  • 原文地址:https://www.cnblogs.com/jingpeng/p/12829164.html
Copyright © 2011-2022 走看看