MySQL面试题

1、mysql中myisam与innodb的区别,至少5点
(1)、问5点不同;
(2)、innodb引擎的4大特性
(3)、2者selectcount(*)哪个更快,为什么

2、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义
(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,则它们没有什么区别.

(4)、为什么MySQL这样设计。

19.[SELECT *] 和[SELECT 全部字段]的2种写法有何优缺点,至少写出四点
1>.前者要解析数据字典,后者不需要
2>.结果输出顺序,前者与建表列顺序相同,后者按指定字段顺序。
3>.表字段改名,前者不需要修改,后者需要改
4>.后者可以建立索引进行优化,前者无法优化
5>.后者的可读性比前者要高

  1. HAVNG 子句 和 WHERE的异同点,至少写出3点
    1>.语法上:where 用表中列名,having用select结果别名
    2>.影响结果范围:where从表读出数据的行数,having返回客户端的行数
    3>.索引:where 可以使用索引,having不能使用索引,只能在临时结果集操作
    4>.where后面不能使用聚集函数,having是专门使用聚集函数的。

.
12、请简洁地描述下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种事务隔离级别分别表现的现象如下表:在这里插入图片描述
18、SQL语句优化
原SQL语句:
SELECTID,WAYBILL_NO,EXP_TYPE,PKG_QTY,EXPRESS_CONTENT_CODE,EFFECTIVE_TYPE_CODE
FROM T_EXP_OP WHERE ORDERID NOT IN(SELECTORDERID FROM T_EXP_OP WHERE AUX_OP_CODE IN (‘NEW’,‘UPDATE’,‘DELETE’) AND((OP_CODE IN (176, 162, 171, 131, 136)AND EXP_TYPE IN (‘10’, ‘20’, ‘30’)) OR(OP_CODE IN (191, 121)AND EXP_TYPE IN (‘10’, ‘20’)) OR (OP_CODE IN (181,111)AND EXP_TYPE = ‘10’))) LIMIT 10;

条件:
T_EXP_OP表主键为BIGINT类型的ID字段,存储引擎为InnoDB,无其他索引

优化后为(提示:优化成一条简单的SQL语句,即无子查询,无JOIN关联):
SELECT ID, WAYBILL_NO, EXP_TYPE, PKG_QTY,EXPRESS_CONTENT_CODE, EFFECTIVE_TYPE_CODE
FROM T_EXP_OP
WHERE
AUX_OP_CODENOT IN (‘NEW’, ‘UPDATE’, ‘DELETE’)
AND(OP_CODE NOT IN (176, 162, 171, 131, 136, 191, 121, 181,111)
ANDEXP_TYPE NOT IN(‘10’, ‘20’, ‘30’))
LIMIT 10;

8:使用索引查询一定能提高查询的性能吗?为什么
索引就是为了提高查询性能而存在的,
如果在查询中索引没有提高性能,
只能说是用错了索引,或者讲是场合不同

问题2:如何开启或停止 MySQL 服务?
答案:运行命令 service mysqld start 开启服务;
运行命令 service mysqld stop 停止服务。

问题3:如何通过 Shell 登入 MySQL?
答案:运行命令 mysql -u用户名 -p登陆密码

问题4:如何列出所有数据库?
答案:运行命令 show databases;

问题5: 如何切换到某个数据库并在上面工作?
答案:(1)运行命令 use database_name;
(2)进入名为 database_name 的数据库。

问题6:如何列出某个数据库内所有表?
答案:在当前数据库运行命令 show tables;

问题7:如何获取表内所有 Field 对象的名称和类型?
答案:运行命令 describe 表名;
简写为desc 表名;

问题8:如何删除表?
答案:运行命令 drop table 表名;

问题9:如何删除数据库?
答案:运行命令 drop database 数据库名;

问题10:如何查看表内所有数据?
答案:运行命令 select * from 表名;

问题11:如何从表(比如 oc_users )中获取一个 field 对象(比如 uid)的所有数据?
答案:运行命令 select uid from oc_users;

问题12:假设你有一个名为 ‘xyz’ 的表,它存在多个字段,如 ‘createtime’和 ‘engine’,
名为 engine 的字段由 ‘Memoty’ 和 ‘MyIsam’ 两种数值组成。
如何只列出 ‘createtime’ 和 ‘engine’ 这两列,并且 engine 的值为 ‘MyIsam’?
答案:运行命令 select create_time, engine from xyz where engine = “MyIsam” ;

问题13:如何列出表 ‘xrt’ 内 name 域值为 ‘tecmint’,web_address 域值为 ‘tecmint.com’ 的所有数据?
答案:运行命令 select * from xrt where name = “tecmint” and web_address = “tecmint.com” ;

问题14:如何列出表 ‘xrt’ 内 name 域值不为 ‘tecmint’,web_address 域值为 ‘tecmint.com’ 的所有数据?
答案:运行命令 select * from xrt where name != “tecmint” and web_address = “tecmint.com”;

问题15:如何知道表内行数?
答案:运行命令 select count(*) from 表名;

选择
1.事务的持续性是指?A
A.事务一旦提交,对数据库的改变是永久的 –持续性
B.事务包括的所有操作要么都做,要么不做 –原子性
C.一个事务内部的操作及使用的数据对并发的其他事务是隔离的 –隔离性
D.事务必须是使数据库从一个致性状态变到另一个致性状态 –一致性
2.以下哪个选项时DBMS的基本单位,是构成单一逻辑工作单元的操作集合C
A.进程
B.SQL
C.事务
D.文件
3.SQL语句性能分析的关键字是什么?A
A.EXPLAIN
B.LOAD
C.TOP
D.SUM
explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。 explain语法:explain select … from … [where …] 例如:explain select * from news;
4.spring的PROPAGATION_REQUIRES_NEW事务,下面哪些说法是正确的?B
A.内部事务回滚会导致外部事务回滚
B,内部事务回滚了,外部事务然然可以提交
C.外部事务回滚了,内部事务页跟着回滚
D.外部事务回滚了,内部事务仍然可以提交
5.在视图上不能万恒的操作是C
A.更新视图
B.查询
C.在视图上定义新的表
D.在视图上定义新的视图
6.下面哪些方法可以用来诊断Oracle IO CPU 性能状况ABCD
A
V$SQLAREA
本视图持续跟踪所有shared pool中的共享cursor,在shared pool中的每一条SQL语句都对应一列。本视图在分析SQL语句资源使用方面非常重要。
B
通过Statspack我们可以很容易的确定oracle数据库的瓶颈所有,记录数据库性能状态,也可以使远程技术人员迅速了解的的数据库运行状况。
C
sql_trace是oracle提供的一个非常好的跟踪工具,主要用来检查数据库的异常情况,通过跟踪数据库的活动,找到有问题的语句。
D
它提供了任何情况下session在数据库中当前正在等待什么(如果session当前什么也没在做,则显示它最后的等待事件)。当系统存在性能问题时,本视图可以做为一个起点指明探寻问题的方向。
7.在关系数据库中,用来表示实体间联系的是?B
A属性
B二维表
C网状结构
D树状结构
关系模型实体间的敏感词采用二维表来表示,简称表。选项C为网状模型实体间的敏感词,选项D为层次模型实体间的敏感词,选项A属性刻画了实体。
8.下面有关sql绑定变量的描述,说法错误的是?C
A绑定变量是指在SQL语句中使用变量,改变变量的值来改变SQL语句的执行结果
B使用绑定变量,可以减少SQL语句的解析,能减少数据库引擎消耗在SQL语句解析上的资源
C使用绑定变量,提高了编程效率和可靠性,减少访问数据库的次数
D使用绑定变量,查询优化器会预估的比字面变量更加真实
D,绑定变量被使用时,查询优化器会忽略其具体值,因此其预估的准确性远不如使用字面量值真实
9.sql where条件的执行顺序是什么?A
A从前往后
B从后往前
C其他什么顺序
10.下面有关SQL Server锁的描述,正确的有:ABCD
A锁可以分为独占锁(即排它锁),共享锁和更新锁。
BSQL Server支持的锁粒度可以分为为行、页、键、键范围、索引、表或数据库。
CSQL Server 通过使用SET LOCK_TIMEOUT命令设定锁超时间隔。
D锁的主要作用是提供事务所需的隔离。隔离确保事务之间不会相互干扰。
<分析>:
(1) 概念:
数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。
加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。
(2) 锁的分类:
共享(S)锁:多个事务可封锁一个共享页;任何事务都不能修改该页; 通常是该页被读取完毕,S锁立即被释放。
排它(X)锁:仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页进行访问;X锁一直到事务结束才能被释放。
更新(U)锁:更新锁在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象。因为使用共享锁时,修改数据的操作分为两步,首先获得一个共享锁,读取数据,
然后将共享锁升级为排它锁,然后再执行修改操作。这样如果同时有两个或多个事务同时对一个事务申请了共享锁,在修改数据的时候,这些事务都要将共享锁升级为排它锁。这时,这些事务都不会释放共享锁而是一直等待对方释放,这样就造成了死锁。如果一个数据在修改前直接申请更新锁,在数据修改的时候再升级为排它锁,就可以避免死锁。
(3) 锁的粒度:
在sql server2000中锁是具有粒度的,即可以对不同的资源加锁。锁定在较小的粒度的资源(例如行)上可以增加系统的并发量但需要较大的系统开销,从而也会影响系统的性能,因为锁定的粒度较小则操作可能产生的锁的数量会增加;锁定在较大的粒度(例如表)就并发而言是相当昂贵的,因为锁定整个表限制了其它事务对表中任意部分进行访问,但要求的开销较低,因为需要维护的锁较少,所以在这里是一种互相制约的关系。
Sql server2000

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值