MySQL存储引擎与基本数据类型

存储引擎

  数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。

  可以简单的理解为是处理同一数据的不同方式。

MySQL主要存储引擎

    MyISAM

  MySQL5.5之前的默认存储引擎,数据的存储速度较InnoDB更加快。

    InnoDB

  MySQL5.5之后的默认存储引擎,具有事务,行级锁,和外键的功能,数据的安全性更高,数据的存储速度较慢

    memory

  基于内存存储数据,速度最快,但是断电后会立刻丢失

    blackhole

  使用该引擎写入数据会立马消失,类似于垃圾处理站

MySQL存储引擎与基本数据类型

 

 

 

不同引擎创建表的区别

# 创建不同的表
create table t1(id int) engine=myisam;
create table t2(id int) engine=innodb;
create table t3(id int) engine=memory;
create table t4(id int) engine=blackhole;
"""
MyISAM会创建三个文件
   .frm      表结构文件
   .MYD    表数据文件
   .MYI    表索引文件(索引是用来加快数据查询的)
InnoDB会创建两个文件
   .frm     表结构文件
   .ibd     表数据和表索引文件
memory
   .frm     表结构文件
blackhole
   .frm     表结构文件
"""

MySQL存储引擎与基本数据类型

 

 

 

 

严格模式

# 针对MySQL5.6版本数据超出范围不会报错 而是自动帮你截取并保存(此行为不合理)
    方式1:修改配置文件(永久)
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES  方式2:命令修改(暂时) show variables like '%mode%' set session # 当前窗口有效 set global # 当前服务端有效 set gloabl sql_mode = 'strict_trans_tables' 修改完毕后退出客户端重新进入即可 再次执行上述插入命令 会直接报错

 

基本数据类型

整型

分类:tinyint,smallint,int,bigint

区别:不同的int类型能够储存的范围是是不一样的,bigint>int>smallint>tinyint

'''研究默认是否需要正负号'''
        create table t1(id tinyint);
        insert into t1 values(-999),(999);
 # 结论:所有的int类型默认都需要正负号
        create table t6(id tinyint unsigned);  # 移除正负号
        insert into t6 values(-999),(999);

整型中括号内数字的作用

id int(8)
    如果数字没有超出8位 那么默认用空格填充至8位
    如果数字超出了8位 那么有几位就存几位(但是还是要遵守最大范围)
"""
create table t13(id int(8) unsigned zerofill);
# 用0填充至8位

# 总结:
针对整型字段 括号内无需指定宽度 因为它默认的宽度以及足够显示所有的数据了

 

 

MySQL存储引擎与基本数据类型

 

 

 

浮点型

分类:float,double,decimal

区别:三者的精确度不同,float<double<decimal

float(255,30)  # 总共255位 小数位占30位
double(255,30)  # 总共255位 小数位占30位
decimal(65,30)  # 总共65位 小数位占30位
"""研究三者的不同"""
create table t7(id float(255,30));
create table t8(id double(255,30));
create table t9(id decimal(65,30));
insert into t7 values(1.11111111111111111111111);
insert into t8 values(1.11111111111111111111111);
insert into t9 values(1.11111111111111111111111);

MySQL存储引擎与基本数据类型

 

 

 

 

字符类型

  • char:定长类型,定义了多少字节的长度,在输入时超过这个长度便会报错,比这个长度少便会使用空格填充到定义的长度。

    优点:数据存取方便,速度快

    缺点:浪费了存储空间

  • varchar:变长类型,定义了多少字节的长度,在输入时超过这个长度便会报错,比这个长度少便有几个存几个。

    优点:节省了存储空间

    缺点:数据存取麻烦,需要有1bytes来先制作报头,然后获取报头再获取数据。

mysql> create table t1(name char(5));
mysql> create table t2(name varchar(5));
mysql> insert into t1 values('jjk');
mysql> insert into t2 values('jjk');
# char类型里的数据在取出时会自动消除空格 可以设置以下语句取消
 set global sql_mode = 'strict_trans_tables,pad_char_to_full_length'

MySQL存储引擎与基本数据类型

给字段增加注释

# 增加注释
mysql> create table t2(id int comment '序号');
# 查看注释
mysql> show create table t3;

MySQL存储引擎与基本数据类型

 

 

 

 

枚举与集合

  • 枚举:设置字段的时候有多个选项,只能从这个几个选项中选择一个

  • 集合:设置字段的时候有多个选项,可以选择一个或者多个

# 设置枚举
mysql> create table t1(gender enum('男','女'));
# 设置集合
mysql> create table t2(hobby set('篮球','足球','网球'));

# 给表中加入记录
mysql> insert into t1 value('男'); # 成功
mysql> insert into t1 value('女'); # 成功
mysql> insert into t1 value('man');# 报错

mysql> insert into t2 values('篮球,网球,足球'); # 成功
mysql> insert into t2 values('足球'); # 成功

MySQL存储引擎与基本数据类型

 

 

 

 

时间类型

分类:

  • date:年月日

  • datatime:年月日时分秒

  • time:时分秒

  • year:年份

mysql> create table t1(time datetime);
mysql> insert into t1 values('2022-2-18 19:20:20');

MySQL存储引擎与基本数据类型

 

 

 

 

 

创建表的完整语法

create table 表名(
    字段名1 字段类型(数字) 约束条件,
    字段名2 字段类型(数字) 约束条件,
    字段名3 字段类型(数字) 约束条件
);
"""
1.字段名和字段类型是必须的
2.数字和约束条件是可选的 并且 约束条件可以有多个空格隔开即可
3.最后一个语句的结尾不要加逗号
"""

MySQL存储引擎与基本数据类型

 

 

 

 

约束条件

unsigned:让数字没有负数

mysql> create table t1(id int unsigned);
mysql> insert into t1 values(-100);  # 报错
mysql> insert into t1 values(100);

MySQL存储引擎与基本数据类型

MySQL存储引擎与基本数据类型

 

 

 

 zerofill:当字段类型是char时,输入的值小于设定的字节时,使多余的部分使用数字0填充

mysql> create table t2(name int zerofill);
mysql> select * from t2;

MySQL存储引擎与基本数据类型

 

 

 

not null:非空,当表中的记录为空时就会报错

"""
    新增表数据的方式
        方式1:  按照字段顺序一一传值
             insert into t1 values(1,'jack');
        方式2:  自定义传值顺序 甚至不传
            insert into t1(name,id) values('jack',1);
            insert into t1(id) values(1);
    在MySQL中不传数据 会使用关键字NULL填充意思就是空 类似于python的None
"""

mysql> create table t3(id int, name char(6) not null );

mysql> insert into t3(id) values(2); # 报错
mysql> insert into t3(id,name) values(2,'jack'); #添加成功

 

default:设置默认值,如果没有输入则使用默认值,输入值就使用输入的值

mysql> create table t5(id int,name char(5),
gender enum('male','female') default 'male'); # 创建表

mysql> insert into t5(id,name) values(1,'xk'); # 添加记录

mysql> select * from t5; # 查看表记录

MySQL存储引擎与基本数据类型

 

 

 

unique:唯一值,设置了该条件表中不能出现与该数据相同的数据

# 单列唯一
mysql> create table t6(id int unique); # 创建表
mysql> insert into t6 values(1);  # 添加成功
mysql> insert into t6 values(1);  # 报错


#联合唯一
mysql> create table t7(id int, name char(5),unique(id,name));
mysql> insert into t7 values(1,'abc'); # 添加成功
mysql> insert into t7 values(1,'asd'); # 添加成功
mysql> insert into t7 values(2,'asd'); # 添加成功
mysql> insert into t7 values(1,'abc'); # 报错

 

primary key:主键

  单从约束条件上来讲,主键的功能相当于not null + unique(非空且唯一),在此基础上还可以加快数据的查询

  InnoDB引擎规定了一张表有且只有一个主键

  如果在创建表的时候没有设置主键,InnoDB引擎会采用隐藏的字段称为主键,该情况不能加快数据的查询

  如果某个字段拥有非空且唯一的约束条件,并且从上至下是最上面的位置,那么该字段就会自动升级成主键

create table t6(
                    id int,
                    age int not null unique, # 该键会称为主键
                    pwd int not null unique
                );

  结论:我们在创建表的时候应该主动设置一个主键,一般情况都会将表的id字段设置为主键

 

auto_increment:自增

  在设置id字段的时候,一般都是以数字慢慢增加,该约束条件可以帮助我们不需要手动输入id值,系统会自动帮我们记录。

mysql> create table t8(id int primary key auto_increment,
 name varchar(32)); # 创建表

mysql> insert into t8(name) values('xk'),('xzj'),('jrm'); # 添加记录


mysql> select * from t8; # 查看表记录

MySQL存储引擎与基本数据类型

 

 自增的特性

  自增不会因为删除操作而回退

# 删除记录
mysql> delete from t8 where id=1; 
mysql> delete from t8 where id=3;
# 添加记录
mysql> insert into t8(name) values('xk');
mysql> insert into t8(name) values('jrm');
# 查看记录
mysql> select * from t8;

MySQL存储引擎与基本数据类型

 

 重置自增

  重置自增需要使用truncate关键字

# truncate 表名    清空表数据并且重置主键值
truncate t8;
查找记录
select * from t8; # Empty set (0.00 sec) 没有数据
# 添加记录
mysql> insert into t8(name) values('xk');

MySQL存储引擎与基本数据类型

 

 

 

  

上一篇:pandas操作excel


下一篇:jmeter导入csv文件数据乱码,使用函数拼接请求参数解决