zoukankan      html  css  js  c++  java
  • 17-MySQL查询字段区分大小写?innodb事务与日志的实现?

    • MySQL查询字段区不区分大小写?

    • MySQL innodb的事务与日志的实现方式?


    MySQL查询字段区不区分大小写?

    答案是不区分

    如何解决需要区分英文大小写的场景

    例如登录用户为admin,此时填写ADMIN也能登录,如果用户名需要区分大小写,你的做法是什么?

    解决方案一

    MySQL默认的字符检索策略:utf8_general_ci,表示不区分大小写。

    可以使用utf8_general_cs,表示区分大小写,也可以使用utf8_bin,表示二进制比较,同样也区分大小写 。

    注意:在Mysql5.6.10版本中,不支持utf8_genral_cs

    创建表时,直接设置表的collate属性为utf8_general_cs或者utf8_bin;如果已经创建表,则直接修改字段的Collation属性为utf8_general_cs或者utf8_bin

    解决方案二

    直接修改sql语句,在要查询的字段前面加上binary关键字

    -- 在每一个条件前加上binary关键字
    select * from user where binary username = 'admin' and binary password = 'admin';
    
    -- 将参数以binary('')包围
    select * from user where username like binary('admin') and password like binary('admin');

    MySQL innodb的事务与日志的实现方式

    有多少种日志

    • 错误日志:记录出错信息,也记录一些警告信息或者正确的信息。

    • 查询日志:记录所有对数据库请求的信息,不论这些请求是否得到了正确的执行。

    • 慢查询日志:设置一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询的日志文件中。

    • 二进制日志:记录对数据库执行更改的所有操作。

    • 中继日志:中继日志也是二进制日志,用来给slave 库恢复

    • 事务日志:重做日志redo和回滚日志undo

    事物的4种隔离级别

    • 读未提交(RU)

    • 读已提交(RC)

    • 可重复读(RR)

    • 串行

    事务是如何通过日志来实现的,说得越深入越好

    事务日志是通过redo和innodb的存储引擎日志缓冲(Innodb log buffer)来实现的,当开始一个事务的时候,会记录该事务的lsn(log sequence number)号;

    当事务执行时,会往InnoDB存储引擎的日志缓存里面插入事务日志;

    当事务提交时,必须将存储引擎的日志缓冲写入磁盘(通过innodb_flush_log_at_trx_commit来控制),也就是写数据前,需要先写日志。这种方式称为“预写日志方式”

  • 相关阅读:
    670. Maximum Swap
    653. Two Sum IV
    639. Decode Ways II
    636. Exclusive Time of Functions
    621. Task Scheduler
    572. Subtree of Another Tree
    554. Brick Wall
    543. Diameter of Binary Tree
    535. Encode and Decode TinyURL
    博客园自定义背景图片
  • 原文地址:https://www.cnblogs.com/no-celery/p/13671323.html
Copyright © 2011-2022 走看看