[MySQL数据库之表的详细操作:存储引擎、表介绍、表字段之数据类型]
[MySQL数据库之表的详细操作:存储引擎、表介绍、表字段之数据类型]
表的详细操作
存储引擎
mysql中建立的库======>文件夹
库中建立的表======>文件
用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:
处理图片用jpg、png
处理视频用mp4
处理音频用mp3
处理文本用txt
数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎engine
表的本质就是文件,文件用来存储数据的,某一种格式的表,就相当于某一种格式的文件,每一种不同类型的文件,都有自己专门的存储机制。存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)
mysql数据库管理软件会为每一种表类型定制专门的处理代码,相当于一段小的程序
show engines\G #查看所有支持的存储引擎
show variables like 'storage_engine%'; #查看正在使用的存储引擎
常见的存储引擎:
myisam 存储引擎:
拥有较高的插入,查询速度,但不支持事务
innodb 存储引擎:
Mysql的默认数据库,事务型数据库的首选引擎,支持ACID事务,支持行级锁定
blackhole 存储引擎:
黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继
memory 存储引擎:
所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和
数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失
"""
创建表t1:
create table t1(id int)engine=innodb;
以后处理t1表的时候就有一个专门的程序叫innodb存储引擎
innodb存储引擎:本质就是一段处理程序
等同于:
文件.mp4==========》 视频播放器
"""
MySQL逻辑架构图
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySQL最
重要、最与众不同的特性就是它的存储引擎架构,这种架构将:查询处理、其他系统任务、数据的存储与提取
三部分分离。所以,带来的好处就是可以在使用时根据性能、特性,以及其他需求来选择数据存储方式。用户
也可以根据自己的需要编写自己的存储引擎
存储引擎架构分为三层,自上而下,分为第一层:连接层;第二层:服务层;第三层:引擎层。
1.连接层:
MySQL的最上层是连接服务,引入了线程池的概念,允许多台客户端连接。
主要工作是:连接处理、授权认证、安全防护等。
连接层为通过安全认证的接入用户提供线程,同样,在该层上可以实现基于SSL 的安全连接。
2.服务层:
服务层用于处理核心服务,如标准的SQL接口、查询解析、SQL优化和统计、全局的和引擎依赖的缓存与缓冲器
等等。所有的与存储引擎无关的工作,如过程、函数等,都会在这一层来处理。在该层上,服务器会解析查询并
创建相应的内部解析树,并对其完成优化,如确定查询表的顺序,是否利用索引等,最后生成相关的执行操作。
如果是SELECT语句,服务器还会查询内部的缓存。如果缓存空间足够大,这样在解决大量读操作的环境中能够
很好的提升系统的性能。
3.引擎层:
存储引擎层,存储引擎负责实际的MySQL数据的存储与提取,服务器通过API 与 存储引擎进行通信。不同的存
储引擎功能和特性有所不同,这样可以根据实际需要有针对性的使用不同的存储引擎。
存储引擎实验
create database day02;
use day02;
create table t1(id int)engine=myisam;
create table t2(id int)engine=innodb;
create table t3(id int)engine=blackhole;
create table t4(id int)engine=memory;
insert t1 values(111);
insert t2 values(222);
insert t3 values(333);
insert t4 values(444);
表介绍
表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段。id,name,qq,age称为字段,其余的,一行内容称为一条记录
修改表详细操作
语法:
1. 修改表名
ALTER TABLE 表名
RENAME 新表名;
2. 增加字段
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…],
ADD 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…] FIRST;
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
3. 删除字段
ALTER TABLE 表名
DROP 字段名;
4. 修改字段
ALTER TABLE 表名
MODIFY 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
示例:
1. 修改存储引擎
mysql> alter table service
-> engine=innodb;
2. 添加字段
mysql> alter table student10
-> add name varchar(20) not null,
-> add age int(3) not null default 22;
mysql> alter table student10
-> add stu_num varchar(10) not null after name; //添加name字段之后
mysql> alter table student10
-> add sex enum('male','female') default 'male' first; //添加到最前面
3. 删除字段
mysql> alter table student10
-> drop sex;
mysql> alter table service
-> drop mac;
4. 修改字段类型modify
mysql> alter table student10
-> modify age int(3);
mysql> alter table student10
-> modify id int(11) not null primary key auto_increment; //修改为主键
5. 增加约束(针对已有的主键增加auto_increment)
mysql> alter table student10 modify id int(11) not null primary key auto_increment;
ERROR 1068 (42000): Multiple primary key defined
mysql> alter table student10 modify id int(11) not null auto_increment;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
6. 对已经存在的表增加复合主键
mysql> alter table service2
-> add primary key(host_ip,port);
7. 增加主键
mysql> alter table student1
-> modify name varchar(10) not null primary key;
8. 增加主键和自动增长
mysql> alter table student1
-> modify id int not null primary key auto_increment;
9. 删除主键
a. 删除自增约束
mysql> alter table student10 modify id int(11) not null;
b. 删除主键
mysql> alter table student10
-> drop primary key;
复制表
复制表结构+记录 (key不会复制: 主键、外键和索引)
mysql> create table new_service select * from service;
只复制表结构
mysql> select * from service where 1=2; //条件为假,查不到任何记录
Empty set (0.00 sec)
mysql> create table new1_service select * from service where 1=2;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> create table t4 like employees;
表字段之数据类型
存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的
1. 数字:
整型:tinyinit int bigint
作用:存储年龄,等级,id,各种号码等
浮点型:
定点数类型:decimal
浮点型:float double
作用:存储薪资、身高、体重、体质参数等
float :在位数比较短的情况下不精准
double :在位数比较长的情况下不精准
0.000001230123123123
存成:0.000001230000
decimal:(如果用小数,则用推荐使用decimal)
精准
内部原理是以字符串形式去存
2. 字符串:
char(10):简单粗暴,浪费空间,存取速度快,用于表示固定长度的字符串
root存成root000000
varchar:精准,节省空间,存取速度慢,用于变长的字符串
sql优化:创建表时,定长的类型往前放(比如性别),变长的往后放(比如地址或描述信息)
ps:长度限制最高255个字符,超了就把文件路径存放到数据库中。
比如图片,视频等找一个文件服务器,数据库中只存路径或url。
注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度
更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方
面的因素,以求达到最佳的平衡
3. 时间类型:year date time datetime timestamp
作用:存储用户注册时间,文章发布时间,员工入职时间,出生时间,过期时间等
最常用:datetime
year: 年
YYYY(1901/2155)
date: 年月日
YYYY-MM-DD(1000-01-01/9999-12-31)
time: 时分秒
HH:MM:SS('-838:59:59'/'838:59:59')
datatime: 年月日时分秒
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 年某时)
4. 枚举类型与集合类型
字段的值只能在给定范围中选择,如单选框,多选框
enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female
set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)
数字类型示例
整型:(唯有整型指的宽度是显示宽度,不是存储宽度)
create table t8(id int(1)); -- (1)指的是打印时候的显示宽度
insert t8 values(1212312312312312312);
create table t9(id int); -- 整型有默认宽度,不需要指定存储宽度
浮点型:
create table t10(x float(255,30));
create table t11(y double(255,30));
create table t12(z decimal(65,30));
insert t10 values(1.1111111111111111111111111111111);
insert t11 values(1.1111111111111111111111111111111);
insert t12 values(1.1111111111111111111111111111111);
时间类型示例
create table student(
id int,
name varchar(16),
birth date,
class_time time,
reg_time datetime,
born_year year
);
insert student values
(1,'egon',"1993-01-23","08:30:00","2020-3-23 09:30:21","1993");
create table t13(x datetime);
create table t14(x timestamp);
create table t15(id int,name varchar(16),commit_time timestamp);
insert t15(id,name) values(1,'今天天气真好');
update t15 set name = "今天阳光明媚" where id=1;
字符类型示例
# (4)代表的是字符个数不是字节,表示存储宽度最大为4个
create table t16(name char(4));
create table t17(name varchar(4));
insert t16 values("你好啊哈哈");
insert t17 values("你好啊哈哈");
insert t16 values("你"); -- 会存成 "你 "
insert t17 values("你"); -- 会存成 "你"
|a |ab |abc |abcd|
|1byte+a|1byte+ab|1byte+abc|1byte+abcd|
枚举与集合类型示例
create table t18(
id int,
name varchar(16),
gender enum("男","女","未知"),
hobbies set("play","music","read","movie")
);
insert t18 values
(1,"egon","男","play,music");
枚举类型(enum多选一)
An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.)
示例:
create table aaa (name VARCHAR(40),size ENUM('x-small', 'small', 'medium', 'large', 'x-large'));
insert into aaa values (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');
集合类型(set多选多)
A SET column can have a maximum of 64 distinct members.
示例:
create table bbb (col set('a', 'b', 'c', 'd'));
insert into bbb values ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
[MySQL数据库之表的详细操作:存储引擎、表介绍、表字段之数据类型]的更多相关文章
- [MySQL数据库之记录的详细操作:增、改、删、单表查询、多表查询]
[MySQL数据库之记录的详细操作:增.改.删.单表查询.多表查询] 记录详细操作 增.删.改 增: insert t1(字段1,字段2,字段3) values (值1,值2,值3), (值1,值2, ...
- MySQL数据库之索引、事务、存储引擎详细讲解
一.索引 1.1 索引的概念 索引是一个排序的列表,存储着索引值和这个值所对应的物理地址 无须对整个表进行扫描,通过物理地址就可以找到所需数据 (数据库索引类似书中的目录,通过目录就可以快速査找所需信 ...
- MySQL数据库~~~~~存储引擎
1. InnoDB InnoDB引擎特点: 1.支持事务:支持4个事务隔离界别,支持多版本读. 2.行级锁定(更新时一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响. 3.读写 ...
- day38:MySQL数据库之约束&索引&外键&存储引擎
目录 part1:数据类型 part2:约束 part3:主键索引 PRI &唯一索引 UNI &普通索引 MUL part4:外键:foreign key part5:在外键中设置联 ...
- Mysql数据库的(行记录)详细操作
在Mysql管理软件中, 可以通过sql语句中的dml语言来实现数据的操作, 包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据的删除 使用SELECT查询数据 ...
- InnoDB存储引擎表的逻辑存储结构
1.索引组织表: 在InnoDB存储引擎中,表都是依照主键顺序组织存放的.这样的存储方式的表称为索引组织表,在innodb存储引擎表中,每张表都有主键.假设创建的时候没有显式定义主键,则Inn ...
- MySQL数据库(2)- 库的操作、表的操作、数据的操作、存储引擎的介绍
一.库的操作 1.系统数据库 执行如下命令,查看系统数据库: mysql> show databases; 参数解释: information_schema: 虚拟库,不占用磁盘空间,存储的是数 ...
- 二 mysql库表的详细操作
目录 1.库操作 1.创建数据库 2.数据库相关操作 2.表操作 1.存储引擎 2.表介绍 3.创建表 4.查看表结构 5.MySQL的基础数据类型 6.表的完整性约束 7.修改表 alter tab ...
- day 36 MySQL的库、表的详细操作
MySQL的库.表的详细操作 MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset u ...
随机推荐
- restful设计风格
restful是一种软件设计风格,并不是标准,它只是提供了一组设计原则和约束条件. ① restful 提倡面向资源编程,url接口尽量要使用名词,不要使用动词 ② 在url中可以体现版本号 ③可以根 ...
- 用jar命令打包war远程部署
最近在看jboss的相关漏洞,用jmx-console进行war远程部署的时候碰到一个jsp转war的问题,研究了半天,记录一下免得搞忘了. 一开始网上是说的直接把jsp文件压缩成zip,再把后缀名改 ...
- [Fundamental of Power Electronics]-PART II-7.交流等效电路建模-7.1 引言
7.1 引言 变换器系统总是需要反馈的.例如,在典型的DC-DC变换器应用中,无论输入电压\(V_{g}(t)\)和输出有效负载\(R\)如何变化,都必须使输出电压\(v(t)\)保持恒定.这是通过构 ...
- 使用Vanilla框架制作时间倒数器 ——JavaScript
一.制作时间倒数器要求以及思路: 1.首先创建三个输入字段,分别是小时,分钟和秒,以及"开始"按钮.输入的初始值必须为0h 5m 0s.当用户输入小时,分钟和秒并单击" ...
- 消息中间件rabbitMQ
1 为什么使用消息队列啊? 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这 ...
- 网络编程NIO之Reactor线程模型
目录 单Reactor线程模型 基于工作线程的Reactor线程模型 多Reactor线程模型 多Reactor线程模型示例 结束语 上篇文章中写了一些NIO相关的知识以及简单的NIO实现示例,但是示 ...
- Arch! 从安装开始
Arch! 从安装开始 事实上Arch的安装Arch Wiki Installation Guide,已经非常详细了 但是初次面对这些东西时肯定非常迷茫,根本不知道这些东西是在干嘛?为什么要这么干? ...
- IDEA 2021版新建Maven、TomCat工程
目录 2021版IDEA中Maven.TomCat配置 1.基于Webapp创建一个Maven项目 1.1 新建项目模板 1.2 指定名称 1.3 指定信息 1.4 指定Maven地址 1.5 构建成 ...
- Jsoup-基于Java实现网络爬虫-爬取笔趣阁小说
注意!仅供学习交流使用,请勿用在歪门邪道的地方!技术只是工具!关键在于用途! 今天接触了一款有意思的框架,作用是网络爬虫,他可以像操作JS一样对网页内容进行提取 初体验Jsoup <!-- Ma ...
- ThnikPHP3.2 学习链接整理
ThnikPHP3.2 学习链接整理 ThinkPHP3.2.3 U()方法的使用总结 看云手册 ThinkPHP3.2完全开发手册 TP3.2单字母函数 TP3.x中 M方法和D方法的区别