zoukankan      html  css  js  c++  java
  • Mysql系列常见面试题(三)

    1.Mysql数据表在什么情况下容易损坏?

    服务器突然断电导致数据文件损坏,强制关机,没有先关闭Mysql服务等。

    2.Mysql有关全校的表都有那几个?

    Mysql服务器通过权限表老控制用户对数据库的访问,权限表存放在Mysql数据库里,由Mysql_install_db脚本初始化,这些权限表分为,user,db,table_priv,columns_priv和host。

    3.Mysql中有哪几种锁?

    MyISAM支持表锁,InnoDB支持表锁和行锁,默认为行锁。

    表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低

    行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高

    4.数据库三范式是什么?

     第一范式(1NF):字段具有原子性,不可分。(所有的关系型数据库系统都满足第一范式数据库表中的字段都是单一属性的,不可再分)

    第二范式(2NF)必须先满足第一范式(1NF)的基础上简历起来的,即满足第二范式(2NF)必须先满足    第一范式(1NF).要求数据库表中的每个实例或行必须可以被唯一的区分,通常需要为表加上一个    列,以存储各个实例的唯一标识。这个唯一属性列被称为主关键字或主键。

    第三范式(3NF),满足第三范式,必须先满足第二范式。简而言之,第三方式:要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。>所以第三范式具有如下特征:

       4.3.1:每一列只有一个值,4.3.2:每一行都能区分。4.3.3:每一个表都不包含其它表已经包含的非主关键字信息。

    5.有哪些数据库优化方面的经验?

    分库分表,读写分离。

    5.1. PreparedStatement, 一般来说比 Statement 性能高:一个 sql
    发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存。
    5.2. 有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,
    那在设计数据库时就去掉外键。
    5.3. 表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等
    5.4. UNION ALL 要比 UNION 快很多,所以,如果可以确认合并的两个结
    果集中不包含重复数据且不需要排序时的话,那么就使用 UNION
    ALL>>UNION UNION ALL 关键字都是将两个结果集合并为一
    个,但这两者从使用和效率上来说都有所不同。

    >5.4.1. 对重复结果的处
    理: UNION 在进行表链接后会筛选掉重复的记录, Union All 不会去除
    重复记录。

    >5.4.2. 对排序的处理: Union 将会按照字段的顺序进行排
    序; UNION ALL 只是简单的将两个结果合并后就返回。
    6.请简述常用的索引有哪些种类?

    普通索引:即针对数据库表创建索引,

    唯一索引:与普通索引类似,不同的就是:Mysql数据库索引列的值必须唯一,单允许有空值。

    主键索引:它是一种特殊的唯一索引,不允许有空值,一般是在建表的时候同事创建主键索引。

    组合索引:为了进一步榨取Mysql的效率,就要考虑建立组合索引,即将数据库表中的多个字段联合起来作为一个组合索引

    7.在Msql数据库中索引的工作机制是什么?

    数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库表中数据,索引的实现通车使用

    B树以及其变种B+树。

    8.Mysql基础操作命令

    Mysql是否处于运行状态:Debian上运行命令Service Mysql status,在RedHat上运行命令Service Mysqlid status

    开启或停止Mysql服务,运行命令Service Mysqlid start,开启服务。运行命令Service Mysqlid stop停止服务。

    Shell登入Mysql:运行命令:Mysql -u root -p

    列出所有数据库:运行命令 show databases;

    切换到某个数据库并在上面工作:运行命令 use databasename;进入名为databasename的数据库;

    列出某个数据库内所有的表:show tables;

    获取表内所有FieId对象的名称和类型:describe table_name;

    9.Mysql的复制原理以及流程。

    Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Msql

    的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。*复制过程中一个服务器充当主服务器,而一个或者多个其它服务器充当从

    服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新,

    当一个从服务器连接主服务器时,它通知主服务器在日志中读取的最后一次成功更新的位置。

    从服务器接受从那时起发送的任何更新,然后封锁并等待主服务器通知新的更新。过程如下:

    -1.主服务器吧更新记录到二进制日志文件中。-2.从服务器把主服务器的二进制日志拷贝到自己的中级日志(replay/log)中。

    -3.从服务器重做中级日志中的时间,把更新应用到自己的数据库上。(这样就完成了主从复制,一主多备)

    10.Mysql支持的复制类型?

    -10.1:基于语法的复制:在主服务器上执行的SQL语句,在从服务器上执行统一的语句。Mysql默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,

    会自动选着基于行的复制。

    10.2:基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍,从Mysql5.0开始支持。

    10.3:混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

    11.Mysql中MyISAM与InnoDB的区别?

    11.1事物支持>MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提高事物支持。

         >InnoDB:提供事物支持事物,外部键等高级数据库功能。具有事物(commit),回滚(rollback)和崩溃修复能力(crash recivery capabilities)的事物安全

    (transaction-safe(ACID compliant))型表。

    11.2:InnoDB支持行级锁,而MyISAM支持表级锁,

              用户在操作MyISAM表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。

    11.3:InnoDB支持MVCC,而MyISAM不支持,

    11.4:InnoDB支持外键,而MyISAM不支持。

    11.5:表主键>MyISAM:允许没有任何所有和主键的表存在,所有都是保存行的地址。

                          >InnoDB:如果没有设定主键或者非空唯一所有,就会自动生成一个六字节的主键(用户不可见),数据是主索引的一部分,

    附加索引保存的是主索引的值。

    11.6:InnoDB不支持权威索引,而MyISAM支持。

    11.7:可移植性,备份以及恢复>MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可以单独针对某个表进行操作,

              >>:InnoDB:免费的方案可以是拷贝数据文件,备份binlog,或者用Mysqldump,在数据量达到几十G的时候就相对痛苦了。

    11.8:存储结构:>MyISAM,每个MyISAM在磁盘上存储成三个文件,第一个文件的名字以表的名字开始,扩展名指出文件类型,.frm文件存储表定义。

    数据文件的扩展名为.myd(MyData)。索引文件的扩展名是.myi(MYINDEX)。

                                 >InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是第一列的表空间文件),InnoDB表

    的大小只受限于操作系统文件的大小,一般为2GB。

    12.Msql中的varchar与char的区别以及varchar(50)中的50代表的含义?

    :>>12.1:varchar与char的区别,char是一种固定长度的类型,varchar则是一种可变长度的类型。

    12.2:varchar(50)中的50的含义:最多存放50个字节,(比如存放了一个2字节的数据,在磁盘当中就会只占用2字节,但是使用char的话,就会定义了1-255字节中的任何一个,都会固定的占用固定字节)

    12.3:int(20)中20的含义:int(M)中的M indicates the maximum display width (最大显示宽度)for integer types. The maximum
    legal display width is 255.
    13.Mysql中InnoDB支持的四种事物隔离级别名称,以及逐级之间的区别?

     13.1:Read Uncommited(读取到未提交内容)>> 在该隔离级别,所有事物都可以看到其他未提交事物的执行结果,本隔离级别很少用于实际应用

    ,因为它的性能也不必其他级别好多少,读取到未提交的数据,也被称之为脏读(Dirty Read)

    13.2:Read Commited(读取提交内容)  >>这是大多数数据库系统的默认隔离级别(但不是Mysql默认的),它满足了隔离的简单定义:

    一个事物只能看见一家提交事物所做的改变。这种隔离级别也支持所谓的不可重复读(Nonrepeatable Read),因为同一事物的其他实例在该

    实例处理期间可能会有新的commit,所以同一select可能返回不同的结果。

    13.3:Repartable Read(可重复读) >>这是Mysql的默认事务隔离级别,它能确保同一事物的多个特性在并发读取数据时,会看到相同的数据行,不过理论是哪个,这会导致一个另外一个棘手的问题

    幻读:(Phantom Read)。简单的说,幻读指当前用户读取某一范围的数据行时,另外一个事物又在该范围内插入新行,当用户再读取该范围的数据行时,会发现有新的“幻影”行,

    InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control 间隙锁)机制解决了该问题。

    注意:其实多版本知识解决不可重复读问题,而加上间隙锁,(也就是它这里所谓的并发控制)才解决了幻读问题

    13.4. Serializable(可串行化) >> 这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个
    读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁
    竞争。

     

    岁月无声无息的溜走,除了带走一个无聊者的时光,还会沉淀一个努力者的人生。
  • 相关阅读:
    10 个迅速提升你 Git 水平的提示
    git-自动补全
    Andriod Atom x86模拟器启动报错
    Android SDK Manager 无法更新SDK
    tiny4412 解决内核编译版本号问题
    Move resources allocated using unmanaged interface to managed devm interface
    原理图学习
    解决tiny4412在win7 64位上adb无法使用失败的问题
    popcount 算法分析
    linux中断申请之request_threaded_irq
  • 原文地址:https://www.cnblogs.com/dayandday/p/10857207.html
Copyright © 2011-2022 走看看