mysql常见面试题

数据库

编程题

1.设有如下关系表R、S和T:
    R(BH,XM,XB,DWH)
    S(SWH,DWM)
    T(BH,XM,XB,DWH)
    实现R∪T的SQL语句是。

答案示例:
    SELECT * FROM R UNION SELECT * FROM T  
    SELECT * FROM R UNIO SELECT * FROM T  
2.考虑如下表结构,写出建表语句
ID(自增主键)   NAME(非空)	Blance(非空)
1 	 			A 			19.50
2 				A 			20.50
3 				B 			100.00

	create table text (id int primary key,NAME varchar(10) not null,Blance double not null);
3.有表list,并有字段A,B,C, 类型都是整数,表中有如下几条记录
A 	B    C
2   7    9
5   6    4
3 	11   9
现在对该表一次完成以下操作
    1.查出B和C列的值,要求按B列升序排列
    select B,C from list order by B ;
    2.写出一条新的记录,值为(7,9,8)
    insert into list values(7,8,9);
    3.查询C列,要求消除重复的值,按降序排列
    select distinct C from list order by C desc;
    +---+
    | C |
    +---+
    | 9 |
    | 4 |
    +---+

理论简答题

1.order bygroup by的区别
答案:
    order by 排序查询、asc升序、desc降序 group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。
    使用group by 子句的查询语句需要使用聚合函数。
2.简述关系型数据库和非关系型数据库的区别,以及常见的关系型数据库和非关系型数据库
答案:
    当前主流的关系型数据库有Oracle、MySQL等;
    非关系型数据库有Redis,MongoDB等;
    关系型数据库通过外键关联来建立表与表之间的关系,非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定
3.什么是事务?及其特性?

答案:
    事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。
    事务特性:
     (1)原子性:即不可分割性,事务要么全部被执行,要 么就全部不被执行。
     (2)一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态
     (3)隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,
     (4)持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。
4.MySQL的常用类型有哪些?
    字符串类型
    char  	
    varchar
    text
    数值类型 
    TINYINT      
    INT	
    BIGINT
    DECIMAL
    日期和时间类型
    DATE         YYYY-MM-DD 1000-01-01  ->  9999-12-31
    TIME         HH:MM:AA
    DATETIME  YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:00 ->9999-12-31 23:59:59
5.MySQL的char varchar text的区别?
    •	char  定长字符串 长度范围是 0-255字节
    •	varchar 变长字符串 长度范围 0-65535 字节 mysql5.0之前 最大长度为255
    •	text  长文本数据 长度范围 0-65535字节 与varchar的区别是不能设置默认值
6.如何对查询语句进行优化
    •	开启慢查询日志
    •	通过慢查询日志找到执行较慢的sql语句
    •	使用 explain 或 desc 具体分析sql语句

    优化的方案:
    •	通过使用或建立索引提高sql的执行效率
    •	1,给经常作为查询条件的字段添加索引
    •	2,添加索引的字段,尽量保持一定的唯一性,3,在使用索引时,注意类型,防止出现有索引,用不上
    •	4,注意在使用like模糊查询时,如果%或_出现在前面,则用不上索引
7.为什么以下SQL语句在执行时不能命中phone的索引?
      解读:
      多数情况下的手机号字段都是使用字符串类型进行存储,因为普通的int类型最大的数值为4 294 967 295(就是说存不了11位数字),而且推荐使用varchar(20)
      1,有可能出现国家代号如+86
      2,手机号通常不会用来做运算
      因此上题sql语句不能命中phone的索引主要原因是因为 phone是字符串类型,而sql语句中的phone给的是数字类型
      所以是类型错误,导致sql语句不能命中phone的索引
8.NoSQL了解么,和关系数据库的区别?
    关系型数据库:
    •	高度组织化结构化数据
    •	结构化查询语言(SQL)
    •	数据和关系都存储在单独的表中。
    •	事务,join关联查询,
    Nosql数据库:
    •	非结构化的存储。
    •	没有声明性查询语言
    •	支持高并发
    •	基本支持分布式,易于扩展,可伸缩
9.redis有几种常用存储类型?
	字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型
10.假设订单表orders用来存储订单信息,cid代表客户编号,money代表单词订购额,现要查询每个客户的订购次数和每个客户的订购总金额,下面()sql语句可以返回正确结果。
	A: select cid,count(money),sum(cid)from orders group by cid
	B: select cid,count(money),sum(cid)from orders order by cid
	C: select cid,count(cid),sum(money)from orders order by cid
	D: select cid,count(cid),sum(money)from orders group by cid
	
答案:D
11.现有客户表customers(主键:客户编号cid),包含10行数据,订单表orders(外键:客户编号cid),包含6条数据。
执行sql语句:select * from customers right outer join orders on customers.cid=orders.cid。最多返回()条记录。  
   A:10 
   B:6 
   C:4   
   D:0
   
答案:	B
12.索引是什么?有什么作用以及优缺点?
答案:
    索引是对数据库表中一或多个列的值进行排序的结构,是帮助MySQL高效获取数据的数据结构。
    你也可以这样理解:索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在     数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。
    MySQL数据库几个基本的索引类型:普通索引、唯一索引、主键索引、全文索引
    索引加快数据库的检索速度
    索引降低了插入、删除、修改等维护任务的速度
    唯一索引可以确保每一行数据的唯一性
    通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能
    索引需要占物理和数据空间 
13.索引的优缺点,什么时候使用索引,什么时候不能使用索引?
答案:
索引最大的好处是提高查询速度, 缺点是更新数据时效率低,因为要同时更新索引。
对数据进行频繁查询进建立索引,如果要频繁更改数据不建议使用索引。
14.事务四大特性。
答案:
    原子性,要么执行,要么不执行
    隔离性,所有操作全部执行完以前,其它会话不能看到过程 
    一致性,事务前后,数据总额一致 
    持久性,一旦事务提交,对数据的改变就是永久的
15.MySQL数据库的有几种引擎?和使用场景
    MYISAM 不支持事务,不支持外键,表锁,插入数据时,锁定整个表,查表总行数时,不需要全表扫描 
    INNODB 支持事务,支持外键,行锁,查表总行数时,全表扫描
16.什么是事务?
    事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将一组语句作为事务考虑,就需要通过ACID测试(事务的四大特性),即原子性,一致性,隔离性和持久性。
17.索引都有哪几种分类?
	答:
		普通索引:最基本的索引,没有任何限制 
		唯一索引:与”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。 
		主键索引:它是一种特殊的唯一索引,不允许有空值。 
		全文索引:针对较大的数据,生成全文索引很耗时好空间。 
		组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则 
18.关系型数据库和非关系型数据库区别是什么?
	答:
	查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库
	存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是					
	集合等各种格式,而数据库则只支持基础类型。
19.简单比较一下RDBMS和noSQL(不超过三句话)?
答案:
	1.Nosql(not only sql) 不是用于关系型数据库管理系统(RDBMS)
	2.RDBMS分布式困难,noSQL则比较容易
20.MySQL中myisam与innodb的区别,至少5点?
答案:
    1.InnoDB支持事物,而MyISAM不支持事物
    2.InnoDB支持行级锁,而MyISAM支持表级锁
    3.InnoDB支持MVCC, 而MyISAM不支持
    4.InnoDB支持外键,而MyISAM不支持
    5.InnoDB不支持全文索引,而MyISAM支持
21.varchar和char的使用场景 
    用来存储字符 
    varchar适用字符长度经常变的 
    char适用字符长度固定的
22.什么样的字段适合建索引
	唯一、不为空、经常被查询的字段
23.简单说一说drop、delete与truncate的区别
    SQL中的drop、delete、truncate都表示删除,但是三者有一些差别
    delete和truncate只删除表的数据不删除表的结构
    速度,一般来说: drop> truncate >delete
    delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;
    如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
24.dropdeletetruncate分别在什么场景之下使用?
    不再需要一张表的时候,用drop
    想删除部分数据行时候,用delete,并且带上where子句
    保留表而删除所有数据的时候用truncate

你可能感兴趣的:(MySQL)