数据库面试常见问题
数据库
Delete Truncate Drop 区别
答:这三个操作都是针对数据库的表进行操作,都有删除表的功能,其中的区别在于:
Delete:只将表中的数据进行删除,不删除定义不释放空间,是dml语句,需要提交事务,如果不想删除可以回滚。delete每次删除一行,并在事务日志中为所删除的每行记录一项。数据两大的情况下,执行速度相较于其他两个而言较慢。
Truncate:仅仅删除表中数据,不删除定义但释放表空间,是DDL语句,操作立刻生效,无法通过binlog回滚,会清空所有数据且速度较快。
Drop:表中的数据和表的结构都会被删除,且释放空间,是DDL语句,操作立刻生效,无法回滚,操作速度相较于其他两个最快。
数据库语句操作分类:DML,DDL,DCL,DQL,TCL
DML(数据操作语言):对表中的数据进行操作,语句包括增删改查:insert,delete,update,select
DDL(数据定义语言):对表进行操作,语句包括:create,truncate,drop,alter
DCL(数据控制语言):用来管理数据库用户、控制数据库的访问权限:grant……to……,revoke……from……
DQL(数据查询语言):执行顺序:先从表中获取数据(from),然后根据条件进行筛选(where),再根据分组字段进行分组(group by……having),查出数据(select),然后根据查到的数据进行排序(order by),最后进行分页操作(limit)
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
常用函数
decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
nvl:nvl(string1, replace_with)
mod(m,n): m/n的余数
round(n,p): 四舍五入
length 长度
lower 小写
upper 大写
to_date 转化日期
to_char 转化字符
to_number 转变为数字
ltrim/rtrim/trim 去左/右/中 空格
substr(c,p,n) 截取字符串,从p位开始截,包含p位,截取n位
KETTLE内存溢出解决方案
答:找到kettle的安装路径,找到spoon.bat,点击进行编辑,找到对应的字段进行调整:-Xmx1024m 加大,最好是265m的整数倍,修改默认缓存条数(默认为1万),双击Transformation空白地方,会弹出一个界面,修改Nr of rows in rowset值。
kettle中黄色的锁,绿色的对勾,红色的停止代表的意思
黄色的锁:表示不论上一步是否执行成功,将会继续向下执行,下一步可以正常执行
绿色的对勾:表示只有当上一步的任务执行成功并且没有任何错误的时候才会执行下一步
红色停止:表示当上一个作业项的执行结果为假或者没有成功执行时,执行下一个作业项
双斜线:并行启动下一个条目,右键菜单launch next entries in parallel可以设置
Oracle的五种约束
- 非空(not null) 约束:不能为空;
- 主键(PRIMARY KEY)约束:唯一的标识表中的每一行;
- 唯一(UNIQUE)约束:每列字段的值不能相同;
- 外键(FOREIGN KEY)约束:用来维护从表与主表之间的引用完整性;
- 条件(CHECK)约束:表中每行都要满足该约束条件
Oracle和MySQL的区别
1、Oracle是大型数据库,而MySQL是中小型数据库。
2、Oracle的内存占有量非常大,而mysql非常小
3、MySQL支持主键自增长,指定主键为auto increment,插入时会自动增长。Oracle主键一般使用序列。
4、group by用法:MySQL中group by在select语句中可以随意使用,但是在Oracle中如果查询语句中有组函数,那其他列名必须是组函数处理过的或者是group by子句中的列,否则报错。
5、引号方面:MySQL中用双引号包起字符串,Oracle中只可以用单引号包起字符串。
创建索引的优缺点
优点:
索引是数据库优化
表的主键会默认自动创建索引
大量降低数据库的IO磁盘读写成本,极大提高了检索速度
索引事先对数据进行了排序,降低查询是数据排序的成本,降低CPU的消耗
缺点:
索引本身也是一张表,该表保存