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

 

posted @ 2020-05-05 00:57  疏星淡月  阅读(193)  评论(0编辑  收藏  举报