转自于:https://zhuanlan.zhihu.com/p/39804394
1、MySQL的delete与truncate区别?
回答:delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行回滚操作,不清空AUTO_INCREMENT记录数;
truncate则直接将表删除并重新建表,不会把单独的删除操作记录记入日志保存,删除行是不能恢复的,AUTO_INCREMENT将置为0,效率比delete高。
2、MySQL的存储过程是什么?
回答:存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它;
创建存储过程:”pr_add”是个简单的MySQL存储过程,这个MySQL存储过程有两个int类型的输入参数”a”,”b”,返回这两个参数的和。
1)drop procedure if exists pr_add;
2)计算两个数之和
create procedure pr_add( a int , b int )begin declare c int;
if a is null then set a = 0;
end if;
if a is null then set b = 0;
end if;
set c = a+b;
select c as sum ;
3、谈谈你对索引的理解?
回答:索引是对数据库中一对多个列值的排序,帮助数据库高效获取数据的数据结构。假如我们用类比的方法,数据库中的索引就相当于书籍中的目录一样,当我们想找到书中的某个知识点,我们可以直接去目录中找而不是在书中每页的找,但是这也抛出了索引的一个缺点,在对数据库修改的时候要修改索引,导致时间变多。
索引分为:普通索引,唯一索引,主键索引,全文索引
优点:加快检索速度;唯一索引确保每行数据的唯一性;在使用索引的过程可以优化隐藏器,提高系统性能
缺点:插入删除,修改,维护速度下降;占用物理和数据空间;
4、简单描述一下数据库的事务?
回答:应用的场景:存在并发数据访问时才需要事务
ACID四大特性:a)原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间的某个环节。任何一项操作的失败都会导致整个事务的失败;
b)一致性:在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏;
c)隔离性:并发执行的事务彼此无法看到对方的中间状态;
d)持久性:在事务完成以后,该事务所对数据库所操作的更改便持久的保存在数据库之中,并不会被回滚。
问题:a)脏读:一个事务读取到另一个事务未提交的数据
b)不可重复读:一个事务中两次查询的数据不一致 -->一个事务读到了另一个事务,已经提交数据(update 操作)
c)虚读(幻读):一个事务中两次查询的数据不一致 -->一个事务读到了另一个事务,已经提交数据(insert 操作)
隔离级别:安全从低到高,性能从高到低;
a)读未提交:也叫脏读,是事务可以读取其他事务未提交的数据。—>未解决任何问题
b)读已提交:在事务未提交之前所做的修改其它事务是不可见的。—>解决脏读问题
c)可重复读:保证同一个事务中的多次相同的查询的结果是一致的。—>解决脏读,不可重复读的问题
d)可串行化:保证读取的范围内没有新的数据插入,比如事务第一次查询得到某个范围的数据,第二次查询也同样得到了相同范围的数据,中间没有新的数据插入到该范围中。—>解决脏读,不可重复读,虚读(幻读)问题。
常用数据库默认隔离级别:
MySQL:可重复读;Oracle:读已提交;SQLServe:读已提交。r
5、Oracle是怎么样分页的?
回答:Oracle中使用rownum来进行分页,这个是效率最好的分页方法,hibernate也是使用rownum来进行Oracle分页的;
select * from
(select round r,a from tabName where round <= 20)
where r > 10
6、说说Oracle中经常使用到得函数?
回答:Length长度 、lower 小写、upper 大写、to_date 转化日期、to_char 转化字符,Ltrim 去左边空格、substr 取字符串、add_month 增加或者减掉月份、to_number 转变为数字
7、谈谈你对Oracle高水位的理解?
回答:所有的oracle段(segments,在此,为了理解方便,建议把segment作为表的一个同义词) 都有一个在段内容纳数据的上限,我们把这个上限称为"high water mark"或HWM。这个HWM是一个标记,用来说明已经有多少没有使用的数据块分配给这个segment。HWM通常增长的幅度为一次5个数据块,原则上HWM只会增大,不会缩小,即使将表中的数据全部删除,HWM还是为原值,由于这个特点,使HWM很象一个水库的历史最高水位,这也就是HWM的原始含义,当然不能说一个水库没水了,就说该水库的历史最高水位为0。但是如果我们在表上使用了truncate命令,则该表的HWM会被重新置为0。
8、MySQL、Oracle、SqlServer三者之间的区别?
回答:
1. mysql
使用风险:SQL server 完全重写代码经历了长期测试,需要时间来证明并十分兼容;
优点:
体积小、速度快、总体拥有成本低,开源;支持多种操作系统;是开源数据库,提供的接口支持多种语言连接操作。
缺点:
不支持热备份;
MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变;
没有一种存储过程(Stored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制;
MySQL的价格随平台和安装方式变化。Linux的MySQL如果由用户自己或系统管理员而不是第三方安装则是免费的,第三方案则必须付许可费。Unix或Linux 自行安装 免费 、Unix或Linux 第三方安装 收费;
2. oracle
优点:
开放性:Oracle 能在所有主流平台上运行(包括 windows)完全支持所有工业标准, 采用完全开放策略,使客户选择适合解决方案;
可伸缩性,并行性:Oracle 并行服务器通过使组结点共享同簇工作来扩展windownt能 力,提供高用性和高伸缩性簇解决方案。
安全性:获得最高认证级别的ISO标准认证。
性能:Oracle 性能高 保持开放平台下TPC-D和TPC-C世界记录;
客户端支持及应用模式:Oracle 多层次网络计算支持多种工业标准用ODBC、JDBC、OCI 等网络客户连接
使用风险:Oracle 长时间开发经验完全向下兼容得广泛应用地风险低 。
缺点:
对硬件的要求很高;
价格比较昂贵;
管理维护麻烦一些;
操作比较复杂,需要技术含量较高;
3. sqlserver
优点:
易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服 器软件紧密关联的集成性、良好的性价比等;
SQLServer是一个具备完全Web支持的数据库产品,提供了对可扩展标记语言 (XML) 的核心支持以及在Internet上和防火墙外进行查询的能力;
缺点:SQL Server 只能windows上运行,没有丝毫开放性操作系统。
伸缩性并行性 :数据卷伸缩性有限;
安全性:没有获得任何安全证书。
性能 :SQL Server 多用户时性能佳 ;
客户端支持及应用模式: 客户端支持及应用模式。只支持C/S模式,SQL Server C/S 结构只支持windows客户用ADO、DAO、OLEDB、ODBC连接;
9、数据库语句优化有哪些?
回答:1、对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及 order by 涉及的列上建立索引。
2、应尽量避免在where 字句中对字段进行null 值判断,否则将导致引擎放弃使用索引二进行全表扫描。
3、应尽量避免在where 字句中使用or 来连接条件,否则将导致引擎放弃使用索引二进行全表扫描。
4、应尽量避免在where字句中使用!=或<>操作符,否则引擎将放弃使用索引二进行全表扫描。
5、in 和 not in 也要慎用,否则会导致全表扫描。
6、索引并不是越多越好,索引固然可以提高相应的select 的效率,但同时也降低了 insert 及 update 的效率,因为insert 或update时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常用到的列上建的索引是否有必要。
7、查询结果不要用 * 来查询所有字段,要明确指明结果字段。
8、根据查询条件,简历索引,如果查询条件不止一个时,使用组合索引。
9、在查询条件表达式的左侧尽量不要使用函数,否则索引失效。
10、如果有like话,尽量避免%xxx%两侧都有%的条件,单侧%可以使用索引,多侧不可以。
11、建立索引时字段不能有null值
10、MySQL数据库优化有哪些?
回答:1. EXPLAIN 你的 SELECT 查询;2. 当只要一行数据时使用 LIMIT 1;3. 使用 ENUM 而不是 VARCHAR;4. 固定长度的表会更快;5. 分库分表
11、Oracle数据库优化有哪些?
回答:1、调整数据结构的设计。2、调整操作系统参数。3、调整应用程序结构设计。4、调整数据库SQL语句。5、调整服务器内存分配。6、调整硬盘I/O。