存储引擎:
在我们日常生活中有许多的文件格式,例如mp4视频、mp3音频、jpg图片以及txt文字格式,我们处理这些格式都有其特殊的处理机制和特殊方法,针对不同的数据我们应该有不同的存储方式,这种处理机制就叫做存储引擎。
Mysql的存储机制:Mysql主要有一下几种机制,他们的作用和功能都有一定程度上的差异
Innodb
是MySQL5.5版本及之后默认的存储引擎
存储数据更加的安全
myisam
是MySQL5.5版本之前默认的存储引擎
速度要比Innodb更快 但是我们更加注重的是数据的安全
memory
内存引擎(数据全部存放在内存中) 断电数据丢失
blackhole
无论存什么,都立刻消失(黑洞)
我们可以通过show engines;命令来查询我们的存储机制。
如何创建一个表?
接下来我们来了解一下如何创建一个表
create table 表名(
字段名 类型(宽度) 约束条件,
字段名 类型(宽度) 约束条件
)
ps:1.在同一张表内字段名是不能重复的。例如只能存在一个name
2.字段名和字段的类型是关系型的基础是必须存在的,而约束条件和宽度就不是必须的了
3.创建的最后一行不能有逗号
既然我们提到了宽度的概念,我们就来了解一下什么是宽度,
宽度:一般情况下指的是对存储数据的限制
针对不同的版本会出现不同的效果
5.6版本默认没有开启严格模式 规定只能存一个字符你给了多个字符,那么会自动帮你截取
5.7版本及以上或者开启了严格模式 那么规定只能存几个 就不能超,一旦超出范围立刻报错
严格模式即保证了数据的安全性同时也保证了数据库任务的量的减少。
约束条件一: null not null不能插入null非空
create table t8(id int,name char not null);
宽度和约束条件到底是什么关系
宽度是用来限制数据的存储
约束条件是在宽度的基础之上增加的额外的约束
数据类型:在mysql中我们必须声明数据的类型,所以数据类型是必要的。下面我们来介绍几种常见的数据类型。
整形:整数类型,大多数语言的学习都是从整形开始的,所以我们认识sql数据库的数据类型也从整形开始,首先说整形的分类
在sql中整形有TINYINT SMALLINT MEDUIMINT INT BIGINT几种,我们比较常用的是tinyint和int两种类型我们也来介绍这两种
tinyint默认情况是带符号的,超出限制部分只存最大的值
在这里引入第二个约束条件无符号,unsigned 条件放在类型后面来进行声明。
int类型也是有符号的,针对整形来说默认都是带符号的,int类型的最大值(也可以看作是取值范围)要大于tinyint
我们发现在创建这种类型的时候是以 类型+()+约束条件来实现的那么括号里面的内容究竟是什么?
只有整型括号里面的数字不是表示限制位数
id int(8)
如果数字没有超出8位 那么默认用空格填充至8位
如果数字超出了8位 那么有几位就存几位(但是还是要遵守最大范围)
针对整型字段 括号内无需指定宽度 因为它默认的宽度以及足够显示所有的数据了。
浮点类型:因为整形的精度无法满足我们的需求,于是我们有了浮点数的概念。在sql语言中浮点类型有以下几种
float(255,30) # 总共255位 小数部分占30位
double(255,30) # 总共255位 小数部分占30位
decimal(65,30) # 总共65位 小数部分占30位
在精度上来说float < double < decimal,我们就需要结合实际情况来使用。
在介绍下一个数据类型之前我们先来了解一个方法,严格模式
如何查看严格模式
show variables like "%mode";
模糊匹配/查询
关键字 like
%:匹配任意多个字符
_:匹配任意单个字符
修改严格模式
set session 只在当前窗口有效
set global 全局有效
set global sql_mode = 'STRICT_TRANS_TABLES';
修改完之后 重新进入服务端即可,这里要强调的是修改并不是添加而是覆盖,所以你再次修改的时候应该将之前的修改内容也加上。
回到正题接下来介绍字节类型,在sql语句中字符类型我们常用的有两种char和varchar
char
定长
char(4) 数据超过四个字符直接报错 不够四个字符空格补全
varchar
变长
varchar(4) 数据超过四个字符直接报错 不够有几个存几个
我们来对比一下两个字符类型
char
缺点:浪费空间
优点:存取都很简单
直接按照固定的字符存取数据即可
jason egon alex wusir tank
存按照五个字符存 取也直接按照五个字符取
varchar
优点:节省空间
缺点:存取较为麻烦
1bytes+jason 1bytes+egon 1bytes+alex 1bytes+tank
存的时候需要制作报头
取的时候也需要先读取报头 之后才能读取真实数据
以前基本上都是用的char 其实现在用varchar的也挺多。
时间类型:
分类
date:年月日
datetime:年月日时分秒
time:时分秒
Year:年份
最后我们来了解一下枚举和集合类型:
枚举(enum) 多选一
集合(set) 多选多
create table stu (
hobby enum("sex","game")
)
在多种情况选一个,如果不在范围或者多选会报错
create table stu(
hobby set("sex","game")
)
多选多或者多选一,如果不在范围内会报错