美文网首页PHP开发SQL极简教程 · MySQL · MyBatis · JPA 技术笔记 教程 总结MySQL
MySQL进阶之字符集、索引、视图、存储过程、触发器、分布式事务

MySQL进阶之字符集、索引、视图、存储过程、触发器、分布式事务

作者: 怀老师 | 来源:发表于2020-04-11 22:02 被阅读0次

字符集

  怎么选择合适的字符集?目前建议都是使用utf8mb4,可以有效兼容emoji表情。

  MySQL的字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念。

  校对规则的命名:

         1. 以_ci结尾(大小写不敏感)

         2. 以_cs结尾(大小写敏感)

         3.以_bin结尾(二元,比较是基于字符编码的值)

索引

    旧版的MyISAM和5.6.24以上InnoDB引擎都支持全文索引

    最左匹配原则,使用索引的最左前缀来查找行。

    设计索引的原则:

    1.索引最适合出现的列为where子句中的列,或者连接子句中指定的列。

    2.使用唯一索引,索引的数据有区分度。

    3.利用最左前缀。

    4.不要过度索引。索引过度会占用磁盘空间并降低写操作的性能。

    5.InnoDB存储引擎的表,记录默认会按照一定的顺序保存,所以尽量自己指定主键,提高查询的效率。

    Hash 索引和Btree索引

       1. HASH仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询。

       2. Btree可支持模糊查询和范围查询,除了like以%起头的。

视图

    从查询结果中创建一个虚拟表来使用。

存储过程:

    封装一段SQL操作到脚本中,通过CALL执行。

    存储过程的好处在于处理逻辑都封装在数据库端,调用者不需要了解中间的处理逻辑,一旦逻辑发生僧变化,只需要修改存储过程即可,对调用者没有影响。

    这里还是建议逻辑部分在应用端编写。

触发器:

    是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。可以协助应用在数据库端确保数据的完整性。

    不过这个trigger也可以在应用端完成,更易读且易维护。

分布式事务

    资源管理器(RM)和事务管理器(TM)的通讯,由TM链接各个RMs,告知要执行的命令。

    要考虑到通讯中断以及数据完整性,和某个分支出现故障的解决。

SQL的安全问题

    PHP可以使用PDO的参数绑定,避免拼接SQL的出现。

    pdo是一个php的扩展,为php访问数据库定义了一个轻量级的一致接口。

SQL Mode及相关问题

    STRICT_TRANS_TABLES 适用于事务表和非事务表,它是严格模式,不允许非法日期,也不允许超过字段长度的值插入字段中,对于插入不正确的值给出错误而不是警告.

    严格模式下,对sql的要求更高,比如group by的数据必须出现在select 里面。

相关文章

网友评论

    本文标题:MySQL进阶之字符集、索引、视图、存储过程、触发器、分布式事务

    本文链接:https://www.haomeiwen.com/subject/gdvpmhtx.html