[{"data":1,"prerenderedAt":64},["ShallowReactive",2],{"article-68":3},{"code":4,"msg":5,"data":6,"count":14},200,"查询成功",{"id":7,"title":8,"keywords":9,"description":10,"category_id":11,"content":12,"body_html":13,"thumb_up":14,"clicks":15,"sort":14,"remark":16,"status":17,"is_open":17,"is_deleted":14,"is_top":14,"is_recommend":14,"create_time":18,"update_time":19,"image_id":20,"url":13,"member_id":14,"cate_name":21,"prev":22,"next":25,"tags":28,"words":35,"read_time":36,"comments":17,"cover":37,"relevant":38},68,"MySQL常见知识点整理","mysql","1、数据库三大范式\n\n```bash\n第一范式：每个列都不可再拆分\n第二范式：在第一范式的基础上，非主键列完全依赖于主键，而不能是依赖于主键的一部分\n第三范式：在第二范式的基础上，非主键列只依赖于主键，不依赖于其他非主键\n在设计数据库结构时，要尽量遵守三范式，如果不遵守，必须有足够的理由，比如性能，事实上我们经常会为了性能而妥协数据库的设计\n```\n\n2、数据类型\n\n```bash\n1、整数类型，包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT，分别表示1字节、2字",6,"1、数据库三大范式\n\n```bash\n第一范式：每个列都不可再拆分\n第二范式：在第一范式的基础上，非主键列完全依赖于主键，而不能是依赖于主键的一部分\n第三范式：在第二范式的基础上，非主键列只依赖于主键，不依赖于其他非主键\n在设计数据库结构时，要尽量遵守三范式，如果不遵守，必须有足够的理由，比如性能，事实上我们经常会为了性能而妥协数据库的设计\n```\n\n2、数据类型\n\n```bash\n1、整数类型，包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT，分别表示1字节、2字节、3字节、4字节、8字节整数。任何整数类型都可以加上UNSIGNED属性，表示数据是无符号的，即非负整数。\n长度：整数类型可以被指定长度，例如：INT(11)表示长度为11的INT类型。长度在大多数场景是没有意义的，它不会限制值的合法范围，只会影响显示字符的个数，而且需要和UNSIGNED ZEROFILL属性配合使用才有意义。\n例子，假定类型设定为INT(5)，属性为UNSIGNED ZEROFILL，如果用户插入的数据为12的话，那么数据库实际存储数据为00012。\n\n2、实数类型，包括FLOAT、DOUBLE、DECIMAL。\nDECIMAL可以用于存储比BIGINT还大的整型，能存储精确的小数。\n而FLOAT和DOUBLE是有取值范围的，并支持使用标准的浮点进行近似计算。\n计算时FLOAT和DOUBLE相比DECIMAL效率更高一些，DECIMAL你可以理解成是用字符串进行处理。\n\n3、字符串类型，包括VARCHAR、CHAR、TEXT、BLOB\nVARCHAR用于存储可变长字符串，它比定长类型更节省空间。\nVARCHAR使用额外1或2个字节存储字符串长度。列长度小于255字节时，使用1字节表示，否则使用2字节表示。\nVARCHAR存储的内容超出设置的长度时，内容会被截断。\nCHAR是定长的，根据定义的字符串长度分配足够的空间。\nCHAR会根据需要使用空格进行填充方便比较。\nCHAR适合存储很短的字符串，或者所有值都接近同一个长度。\nCHAR存储的内容超出设置的长度时，内容同样会被截断。\n\n使用策略：\n对于经常变更的数据来说，CHAR比VARCHAR更好，因为CHAR不容易产生碎片。\n对于非常短的列，CHAR比VARCHAR在存储空间上更有效率。\n使用时要注意只分配需要的空间，更长的列排序时会消耗更多内存。\n尽量避免使用TEXT\u002FBLOB类型，查询时会使用临时表，导致严重的性能开销。\n\n4、枚举类型（ENUM），把不重复的数据存储为一个预定义的集合。\n有时可以使用ENUM代替常用的字符串类型。\nENUM存储非常紧凑，会把列表值压缩到一个或两个字节。\nENUM在内部存储时，其实存的是整数。\n尽量避免使用数字作为ENUM枚举的常量，因为容易混乱。\n排序是按照内部存储的整数\n\n5、日期和时间类型，尽量使用timestamp，空间效率高于datetime，\n用整数保存时间戳通常不方便处理。\n如果需要存储微妙，可以使用bigint存储。\n看到这里，这道真题是不是就比较容易回答了。\n```\n\n3、引擎\n\n```bash\nInnoDB：InnoDB引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。\nMyIASM引擎(原本Mysql的默认引擎)：不提供事务的支持，也不支持行级锁和外键。\nMEMORY引擎：所有的数据都在内存中，数据的处理速度快，但是安全性不高。\n```\n\n|                              | MyISAM                                                       | InnoDB                                                       |\n| :--------------------------- | :----------------------------------------------------------- | ------------------------------------------------------------ |\n| 存储结构                     | 每张表被存放在三个文件：\u003Cbr \u002F>frm-表格定义、\u003Cbr \u002F>MYD(MYData)-数据文件，\u003Cbr \u002F>MYI(MYIndex)-索引文件 | 所有的表都保存在同一个数据文件中\u003Cbr \u002F>(也可能是多个文件，或者是独立的表空间文件)\u003Cbr \u002F>InnoDB表的大小只受限于操作系统文件的大小\u003Cbr \u002F>一般为2GB |\n| 存储空间                     | MyISAM可被压缩，存储空间较小                                 | InnoDB的表需要更多的内存和存储，它会在主\u003Cbr \u002F>内存中建立其专用的缓冲池用于高速缓冲数据和索引 |\n| 可移植性\u003Cbr \u002F>备份及恢复     | 由于MyISAM的数据是\u003Cbr \u002F>以文件的形式存储，\u003Cbr \u002F>所以在跨平台的数\u003Cbr \u002F>据迁移中会很方便，\u003Cbr \u002F>在备份和恢复时可单独针对某个表进行操作 | 免费的方案可以是拷贝数据文件、\u003Cbr \u002F>备份 binlog，或者用 mysqldump，\u003Cbr \u002F>在数据量达到几十G的时候就相对痛苦了 |\n| 文件格式                     | 数据和索引是分别存储的，数据`.MYD`，索引`.MYI`               | 数据和索引是集中存储的，`.ibd`                               |\n| 记录存储顺序                 | 按记录插入顺序保存                                           | 按主键大小有序插入                                           |\n| 外键                         | 不支持                                                       | 支持                                                         |\n| 事务                         | 不支持                                                       | 支持                                                         |\n| 锁支持                       | 表级锁定                                                     | 行级锁定、表级锁定，锁定力度小并发能力高                     |\n| SELECT                       | MyISAM更优                                                   |                                                              |\n| INSERT、\u003Cbr \u002F>UPDATE、DELETE |                                                              | InnoDB更优                                                   |\n| select count(*)              | myisam更快，因为myisam内部维护\u003Cbr \u002F>了一个计数器，可以直接调取。 |                                                              |\n| 索引的实现方式               | B+树索引，myisam 是堆表                                      | B+树索引，Innodb 是索引组织表                                |\n| 哈希索引                     | 不支持                                                       | 支持                                                         |\n| 全文索引                     | 支持                                                         | 不支持                                                       |\n\n4、MyISAM索引与InnoDB索引的区别\n\n```bash\nInnoDB索引是聚簇索引，MyISAM索引是非聚簇索引。\nInnoDB的主键索引的叶子节点存储着行数据，因此主键索引非常高效。\nMyISAM索引的叶子节点存储的是行数据地址，需要再寻址一次才能得到数据。\nInnoDB非主键索引的叶子节点存储的是主键和其他带索引的列数据，因此查询时做到覆盖索引会非常高效。\n```\n\n5、InnoDB引擎的4大特性\n\n```bash\n插入缓冲（insert buffer)\n二次写(double write)\n自适应哈希索引(ahi)\n预读(read ahead)\n```\n\n6、存储引擎选择\n\n```bash\n如果没有特别的需求，使用默认的Innodb即可。\nMyISAM：以读写插入为主的应用程序，比如博客系统、新闻门户网站。\nInnodb：更新（删除）操作频率也高，或者要保证数据的完整性；并发量高，支持事务和外键。比如OA自动化办公系统。\n```\n",null,0,529,"",1,"2020-03-23 09:59:07","2026-04-19 15:06:21",137,"Mysql",{"id":23,"title":24},67,"PHP面试题之代码设计类",{"id":26,"title":27},69,"PHP常见知识点整理",[29,32],{"id":30,"name":31},26,"MySQL",{"id":33,"name":34},62,"面试",2211,5,"https:\u002F\u002Ftp.myong.top\u002Fstorage\u002Farticle\u002Fe9\u002Fd3ec2fd731439d21a2d4cc8746b39f.jpg",[39,44,49,54,59],{"id":40,"title":41,"create_time":42,"description":43},90,"Redis常见使用场景","2020-06-17 16:09:42","Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库，并提供多种语言的API。本篇文章，主要介绍利用PHP使用Redis，主要的应用场景。",{"id":45,"title":46,"create_time":47,"description":48},94,"客户端连接MySQL8提示 caching-sha2-password 问题","2020-10-19 10:55:26","在安装mysql8的时候如果选择了密码加密，之后用客户端连接比如navicate，会提示客户端连接caching-sha2-password,是由于客户端不支持这种插件，可以通过如下方式进行修改：",{"id":50,"title":51,"create_time":52,"description":53},87,"MySQL中InnoDB和MyISAM区别","2020-06-12 17:11:21","InnoDB具有事务，支持4个事务隔离级别，回滚，崩溃修复能力和多版本并发的事务安全，包括ACID.如果应用中需要执行大量的INSERT或UPDATE操作，则应该使用InnoDB,这样可以提高多用户并发操作的性能。MyISAM管理非事务表，提供高速存储和检索，以及全文搜索能力，如果应用中需要执行大量的SELECT查询，那么MyISAM是更好的选择。",{"id":55,"title":56,"create_time":57,"description":58},88,"MySQL实现循环插入千万级数据","2020-06-12 17:56:22","对于一些数据量较大的系统，数据库面临的问题除了查询效率低下，还有就是数据入库时间长。特别像报表系统，可能每天花费在数据导入上的时间就会长达几个小时之久。因此，优化数据库插入性能是很有意义的。",{"id":60,"title":61,"create_time":62,"description":63},86,"MySQL查询表结构命令","2020-06-09 11:30:00","###### MySQL查询表结构命令\n\n###### 1、查询表结构\n\n主要显示字段类型主键是否允许为空等\n\n```mysql\nDESC 表名;\n```\n\n结果显示\n\n| Field | Type         | Null | Key  | Default | Extra          |\n| :---- | ------------ | ---- | ---- | ------- | -------------- |\n| id    | int(11)      | NO   | P",1783431661787]