Mysql面试问题

 

1 Mysql实现的四种通信协议

         (1)TCP/IP协议,通常我们通过它来连接mysql,各种主要编程语言都是根据这个协议实现了连接模块。

         (2)Unix Socket协议,这个通常我们登入mysql服务器中使用这个协议,因为要使用这个协议连接mysql需要一个物理文件,文件的存放位置在配置文件中有定义,值得一提的是,这是所有协议中最高效的一个。

           (3)Share Memory协议,这个协议一般人不知道,肯定也没有用过,因为这个协议只有windows可以使用,使用这个协议需要的配置文件中在启动的时候使用shared-memorycan参数,注意的是,使用此协议,一个host上只能有一个server,所以这个东西一般没啥用,。

             (4)Named Pipes协议,这个协议也是只有windows才可以用,和share  memory一样,使用此协议,一个host上依然只能有一个server,及时是使用不同的端口也不行。Named Pipes是为局域网而开发的协议。内存的一部分被某进程用来向另一个进程传递信息,因此一个进程的输出就是另一个进程的输入,度而非进程可以是本地的,也可以是远程的。正因为如此,加入你的环境中没有或者禁用TCP/TP环境,而是windows服务器,那么好歹你的数据库还能工作。使用这个协议需要在启动的时候添加enable-named-pipe选项。

 

2.联合索引

1) where a=1 and b=2 and c=3 (使用联合索引)
2) where a = 1 and b>2 and c=3  (使用c索引)
3) where a > 1 and b=2 and c=3  (使用c索引)
4) where a > 1 and b=2 and c>3  (不使用索引)

5) where a>1 and b!=2 (不使用索引)
6) where a!=1 and b>1 (不使用索引)
7) where b = 1 and a = 2  (使用联合索引)

8) where b = 1 (不使用索引)
9) where a = 1 (使用联合索引、若a字段存在单独索引,此处仍优先使用联合索引)

10) where c = 1 order by b (使用c索引)
11) where c = 1 order by a (使用c索引)
12) where b = 1 order by a  (不使用索引)
13) where b = 1 order by c  (不使用索引)
14) where b = 1 group by c  (使用c索引)


备注:
1) 范围查询用不上索引。
3) 联合索引中,若存在范围查询时,优先使用其他准确查找字段中的单独索引。
4) 联合索引中,若a,b,c、 a,b、 a,c、 a 组合(即含有a字段的组合)均为精确查找,则使用联合索引。(与where语句中三个字段出现的顺序无关)
5) 联合索引中,若字段组合中不含有a字段且b、c字段均无单独字段索引,则不使用索引。

 

3. 数据库事务

       数据库事务transanction正确执行的四个基本要素:ACID,原子性(Atomicity)、一致性(Correspondence)、隔离性(Isolation)、持久性(Durability)。

       原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样

       一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

       隔离性:隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行 相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请 求,使得在同一时间仅有一个请求用于同一数据。

       持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

 

4. 视图

       视图是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询;不包含任何列或数据。使用视图可以简化复杂的sql操作,隐藏具体的细节,保护数据;视图创建后,可以使用与表相同的方式利用它们。

       视图不能被索引,也不能有关联的触发器或默认值,如果视图本身内有order by 则对视图再次order by将被覆盖

       创建视图:create view XXX as XXXXXXXXXXXXXX;

       对于某些视图比如未使用联结子查询分组聚集函数Distinct Union等,是可以对其更新的,对视图的更新将对基表进行更新;但是视图主要用于简化检索,保护数据,并不用于更新,而且大部分视图都不可以更新。 

 

5 如何更好的区分三大范式

         第 一范式和第二范式在于有没有分出两张表,第二范式是说一张表中包含了多种不同的实体属性,那么要必须分成多张表, 第三范式是要求已经分成了多张表,那么一张表中只能有另一张表中的id(主键),而不能有其他的任何信息(其他的信息一律用主键在另一表查询)。

总结:

第1范式:每个表中都有1列,并且该列是不可拆分的最小单元

第2范式:1张表只描述一件事情

第3范式:用外键做表的关联

【数据库五大约束】

1.primary KEY:设置主键约束;
2.UNIQUE:设置唯一性约束,不能有重复值;
3.DEFAULT 默认值约束,height DOUBLE(3,2)DEFAULT 1.2 height不输入是默认为1,2
4.NOT NULL:设置非空约束,该字段不能为空;
5.FOREIGN key :设置外键约束。

【主键】
1.主键的注意事项?
主键默认非空,默认唯一性约束,只有主键才能设置自动增长,自动增长一定是主键,主键不一定需要自动增长;
2.设置主键的方式?
在定义列时设置:ID INT PRIMARY KEY
在列定义完之后设置:primary KEY(id)

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值