zoukankan      html  css  js  c++  java
  • day45 数据库基础

    一、存储引擎

    不同的存储引擎对应着不同的对数据的处理机制

    mysql主要的存储引擎

    • innodb
      • 是mysql5.5版本之后默认的存储引擎,数据相对更安全
    • myisam
      • 是mysql5.5版本之前的默认存储引擎,速度快
    • memory
      • 内存引擎,断电丢失
    • blackhole
      • 无论存什么都会立刻消失(黑洞)

    用代码测试不同引擎的区别

    # 查看所有的存储引擎
    show engines;
    

    # 不同的存储引擎在存储表的时候 异同点
    create table t1(id int) engine=innodb;
    create table t2(id int) engine=myisam;
    create table t3(id int) engine=blackhole;
    create table t4(id int) engine=memory;
    

    结果

    ​ 对每个表添加一个数据可以看到除了blackhole引擎,其他表的数据都还在,这里要注意,memory的数据只是存在内存中了,重启一下服务数据就丢失了

    创建表的完整语法

    # 基本语法
    create table 表名(
    	字段1 类型(宽度(可不写)) 约束条件,
        字段1 类型(宽度(可不写)) 约束条件,
        字段1 类型(宽度(可不写)) 约束条件
    )
    

    注意

    • 在同一张表中的字段名不能重复
    • 宽度和约束条件是可选的,有默认值,字段名和字段类型必须写,约束条件可以写多个
    • 最后一行不能有逗号
    • 针对不同版本对数据宽度的限定情况
      • 5.6版本默认没有开启严格模式,如果设定char(1)但是给了多个字符,会自动截取第一个
      • 5.7版本及以后默认开启了严格模式,存多了会报错
    • 约束条件举例:create table t6(id int,name char not null); not null表示这个字段的数据不能插入null
    • 宽度和约束条件的关系
      • 宽度:限制数据的长度
      • 约束条件:在宽度的基础上增加额外的约束

    二、数据类型

    前引:严格模式

    • 查看严格模式
      • show variables like “%mode”;
    • 模糊查询
      • 关键字like
      • %:匹配任意多个字符串
      • _:匹配任意单个字符串
    • 修改严格类型
      • set session 只在当前窗口有效
      • set global 全局有效
      • set global sql_mode = 'STRICT_TRANS_TABLES';
      • 修改完成之后重新进入服务端即可

    1 整形

    • 分类
      • TINYINT SMALLINT MEDUMINT INT BIGINT
    • 举例
      • 年龄,等级,id
    # 不同的整形类型最大的区别就是能取到的范围,如果超出这个范围只会存最大范围(非严格模式下)
    # 以上的5中整形类型能取的范围依次增大,所以我们通常用int能应付大部分情况
    
    
    # 例子:tinyint
    如果我们创建了一个tinyint类型的字段,他的范围是-128~127,超出这个范围就会报错
    
    # 特殊约束,unsigned约束可以让该字段的范围只有正数,会把负号内的位数全都带到正数中,也就是说
    create table t6(id tinyint  usigned);
    # 这里的id的范围不再是-128~127 而是0~255
    
    # 长度:整形内的长度不表示限制位数
    # 例子:
    id int(8)
    # 如果数字没超出8位,默认用空格填充至8位(显示的时候会自动去除)
    # 如果超出了8位,有几位存几位,但是还是遵循该类型的最大范围
    # 我们可以用zerofill约束让空格变成0显示出来
    create table t7(in int(8) zerofill);
    

    2 浮点型

    • 分类
      • FLOAT、DOUBLE、DECIMAL
    • 举例
      • 身高、体重
    # 储存限制(不写的默认值)
    create table t10(id float(255,30));
    create table t11(id double(255,30));
    create table t12(id decimal(65,30));
    
    # 插入数据验证区别
    insert into t10 values(1.111111111111111111111111111111);
    insert into t11 values(1.111111111111111111111111111111);
    insert into t12 values(1.111111111111111111111111111111);
    

    image-20200504195806183

    总结:

    精度从小到大:float<double<decimal

    具体场景用不同的精度

    3 字符类型

    3.1 类型

    • char 定长
      • char(4)数据超过4个字符直接报错,不够4个用空格补全
    • varchar 变长
      • varchar(4)数据超过4个字符直接报错,不够有几个存几个

    3.2 举例验证区别

    可以用length关键字来分析内含几个字符,

    修改sql_mode = 'STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';

    在重启服务后,这个修改能让mysql不做自动剔除操作

    得到的结果是,同样只插入了一个字符的数据,varchar的长度是1,char的长度是4

    3.3 对比优缺点

    • char
      • 缺点:浪费空间(因为会自动补全)
      • 优点:读取很简单,因为我们取的都是最大长度
    • varchar
      • 优点:节省空间(不会自动补全)
      • 缺点:读取麻烦,存取都需要报头来限定长度。

    总结:两者各有好处,都有用处

    4 日期类型

    分类

    • date:年月日 2020-5-4
    • datetime :年月日时分秒 2020-5-4 20:28:28
    • time :时分秒 20:28:28
    • year:2020
    create table student(
    	now_year year,
        now_data date,
        now_datatime datetime,
        now_time time
    );
    insert into student values("2020","2020-5-4","2020-5-4 11:11:11","11:11:11");
    

    5 枚举和集合类型

    • 枚举(enum)多选一
    • 集合(set)多选多

    具体使用

    create table user(

    ​ gender enum('male','female','others'),

    ​ hobby set('read','DBJ','hecha')

    )

    insert into user values('male','read,hecha');

    前一个是枚举,可以在3个中选一个,后一个是集合,可以多选,也可以单选

    但是这两种都不能选自己没有的!

  • 相关阅读:
    内功心法-代理模式
    java.lang.NumberFormatException: multiple points
    MarkDown语法-使用博客园的markDown编辑
    MarkDown语法
    linux下安装tomcat——service tomcat does not support chkconfig
    关于git&github的操作
    activeMQ 本地测试
    spring AOP 的坑~
    js高级面试题
    js的内存管理
  • 原文地址:https://www.cnblogs.com/hz2lxt/p/12828184.html
Copyright © 2011-2022 走看看