面试题汇总——数据库

JDBC
Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC接口让Java程序和JDBC驱动实现了松耦合,使得切换不同的数据库变得更加简单。JDBC连接数据库分为:创建数据源,加载驱动程序,连接数据源,对数据库的操作。

oracle 和 mysql 有什么区别

oracle 是甲骨文公司的一款关系数据库管理系统,它组件多、占用资源多,因此安全、速度慢,且贵。
mysql 是一个小型关系型数据库管理系统,采用了GPL(GNU通用公共许可证),它开放源码,小巧,速度快,但不够安全。

主键与唯一索引
主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引。聚簇索引是顺序结构与数据存储物理结构一致的一种索引,并且一个表的聚簇索引只能有唯一的一条;非聚簇索引记录的物理顺序与逻辑顺序没有必然的联系,与数据的存储物理结构没有关系;一个表对应的非聚簇索引可以有多条,根据不同列的约束可以建立不同要求的非聚簇索引;
主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。
主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。
唯一性索引列允许空值,而主键列不允许为空值。
主键列在创建时,已经默认为空值 + 唯一索引了。
主键可以被其他表引用为外键,而唯一索引不能。
一个表最多只能创建一个主键,但可以创建多个唯一索引。
主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。
在 RBO 模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度。

MySQL 索引的实现机制
首先,MySQL 的索引结构是 B+树,有如下特点:

所有值按顺序存储,每个叶子到根的距离相同
非叶子节点只存储指针索引,不存储数据
叶子节点存储所有数据,不存储指针
顺序访问指针:每个叶子节点都有指向相邻下一个叶子节点的指针,即

它最大的好处在于避免了全盘扫描,提高区间访问的性能。

如何创建索引

<!--创建索引-->
CREATE INDEX indexName ON mytable(username(length));
<!--添加索引-->
ALTER table tableName ADD INDEX indexName(columnName)
<!--创建表的时候直接指定-->
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
<!--删除索引-->
DROP INDEX [indexName] ON mytable;

UNIQUE:指定唯一索引。
PRIMARY KEY:指定主键。
FOREIGN KEY:指定外键

数据库怎么删除表
delete (删除表中的数据)

<!--删除表中的行,不释放空间-->
delete from 表名称 where 列名称 =

truncate (清空表中的数据)

<!--删除内容、释放空间但不删除定义(保留表的数据结构)-->
truncate table 表名称 

drop (删除表)

<!--删除内容和定义,释放空间-->
drop table 表名称 

CHAR(65) 返回A

COALESCE是一个函数, (expression_1, expression_2, …,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。

PL/SQL的内置数据类型
character、integer、float、Boolean

视图
视图是已存储的查询;视图隐藏了数据的复杂性;索引是与表关联的可选结构。

热备份和冷备份
热备份针对归档模式的数据库,在数据库仍处于工作状态时进行备份。而冷备份指在数据库关闭后进行备份适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好(因为不必将archive log写入硬盘)。

BETWEEN…AND
BETWEEN 20 AND 30 包括20和30

**游标(Cursor)**是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。

基本语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ‘%value1%’ —like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1

where条件查询方法
单一条件的查询语句
多条件的查询语句
使用 LIKE 的模糊查询
日期字段作为条件的查询语句

MySQL数据库优化的八种方式
1、选取最适用的字段属性。
一般说来,数据库中的表越小,在它上面执行的查询也就会越快;在可能的情况下,应该尽量把字段设置为NOTNULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
2、使用连接(JOIN)来代替子查询(Sub-Queries)
连接(JOIN)…之所以更有效率一些,是因为MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作
3、使用联合(UNION)来代替手动创建的临时表
把需要使用临时表的两条或更多的select查询合并的一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用union来创建查询的时候,我们只需要用UNION作为关键字把多个select语句连接起来就可以了,要注意的是所有select语句中的字段数目要相同。
4、事务
保持数据库中数据的一致性和完整性。事物以BEGIN关键字开始,COMMIT关键字结束。在这之间的一条SQL操作失败,那么,ROLLBACK命令就可以把数据库恢复到BEGIN开始之前的状态。
5、锁定表
事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中。由于在事务执行的过程中,数据库将会被锁定,因此其它的用户请求只能暂时等待直到该事务结束。如果一个数据库系统只有少数几个用户来使用,事务造成的影响不会成为一个太大的问题;但假设有成千上万的用户同时访问一个数据库系统,例如访问一个电子商务网站,就会产生比较严重的响应延迟。有些情况下我们可以通过锁定表的方法来获得更好的性能。
6、使用外键
保证数据的关联性
7、使用索引
它可以令数据库服务器以比没有索引快得多的速度检索特定的行
8、优化的查询语句
首先,最好是在相同类型的字段间进行比较的操作。其次,在建有索引的字段上尽量不要使用函数进行操作。第三,在搜索字符型字段时,我们有时会使用LIKE关键字和通配符,这种做法虽然简单,但却也是以牺牲系统性能为代价的。

数据库中内连接和外连接的区别
内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。
外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。

左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。
右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。
全外连接:左外连接 union 右外连接。

索引的利弊
利:第一、通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二、可以大大加快 数据的检索速度,这也是创建索引的最主要的原因。
第三、可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四、在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五、通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

弊: 第一、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
第二、索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间。如果要建立聚簇索引,那么需要的空 间就会更大。
第三、当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

级联
ON DELETE CASCADE 级联删除
ON UPDATE CASCADE 级联更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值