MySQL系列-表是如何组成的?

运维少年 运维少年

系列文章说明

MySQL系列文章包含了软件安装、具体使用、备份恢复等内容,主要用于记录个人的学习笔记,主要使用的MySQL版本为5.7.28,服务器系统版本为CentOS 7.5。本章节为数据库表组成详解。

表是如何组成的?

用户可以在指定的数据库中进行数据表的创建,创建时需要指定表的列名、列数据类型、列属性和存储引擎及字符集组成。

表组成 创建语句


表可以使用以下语句进行创建。

create table 表名(列名 列数据类型 列约束 列属性) engine=引擎 charset=字符集;

表组成 存储引擎


数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程)。

0 1 有哪些存储引擎?


如何查看数据库支持的存储引擎?

show engines;

0 2常用的存储引擎


INNODB

  • InnoDB是一个事务型的存储引擎,有行级锁定和外键约束。
    Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统,MySQL运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎不支持FULLTEXT类型的索引,而且它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时需要扫描全表。当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。但是使用行级锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。

  • InnoDB适合使用的场景
    1)经常更新的表,适合处理多重并发的更新请求。

2)支持事务。

3)可以从灾难中恢复(通过bin-log日志等)。

4)外键约束。只有他支持外键。

5)支持自动增加列属性auto_increment。

MyISAM

MyIASM是MySQL默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。

  • 适用场景
    1)不支持事务的设计,但是并不代表着有事务操作的项目不能用MyIsam存储引擎,可以在service层进行根据自己的业务需求进行相应的控制。

2)不支持外键的表设计。

3)查询速度很快,如果数据库insert和update的操作比较多的话比较适用。

4)整天 对表进行加锁的场景。

5)MyISAM极度强调快速读取操作。

6)MyIASM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM也是很好的选择。

注:MyIASM存储引擎在表损坏后,不能主动修复表

如何选择?

1)可靠性高或者要求事务处理,则使用InnoDB。这个是必须的。

2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况指定InnoDB数据引擎的创建。

3)做很多count的计算的选择MyIASM如一些日志,调查的业务表。

4)插入修改不频繁,查询非常频繁的选择MyIASM引擎。

0 3 如何设置、查看、修改存储引擎?


  • 在创建表时,使用engine=xxx的方式指定表存储引擎。
 create table yunweit1(id int) engine=innodb;
  • 如何查看表的存储引擎
show table status from 数据库名称; 

  • 如何修改存储引擎
 alter table yunweit1 engine='myisam';
  • 如何指定默认建表的存储引擎?
    mysql默认的建表存储引擎为innodb,如需修改,可在my.ini文件中添加以下字段:
[mysqld]default-storage-engine=xxx

表组成字符集


0 1MySQL常用的字符集

  • 查看MySQL支持的所有字符集
show charset;

0 2常用的字符集


utf8

utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8字符,如果是超过三个字节的字符会报错。

utf8mb4

uft8mb4是对utf8的补充扩展,uft8mb4可以支持最长四个字节的字符,如emoji字符

©著作权归作者所有:来自51CTO博客作者mb5ffd6f0f39006的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. SQL基础知识V2——SELECT
  2. MySQL系列-DDL语句
  3. PG数据库管理_备份工具的使用
  4. [灾备]数据库容灾方式
  5. Kubernetes中部署MySQL高可用集群
  6. MySQL GUI工具,助力数据库管理
  7. SQL如何使用快照恢复被误删的数据?
  8. 6:VMware Horizon View 8.0-安装数据库服务器
  9. Oracle面试题及答案整理,速速收藏

随机推荐

  1. android tcpdump
  2. Android SQLite存取图像
  3. android 调用draw(canvas) 函数自动退出
  4. Android支持multiDexEnabled,自建脚本编译
  5. android 加载模式
  6. Android(安卓)布局 屏幕适配
  7. Android动态设置控件大小以及设定margin
  8. 【翻译】(26)Android如何绘画视图
  9. Android HAL 开发 (1)
  10. android解析xml文件 Android DOM解析XML