zoukankan      html  css  js  c++  java
  • Mysql 知识(1)

    1. 请简洁地描述下MySQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?

    答:

    SQL标准定义的四个隔离级别为:read uncommited,read committed,repeatable read,serializable;

    不同的隔离级别有不同的现象。主要有下面3种现在:

    1、脏读(dirty read):一个事务可以读取另一个尚未提交事务的修改数据。

    2、非重复读(nonrepeatable read):在同一个事务中,同一个查询在T1时间读取某一行,在T2时间重新读取这一行时候,这一行的数据已经发生修改,可能被更新了(update),也可能被删除了(delete)。

    3、幻像读(phantom read):在同一事务中,同一查询多次进行时候,由于其他插入操作(insert)的事务提交,导致每次返回不同的结果集。

    不同的隔离级别有不同的现象,并有不同的锁定/并发机制,隔离级别越高,数据库的并发性就越差,4种事务隔离级别分别表现的现象如下表:

    隔离级别 脏读 非重复读 幻像读
    read uncommitted 允许 允许 允许
    read committed   允许 允许
    repeatable read     允许
    serializable      

    2、表中有大字段X(例如:text类型),且字段X不会经常更新,以读为为主,请问

    (1)、您是选择拆成子表,还是继续放一起;

    (2)、写出您这样选择的理由。

    答:拆带来的问题:连接消耗 + 存储拆分空间;不拆可能带来的问题:查询性能;
    如果能容忍拆分带来的空间问题,拆的话最好和经常要查询的表的主键在物理结构上放置在一起(分区) 顺序IO,减少连接消耗,最后这是一个文本列再加上一个全文索引来尽量抵消连接消耗
    如果能容忍不拆分带来的查询性能损失的话:上面的方案在某个极致条件下肯定会出现问题,那么不拆就是最好的选择

    3、MySQL中InnoDB引擎的行锁是通过加在什么上完成(或称实现)的?为什么是这样子的?

    答:InnoDB是基于索引来完成行锁
    例: select * from tab_with_index where id = 1 for update;
    for update 可以根据条件来完成行锁锁定,并且 id 是有索引键的列,
    如果 id 不是索引键那么InnoDB将完成表锁,,并发将无从谈起

    4、MySQL中myisam与innodb的区别,至少5点

    (1)、问5点不同;

    答:

    1>.InnoDB支持事物,而MyISAM不支持事物

    2>.InnoDB支持行级锁,而MyISAM支持表级锁

    3>.InnoDB支持MVCC, 而MyISAM不支持

    4>.InnoDB支持外键,而MyISAM不支持

    5>.InnoDB不支持全文索引,而MyISAM支持。

    6>.热备份
    7>.崩溃恢复

    其他:

    (2)、问各种不同mysql版本的2者的改进;

    (3)、2者的索引的实现方式。

    5、问MySQL中varchar与char的区别以及varchar(50)中的30代表的涵义

    (1)、varchar与char的区别;

    答:char是一种固定长度的类型,范围是0~255,varchar则是一种可变长度的类型,范围是 0~65535,char长度不够会填充空格

    (2)、varchar(50)中50的涵义;

    答:最多存放50个字符

    (3)、若一张表中只有一个字段VARCHAR(N)类型,utf8编码,则N最大值为多少(精确到数量级即可):
    答:由于utf8的每个字符最多占用3个字节。而MySQL定义行的长度不能超过65535,因此N的最大值计算方法为:(65535-1-2)/3。减去1的原因是实际存储从第二个字节开始,减去2的原因是因为要在列表长度存储实际的字符长度,除以3是因为utf8限制:每个字符最多占用3个字节。因此N=(Floor(65535-1-2)/3)

    (4)、int(20)中20的涵义;

    答:int(M) M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关;所以int(10)与int(11)后的括号中的字符表示显示宽度,整数列的显示宽度与mysql需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,int类型的字段能存储的数据上限还是2147483647(有符号型)和4294967295(无符号型)。如果int(10)和int(11)不加zerofill,则它们没有什么区别.

  • 相关阅读:
    docker入门——centos安装
    NET应用——你的数据安全有必要升级
    mysql事件机制——定时任务
    是时候升级你的Js工具了-分页【基于JQ】
    优美库图片系统
    爬虫之蜂鸟网图片爬取
    壁纸提取
    CSDN刷阅读数
    tkinter基础-输入框、文本框
    数据结构与算法之选择排序
  • 原文地址:https://www.cnblogs.com/maohuidong/p/7967098.html
Copyright © 2011-2022 走看看