Mysql数据库
1. DELETE与TRUNCATE区别
DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作,不清空AUTO_INCREMENT记录数
TRUNCATE则直接将表删除并重新建表,不会把单独的删除操作记录记入日志保存,删除行是不能恢复的,AUTO_INCREMENT将置为0,效率比DELETE高
2. 存储过程
1)概念
存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
2)创建存储过程怎么写?
“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 b is null then set b = 0;
end if;
set c = a + b;
select c as sum;
3. 索引
1)概念
索引是对数据库中一或多个列值的排序,帮助数据库高效获取数据的数据结构。假如我们用类比的方法,数据库中的索引就相当于书籍中的目录一样,当我们想找到书中的摸个知识点,我们可以直接去目录中找而不是在书中每页的找,但是这也抛出了索引的一个缺点,在对数据库修改的时候要修改索引到导致时间变多。
2)分类
普通索引 唯一索引 主键索引 全文索引
3)优点
n 加快检索速度
n 唯一索引确保每行数据的唯一性
n 在使用索引的过程可以优化隐藏器,提高系统性能
4)缺点
n 插入删除 修改 维护速度下降
n 占用物理和数据空间
4. 事务
应用场景:存在并发数据访问时才需要事务
ACID四大特性
a) 原子性(Atomicity): 整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。任何一项操作的失败都会导致整个事务的失败。
b) 一致性(Correspondence): 在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
c) 隔离性(Isolation): 并发执行的事务彼此无法看到对方的中间状态。
d) 持久性(Durability): 在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
5. 事务中的问题与隔离级别
Ø 问题
脏读: 一个事务读取到另一个事务未提交的数据;
不可重复读:一个事务中两次查询的数据不一致 --> 一个事务读到了另一个事务 已经提交数据(update操作)
虚读(幻读):一个事务中两次查询的数据不一致 --> 一个事务读到了另一个事务 已经提交数据(insert操作)
Ø 隔离级别(安全从低到高,性能从高到低)
e) 读未提交:也叫脏读,是事务可以读取其它事务未提交的数据。
--> 未解决任何问题;
f) 读已提交:在事务未提交之前所做的修改其它事务是不可见的
--> 解决脏读问题;
g) 可重复读:保证同一个事务中的多次相同的查询的结果是一致的
--> 解决脏读,不可重复读问题;
h) 可串行化: 保证读取的范围内没有新的数据插入,比如事务第一次查询得到某个范围的数据,第二次查询也同样得到了相同范围的数据,中间没有新的数据插入到该范围中
--> 解决脏读,不可重复读,虚读(幻读)问题;
常用数据库默认隔离级别:
MySQL: 可重复读
Oracle: 读已提交
SQLServer: 读已提交
6. 如何进行事务管理
Connection 提供了事务处理的方法,通过调用 setAutoCommit(false)可以设置手动提交事务;当事务完成后用 commit()显式提交事务;如果在事务处理过程中发生异常则通过 rollback()进行事务回滚。除此之外,从 JDBC 3.0 中还引入了 Savepoint(保存点)的概念,允许通过代码设置保存点并让事务回滚到指定的保存点'
7. DDL、DML、DCL、DQL分别指的是什么?
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
8. SQL注入
举例:
select admin from user where username='admin' or 'a'='a' and passwd=''or 'a'='a'
防止SQL注入,使用预编译语句是预防SQL注入的最佳方式,如
select admin from user where username=?And password=?
使用预编译的SQL语句语义不会发生改变,在SQL语句中,变量用问号?表示。像上面例子中,username变量传递的'admin' or 'a'='a' 参数,也只会当作username字符串来解释查询,从根本上杜绝了SQL注入攻击的发生。
注意:使用mybaits时 mapper中#方式能够很大程度防止sql注入,$方式无法防止sql注入.
9. Select语句完整的执行顺序:
from--->where--->group by--->having--->计算所有的表达式--->order by--->select输出
二. Oracle数据库
1. Oracle是怎样分页的,与myqsl有什么不同
Oracle中使用rownum来进行分页, 这个是效率最好的分页方法,hibernate也是使用rownum来进行oralce分页的 select * from ( select rownum r,a from tabName where rownum <= 20 ) where r > 10
MySQL使用的是limit函数
SELECT * FROM table LIMIT 5,10; //查询的是第6条到第15
2. 说说Oracle中的经常使用到得函数
Length 长度、lower 小写、upper 大写、to_date 转化日期、to_char转化字符 、Ltrim 去左边空格、 rtrim去右边空格、substr取字串、add_month增加或者减掉月份、to_number转变为数字
3. mysql,oracle,sql server三者的区别
1. mysql
优点:体积小、速度快、总体拥有成本低,开源;支持多种操作系统;是开源数据库,提供的接口支持多种语言连接操作。
缺点:不支持热备份;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




