Java⾯试题--数据库
存储过程
CREATE  PROCEDURE  num_from_employee (IN emp_id INT, OUT count_num INT )
READS SQL DATA
BEGIN
SELECT  COUNT(*)  INTO  count_num
FROM  employee
WHERE  d_id=emp_id ;
END
上述代码中,存储过程名称为num_from_employee;输⼊变量为emp_id;输出变量为count_num。SELECT语句从employee表查询d_id值等于emp_id的记录,并⽤COUNT(*)计算d_id值相同的记录的条数,最后将计算结果存⼊count_num中。
函数
CREATE  FUNCTION  name_from_employee (emp_id INT )
RETURNS VARCHAR(20)worktile手机版
BEGIN
RETURN  (SELECT  name
FROM  employee
WHERE  num=emp_id );
END
触发器
CREATE TRIGGER trigger_t1
AFTER INSERT ON table2
FOR EACH ROW
UPDATE table1 unt+1;
创建索引
CREATE INDEX indexName ON mytable(username(length));
如果是CHAR VARCHAR类型,length可以⼩于字段实际长度;如果是BLOB和TEXT类型,必须指定 length,下同。
什么是事务?什么是锁?
事务就是被绑定在⼀起作为⼀个逻辑⼯作单元的SQL语句分组,如果任何⼀个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执⾏,要么不执⾏,就可以使⽤事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原⼦性,⼀致性,隔离性和持久性。
锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实⽣活中锁⼀样,它可以使某些数据的拥有者,在某段时间内不能使⽤某些数据或数据结构。当然锁还分级别的。
什么是回滚?
为了保证在应⽤程序、数据库或系统出现错误后,数据库能够被还原,以保证数据库的完整性 ,所以需要进⾏回滚。回滚(rollback)就是在事务提交之前将数据库数据恢复到事务修改之前数据库数据状态。
数据库的乐观锁和悲观锁是什么?
乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采⽤的技术⼿段。
悲观锁:假定会发⽣并发冲突,屏蔽⼀切可能违反数据完整性的操作
乐观锁:假设不会发⽣并发冲突,只在提交操作时检查是否违反数据完整性。
什么是封锁?封锁的基本类型有哪⼏种?含义是什么?
所谓封锁就是当⼀个事务在对某个数据对象(可以是数据项、记录、数据集、以⾄整个数据库)进⾏操作之前,必须获得相应的锁,以保证数据操作的正确性和⼀致性。
基本的封锁类型有两种:排它锁和共享锁
程序的局部性原理
(1)排它锁:排它锁⼜称写锁,简称为X锁,其采⽤的原理是禁⽌并发操作。
(2)共享锁:共享锁⼜称读锁,,简称为S锁,其采⽤的原理是允许其他⽤户对同⼀数据对象进⾏查询,但不能对该数据对象进⾏修改。
事务四⼤特性
原⼦性,要么执⾏,要么不执⾏
隔离性,所有操作全部执⾏完以前,其它会话不能看到过程
⼀致性,事务前后,数据总额⼀致
持久性,⼀旦事务提交,对数据的改变就是永久的
数据库隔离级别,每个级别会引发什么问题,mysql默认是哪个级别
脏读:事务B读取事务A还没有提交的数据
不可重复读:两次事务读的数据不⼀致
幻读:事务A修改了数据,事务B也修改了数据,这时在事务A看来,明明修改了数据,昨不⼀样,
隔离级别 读数据⼀致性 脏读 不可重复读 幻读
未提交读 最低级别 是 是 是
已提交读 语句级 否 是 是
事务级 事务级 否 否 是
串⾏化 最⾼级别 否 否 否
如何维护数据库的完整性和⼀致性?
尽可能使⽤约束,如check,主键,外键,⾮空字段等来约束,这样做效率最⾼,也最⽅便。其次是使⽤触发器,这种⽅法可以保证,⽆论什么业务系统访问数据库都可以保证数据的完整新和⼀致性。最后考虑的是⾃写业务逻辑,但这样做⿇烦,编程复杂,效率低下。
MYSQL的两种存储引擎区别(事务、锁级别等等),各⾃的适⽤场景
MYISAM 不⽀持事务,不⽀持外键,表锁,插⼊数据时,锁定整个表,查表总⾏数时,不需要全表扫描
INNODB ⽀持事务,⽀持外键,⾏锁,查表总⾏数时,全表扫描
Oracle和Mysql的区别?
1)库函数不同。
2)Oracle是⽤表空间来管理的,Mysql不是。
3)显⽰当前所有的表、⽤户、改变连接⽤户、显⽰当前连接⽤户、执⾏外部脚本的语句的不同。
4)分页查询时候时候,mysql⽤limit oracle⽤rownum
数据库的优化
1.sql尽量使⽤索引
2.对sql语句优化
⼦查询变成left join
limit 分布优化,先利⽤ID定位,再分页
or条件优化,多个or条件可以⽤union all对结果进⾏合并(union all结果可能重复)
不必要的排序
where代替having,having 检索完所有记录,才进⾏过滤
避免嵌套查询
对多个字段进⾏等值查询时,联合索引
索引分类
普通索引:最基本的索引,没有任何限制
唯⼀索引:与”普通索引”类似,不同的就是:索引列的值必须唯⼀,但允许有空值。
主键索引:它是⼀种特殊的唯⼀索引,不允许有空值。
全⽂索引:针对较⼤的数据,⽣成全⽂索引很耗时好空间。
组合索引:为了更多的提⾼mysql效率可建⽴组合索引,遵循”最左前缀“原则
数据库的主从复制
默认异步复制,容易造成主库数据和从库不⼀致
⼀个数据库为Master,⼀个数据库为slave,通过Binlog⽇志
slave两个线程,⼀个线程去读master binlog⽇志,写到⾃⼰的中继⽇志
⼀个线程解析⽇志,执⾏sql
mysql语句转oraclemaster启动⼀个线程
给slave传递binlog⽇志
半同步复制
只有把master发送的binlog⽇志写到slave的中继⽇志,这时主库
才返回操作完成的反馈,性能有⼀定降低
并⾏复制
slave 多个线程去请求binlog⽇志
varchar和char的使⽤场景
⽤来存储字符
varchar适⽤字符长度经常变的
char适⽤字符长度固定的
Varchar2和varchar有什么区别?
Char的长度是固定的,⽽varchar2的长度是可以变化的,⽐如,存储字符串“abc”对于char(20),表⽰你存储的字符将占20个字节,包含17个空,⽽同样的varchar2(20)只占了3个字节,20只是最⼤值,当你存储的字符⼩于20时,按实际长度存储。 char的效率要被varchar2的效率⾼。 ⽬前varchar是varchar2的同义词,⼯业标准的varchar类型可以存储空字符串,但是oracle不能这样做,尽管它保留以后这样做的权利。Oracle⾃⼰开发了⼀个数据类型varchar2,这个类型不是⼀个标准的varchar,他将在数据库中varchar列可以存储空字符串的特性改为存储null值,如果你想有向后兼容的能⼒,oracle建议使⽤varchar2⽽不是varchar
数据库连接池的作⽤
维护⼀定数量的连接,减少创建连接的时间
更快的响应时间
统⼀的管理
数据库三范式
1NF 属性不可分
2NF ⾮主键属性,完全依赖于主键属性
3NF ⾮主键属性⽆传递依赖
关系型数据库和⾮关系型数据库区别
类型 特性
关系型数据库mysql
1、关系型数据库,是指采⽤了关系模型来组织数据的数据库,
2、关系型数据库的最⼤特点就是事务的⼀致性;
优点
ascii码主要作用1、容易理解:⼆维表结构是⾮常贴近逻辑世界⼀个概念,关系模型相对⽹状、层次等其他模型来说更容易理解;
2、使⽤⽅便:通⽤的SQL语⾔使得操作关系型数据库⾮常⽅便;
docker安装迅雷3、易于维护:丰富的完整性(实体完整性、参照完整性和⽤户定义的完整性)⼤⼤减低了数据冗余和数据不⼀致的概率;
4、⽀持SQL,可⽤于复杂的查询。
缺点
1、为了维护⼀致性所付出的巨⼤代价就是其读写性能⽐较差;
2、固定的表结构;
3、不⽀持⾼并发读写需求;
4、不⽀持海量数据的⾼效率读写;
mfc多线程
⾮关系型数据库 特性
HBase
1、使⽤键值对存储数据;
2、分布式;
优点
⽆需经过sql层的解析,读写性能很⾼
基于键值对,数据没有耦合性,容易扩展
存储数据的格式:nosql的存储格式是key,value形式
缺点
不⽀持事务
不提供sql⽀持
触发器的作⽤?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。