多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] 查看mysql中支持的全部存储引擎:show engines # innodb 他会把需要的热数据和索引缓存在内存中 数据库每个数据表的数据设计三方面信息:表结构、数据、索引 技术特点:支持事务、行级锁定、外键 ## 表结构,数据,索引的物理储存 表结构文件 通过这个命令查看mysql的一些路径 ~~~ show variables like '%dir%'; ~~~ 然后到库的文件夹下就可以看到有 .frm文件就是innodb 所有innodb表的数据和索引信息都存储在一个文件中 ~~~ show variables like 'innodb_file_per_table'; ~~~ 通过这个命令查看每个innodb表的 数据和索引会不会创建单独的文件存储,on就是会 设置变量,使得每个innodb表有独特的数据和索引 存储文件: ~~~ set global innodb_file_per_table=1; ~~~ .ibd 文件就是数据和索引都有独立的存储位置 ## 数据存取顺序 innodb表数据的存储是按照主键的顺序排列每个写入的数据。 该特点决定了该类型表的写入操作较慢。 ## 事务,外键 该类型数据表支持事务、外键 事务:把许多写入(增、改、删)的sql语句捆绑在一起,要么执行、要么不执行 事务经常用于与“钱”有关的方面。 四个特性:原子、一致、持久、隔离 具体操作: ~~~ start transaction; 许多写入sql语句 sql语句有问题 rollback;回滚 commit;提交 rollback和commit只能执行一个 ~~~ 外键:两个数据表A和B,B表的主键是A表的普通字段,在A表看这个普通的字段就是该表的“外键”,外键的使用有”约束”。 约束:以上两个表,必须先写B表的数据,再写A表的数据 并且 A表的外键取值必须来之B表的主键id值,不能超过其范围。 真实项目里边很少使用“外键”,因为有约束 ## 并发性 该类型表的并发性非常高 多人同时操作该数据表 为了操作数据表的时候,数据内容不会随便发生变化,要对信息进行“锁定” 该类型锁定级别为:行锁。只锁定被操作的当前记录。 # Myisam ## 结构,数据,索引独立存储 ~~~ *.frm:表结构文件 *.MYD:表数据文件 *.MYI:表索引文件 ~~~ 该类型的数据表 表结构、数据、索引 都有独立的存储文件 每个myisam数据表的 结构、数据、索引 都有独立的存储文件 特点:独立的存储文件可以单独备份、还原。 数据稳定后可以压缩数据信息 支持全文索引 ## 数据存储顺序 myisam表数据的存储是按照自然顺序排列每个写入的数据。 该特点决定了该类型表的写入操作较快。 ## 并发性 该类型并发性较低 该类型的锁定级别为:表锁 ## 压缩机制 如果一个数据表的数据非常多,为了节省存储空间,需要对该表进行压缩处理。 复制当前数据表的数据: 开始压缩数据表的数据 //这里表名要带路径的F:\phpstudy\MySQL\data\php2\order3 表名order3前面带路径 压缩工具:myisampack.exe 表名 重建索引:myisamchk.exe -rq 表名 解压缩工具:myisamchk.exe --unpack 表名 ![](https://box.kancloud.cn/726875fb98837d3ed82e081799111f31_1076x316.jpg) 或者 ~~~ /usr/local/mysql/bin/myisampack myisam.MYI # 中间可以跟参数-b -f ~~~ order3数据表有压缩,但是索引没有了:要重建索引 ![](https://box.kancloud.cn/00b7620b78a5f5479f41c92c1b8c2bdf_1078x202.jpg) 索引重建完毕 出现情况: 压缩的数据表是只读表,不能写信息: 压缩的数据表有特点:不能频繁的写入操作,只是内容固定的数据表可以做压缩处理 存储全国地区信息的数据表 收货地址信息数据表 如果必须要写数据:就解压该数据表,写入数据,再压缩 解压order3数据表,使得其可以写入数据: (解压同时索引自动重建) ![](https://box.kancloud.cn/506fe926a012eabc27d4027421b69b60_1080x174.jpg) 执行flush操作,更新解压后的数据:flush table 表名; //这边直接写表名就可以不带路径 该操作同时会删除order3.MYD.00996D46.deleted的压缩备份文件 innodb存储引擎:适合做修改、删除 Myisam存储引擎:适合做查询、写入 # Archive 归档型存储引擎,该引擎只有写入、查询操作,没有修改、删除操作 比较适合存储“日志”性质的信息。 特点: * 以zlib对表数据进行压缩,磁盘I/O更少 * 数据存储在ARZ为后缀的文件中 * 只允许在自增ID列上加索引 # memory 内存型存储引擎,操作速度非常快速,比较适合存储临时信息, 服务器断电,给存储引擎的数据立即丢失,表结构存在,表结构存在磁盘,表数据存在内存中。 支持hash索引和BTree索引,如果是等值查询hash索引快,BTree索引范围查找 所有字段都为固定长度varchar(10)=char(10) 就算写varchar也是会变成定长的char 不支持BLOG和TEXT等大字段 使用表级锁 不能存储大量数据,最大大小由max_heap_table_size参数决定,对已经存在的memory类型的表不生效,除非重建 ## 使用场景 * 用于查找或者映射表,例如邮编和地区的对应表 * 用于保存数据分析中产生的中间表 * 用于缓存周期性聚合数据的结果表 * 数据容易丢失,要求数据可再生 ## 容易混合的概念 memory存储类型的表 vs 临时表 临时表(2种,都是只对当前session可见) 1. 系统临时使用的表(超过限制使用myisam临时表,未超限制使用memory表) 2. create temporary teble 建立的临时表 memory类型的表都是可见的 # 选择引擎 ## Myisam和innodb Myisam崩溃后修复能力没有innodb好 网站大多数情况下“读和写”操作非常多,适合选择Myisam类型 例如 dedecms、phpcms内容管理系统(新闻网站)、discuz论坛 网站对业务逻辑有一定要求(办公网站、商城)适合选择innodb Mysql5.5默认存储引擎都是innodb的 Myisam和Innodb存储引擎特点 ### Myisam 表结构、数据、索引 分别有对应的存储文件 写入数据非常快,安装自然顺序写入数据 数据稳定后可以压缩数据信息 支持全文索引 并发性:少低,锁表操作 ### Innodb 表结构有单独存储文件,数据和索引共享同一个存储文件(ibdata1、*.ibd) ibdata1 是全部innodb表的数据和索引的存储文件 *.ibd 是每个innodb表的数据和索引的存储文件 支持事务和外键的 并发性:好,操作数据表时锁定记录(行) Mysql5.6版本有支持全文索引