zoukankan      html  css  js  c++  java
  • 数据库存储引擎及数据类型

    1.存储引擎介绍

      数据库中数据的存储都是以表的形式存储的,存储引擎也称为表类型

      实现了存储数据,为存储的数据建立索引,并实现了实时更新以及查询种种方法

      数据库中不同类型的表对应mysql不同的存储机制

    1.1mysql查看支持的存储引擎

    mysql> show enginesG;# 查看所有支持的引擎
    mysql> show variables like 'storage_engine%'; # 查看正在使用的存储引擎

    InnoDB存储引擎(最常用)

       MySQL默认的存储引擎

      支持事务

      行级锁定,通过索引实现

      缓存特性高,可以缓存索引,也能缓存数据。其设计目标主要面向联机事务处理(OLTP)的应用

      适用场景:不需要事务支持(不支持),并发较低(锁定机制),数据修改相对较少(阻塞问题),以读为主

    MyLSAM存储引擎

      不支持事务

      表级锁定,锁定机制是锁级索引

      只会缓存索引。设计主要面向一些 OLAP 数 据库应用

      适用场景:需要事务支持,数据更新频繁,数据一致性要求较高

    NDB存储引擎

      集群存储引擎

    Memory存储引擎

      Memory 存储引擎中的数据都存放在内存中,数据库重启或发生崩溃,表中的数据都将消失

    NTSE存储引擎

      网易公司开发的面向其内部使用的存储引擎。目前的版本不支持事务, 但提供压缩、行级缓存等特性

    BLACKHOLE

      黑洞存储引擎,可以应用于主备复制中的分发主库。

    几种数据引擎对比:

    InnoDB 
    支持事务
    支持表锁、行锁(for update)
    表锁:select * from tb for update
    行锁:select id,name from tb where id=2 for update
    
    myisam
    查询速度快
    全文索引
    支持表锁
    表锁:select * from tb for update
    
    
    NDB
    高可用、 高性能、高可扩展性的数据库集群系统
    
    Memory 
    默认使用的是哈希索引

    1.2 指定表类型/存储引擎

    存储引擎
    1.create table t1(id int) engine = innodb 会出现2个文件
    2.create table t2(id int) engine = myisam 会出现3个文件(速度比上面的快),但是我们还是用innodb存储 
    3.create table t3(id int) engine = memory 只有表结构没有表数据,是创建到内存中的
    4.create table t4(id int) engine = blackhole  黑洞,吃数据(数据存进去就没有了,存进去就没有了)

    2.数据类型介绍(详见菜鸟教程)

    2.1数字

    整数

    tinyint(小整型) # 一个字节
                tinyint[(m)] [unsigned] [zerofill]
                小整数,数据类型用于保存一些范围的整数数值范围:
                有符号: -128 ~ 127
                无符号:0~ 255
    
                PS: MySQL中无布尔值,使用tinyint(1)构造。
    
    int(整型)# 四个字节
                int[(m)][unsigned][zerofill]
                整数,数据类型用于保存一些范围的整数数值范围:
                有符号: -2147483648 ~ 2147483647
                无符号:0~ 4294967295
    
    bigint(大整形)  # 八个字节      
            bigint[(m)][unsigned][zerofill]
                大整数,数据类型用于保存一些范围的整数数值范围:
                有符号:-9223372036854775808 ~ 9223372036854775807
                无符号: 0~  18446744073709551615

    ## 这里对于int也可以赋值,int类型后面显示的是显示宽度,而不是存储宽度。

    create table dbs(id int(3) zerofill);
    insert into dbs values(5),(12);

    效果

    小数

    float :在位数比较短的情况下不精准
    double :在位数比较长的情况下不精准
         0.000001230123123123会存成:0.000001230000
                
    decimal:(如果用小数,则用推荐使用decimal)
         精准,内部原理是以字符串形式去存

    2.2字符

    char(10)  # 10字符,一个汉字或者一个字母都是一个字符,字符长度范围0-255
        简单粗暴,浪费空间,存取速度块,root存成root000000
    
    varchar   #字符长度范围0-65535
        精准,节省空间,存取速度慢

    验证

    length():查看字节数
    char_length():查看字符数

    create table b8(x char(5),y char(5));
    insert into b8 values('CRY','CRY');
    select x,char_length(x),y,char_length(y) from b8;  # 查看输入的字符长度
    
    insert into b8 values('哈皮','二狗子');
    select x,length(x),y,length(y) from b8;        # 查看输入的字节长度

    效果(存多少显示多少)

    2.3时间类型

    常用类型:
        datatime    # 2018-6-12 16:34:20
        data          # 2018-6-12
        time          # 16:34:20
        year          # 2018

    语法

    语法:
            YEAR
                YYYY(1901/2155)
    
            DATE
                YYYY-MM-DD(1000-01-01/9999-12-31)
    
            TIME
                HH:MM:SS('-838:59:59'/'838:59:59')
    
            DATETIME
    
                YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)
    
            TIMESTAMP
    
                YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

    用法

    日期:
    create table stu(id int,name char(5),now_date date,now_year year,now_datetime datetime,now_time time);
    insert into stu values(1,'bob',now(),now(),now(),now());
    select * from stu;

    效果

     2.4枚举及集合类型

    字段的值只能在给定范围中选择,如单选框,多选框

    enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female

    set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)

     例

    create table b5(id int,
            姓名 varchar(100),
            性别 enum('',''),
            爱好 set('抽烟','喝酒','鬼混')
            );
    
    insert into b5 values
            (1,'保罗','','抽烟'),
            (2,'杜杜','','喝酒,鬼混'),
            (3,'乔伊','','抽烟,喝酒,鬼混');

    效果

  • 相关阅读:
    方法功能从无参方法、含参方法到重载方法
    文件目录在Visual C++ 2005中使用 GNU Scientific Library
    数据库导出All about Oracle IMP/EXP
    初始化变量明明白白c++ 初始化
    内容组织高效项目方案是如何产生的 !
    函数矩阵OpenGL中glFrustum()和gluPerspective()的相互转换
    对象数组[置顶] java高级工程师JSON和XML的使用
    资源成员函数Android应用程序资源的查找过程分析
    事件复制[wxWidgets编程系列2]_[发送异步事件的注意项之字符串深浅复制]
    查找删除Code First Entity Framework基本与最佳添加(add/create),删除(delete/remove),修改(update/modify)操作
  • 原文地址:https://www.cnblogs.com/LearningOnline/p/9173124.html
Copyright © 2011-2022 走看看