1.存储引擎介绍

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

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

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

1.1mysql查看支持的存储引擎


mysql> show engines\G;# 查看所有支持的引擎
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);



效果

存储类型clickhouse和mysql区别_数据

小数



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;        # 查看输入的字节长度



效果(存多少显示多少)

存储类型clickhouse和mysql区别_数据库_02

存储类型clickhouse和mysql区别_数据库_03

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;



效果

存储类型clickhouse和mysql区别_存储引擎_04

 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,'乔伊','女','抽烟,喝酒,鬼混');



效果

存储类型clickhouse和mysql区别_数据库_05