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

技术分享  / 倒序浏览   ©

#楼主# 2020-4-12

跳转到指定楼层

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
字符集

  怎么选择合适的字符集?现在建议都是使用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 里面。
分享淘帖
回复

使用道具

您的回复是对作者最大的奖励

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于作者

腊月初44

新手猿

  • 主题

    6

  • 帖子

    6

  • 关注者

    0

Archiver|手机版|小黑屋|云大陆 | 赣ICP备18008958号-4|网站地图
Powered by vrarz.com!  © 2019-2020版权所有云大陆