面试存储过程问什么
A. 数据库常见笔试面试题
数据库常见笔试面试题
数据库常见笔试面试题有哪些?数据库常见笔试面试会考什么?下面是数据库常见面试题总结,为大家提供参考。
1、sql的表连接方式有哪些?
SQL中连接按结果集分为:内连接,外连接,交叉连接
内连接:inner join on,两表都满足的组合。内连接分为等值连接,不等连接,自然连接。
等值连接:两表中相同的列都会出现在结果集中。
自然连接:两表中具体相同列表的列会合并为同一列出现在结果集中。
外连接:分为左(外)连接,右(外)连接,全连接
左(外)连接:A left (outer) join B,以A表为基础,A表的全部数据,B表有的组合,没有的为null。
右(外)连接:A right(outer) join B,以B表为基础,B表的全部数据,A表有的组合,没有的位null。
全连接:A full (outer) join 两表相同的组合在一起,A表有,B表没有的数据(显示为null),同样B表有,A表没有的显示为null。
交叉连接:cross join,就是笛卡尔乘积。
2、三范式
1NF:表中的字段都是单一属性,不再可分。
2NF:在1NF的基础上,表中所有的非主属性都必须完全依赖于任意一组候选键,不能仅依赖于候选键中的某个属性。
3NF:在2NF的基础上,表中所有的属性都不依赖其他非主属性。
简单的说就是:1NF表示每个属性不可分割,2NF表示非主属性不存在对主键的部分依赖,3NF表示不存在非主属性对主键的依赖传递。
3、表的操作
表的创建:create table 表名 (列名1 类型 约束,列2 类型 约束…)
表的删除: 表名
表的更改(结构的更改,不是记录的更新):alter table 表名 add|drop 列名|约束名
插入记录: into 表名…values…
更新记录:表名 set 列名=值 where 条件
删除记录: from 表名 where 条件
4、数据的完整性
数据完整性指的是存储在数据库中的数据的一致性和准确性。
完整性分类:
(1)实体完整性:主键值必须唯一且非空。(主键约束)
(2) 引用完整性(也叫参照完整性):外键要么为空,要么引用主表中存在的记录。(外键约束)。
(3)用户自定义完整性:针对某一具体关系数据库中的约束条件。
5、SQL的查询优化
(1)从表连接的角度优化:尽量使用内连接,因为内连接是两表都满足的行的组合,而外连接是以其中一个表的全部为基准。
(2)尽量使用存储过程代替临时写SQL语句:因为存储过程是预先编译好的SQL语句的集合,这样可以减少编译时间。
(3)从索引的角度优化:对那些常用的查询字段简历索引,这样查询时值进行索引扫描,不读取数据块。
(4)还有一些常用的select优化技巧:
(5)A.只查询那些需要访问的字段,来代替select*
B、将过滤记录越多的where语句向前移:在一个SQL语句中,如果一个where条件过滤的数据库记录越多,定位越准确,则该where条件越应该前移。
6、索引的作用,聚集索引与非聚集索引的区别
索引是一个数据库对象,使用索引,可以是数据库程序无须对整个数据进行扫描,就可以在其中找到目标数据,从而提高查找效率。索引的底层采用的是B树。
聚集索引:根据记录的key再表中排序数据行。
非聚集索引:独立于记录的结构,非聚集所以包含的`key,且每个键值项都有指向该简直的数据行的指针。
聚集索引与非聚集索引的区别:
(1)聚集索引的物理存储按索引排序,非聚集所以的物理存储不按索引排序。
(2) 聚集索引插入,更新数据的速度比非聚集索引慢,单查询速度更快。
(3) 聚集索引的叶级结点保存的是时间的数据项,而非聚集结点的叶级结点保存的是指向数据项的指针。
(4)一个表只能有一个聚集索引(因为只有一种排序方式),但可以有多个非聚集索引。
7、存储过程与函数的区别
(1)函数有返回值,存储过程没有返回值。
(2) 因为存储过程没有返回值,所以不能将存储过程的执行结果赋值给变量;函数有返回值类型,调用函数时,可以将函数的执行结果赋值给变量。也就是说,函数可以在select语句中使用,而存储过程则不能。
B. “春招系列”MySQL面试核心25问(附答案)
篇幅所限本文只写了MySQL25题,像其他的Redis,SSM框架,算法,计网等技术栈的面试题后面会持续更新,个人樱裤整理的1000余道面试八股文会放在文末给大家白嫖,最近有面试需要刷题的同学可以直接翻到文末领取。
如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页。如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置, 频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE(optimize table)来重建表并优化填充页面。
Server层按顺序执行sql的步骤为:
简单概括:
可以分为服务层和存储引擎层两部分,其中:
服务层包括连接器、查询缓存、分析器、优化器、执行器等 ,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
存储引擎层负责数据的存储和提取 。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。现在最常用的存储引擎是InnoDB,它从MySQL 5.5.5版本开始成为了默认的存储引擎。
Drop、Delete、Truncate都表示删除,但是三者有一些差别:
Delete 用来删除表的全部或者一部分数据行,执行Delete之后,用户需要提交(commmit)或者回滚(rollback)来执行删除或者撤销删除,会触发这个表上所有的delete触发器。
Truncate 删除表中的所有数据,这个操作不能回滚,也不会触发这个表上的触发器,TRUNCATE比Delete更快,占用的空间更小。
Drop 命令从数据库中删除表,所有的数据行,索引和权限也会被删除,所有的DML触发器也不会被触发,这个命令也不能回滚。
因此,在不再需要一张表的时候,用Drop;在想删除部分数据行时候,用Delete;在保留表而删除所有数据的时候用Truncate。
隔离级别脏读不可重复读幻影读 READ-UNCOMMITTED 未提交读 READ-COMMITTED 提交读 REPEATABLE-READ 重复读 SERIALIZABLE 可串行化读
MySQL InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ (可重读)
这里需要注意的是 :与 SQL 标准不同的地方在于InnoDB 存储引擎在 REPEATABLE-READ(可重读)事务隔离级别 下使用的是 Next-Key Lock 锁 算法,因此可以避免幻读的产生,这与其他数据库系统(如 SQL Server)是不同的。所以 说InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ(可重读) 已经可以完全保证事务的隔离性要 求,即达到了 SQL标准的SERIALIZABLE(可串行化)隔离级别。
因为隔离级别越低,事务请求的锁越少,所以大部分数据库系统的隔离级别都是READ-COMMITTED(读取提交内 容):,但是你要知道的是InnoDB 存储引擎默认使用 REPEATABLE-READ(可重读)并不会有任何性能损失 。
InnoDB 存储引擎在分布式事务 的情况下一般会用到SERIALIZABLE(可串行化)隔离级别。
主要原因:B+树只要遍历叶子节点就可以实现整棵树的遍历,而且在数据库中基于范围的查询是非常频繁的,而B树只能中序遍历脊空简所有节点,效率太低。
文件与数据库都是需要较大的存储,也就是说,它们都不可能全部存储在内存中,故需要存储到磁盘上。而所谓索引,则为了数据的快速定位与查找,那么索引的结构组织要尽亏帆量减少查找过程中磁盘I/O的存取次数,因此B+树相比B树更为合适。数据库系统巧妙利用了局部性原理与磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入,而红黑树这种结构,高度明显要深的多,并且由于逻辑上很近的节点(父子)物理上可能很远,无法利用局部性。
最重要的是,B+树还有一个最大的好处:方便扫库。
B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了,B+树支持range-query非常方便,而B树不支持,这是数据库选用B+树的最主要原因。
B+树查找效率更加稳定,B树有可能在中间节点找到数据,稳定性不够。
B+tree的磁盘读写代价更低:B+tree的内部结点并没有指向关键字具体信息的指针(红色部分),因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一块盘中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多,相对来说IO读写次数也就降低了;
B+tree的查询效率更加稳定:由于内部结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引,所以,任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当;
视图是一种虚拟的表,通常是有一个表或者多个表的行或列的子集,具有和物理表相同的功能 游标是对查询出来的结果集作为一个单元来有效的处理。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。
而在 MySQL 中,恢复机制是通过回滚日志(undo log)实现的,所有事务进行的修改都会先记录到这个回滚日志中,然后在对数据库中的对应行进行写入。当事务已经被提交之后,就无法再次回滚了。
回滚日志作用:1)能够在发生错误或者用户执行 ROLLBACK 时提供回滚相关的信息 2) 在整个系统发生崩溃、数据库进程直接被杀死后,当用户再次启动数据库进程时,还能够立刻通过查询回滚日志将之前未完成的事务进行回滚,这也就需要回滚日志必须先于数据持久化到磁盘上,是我们需要先写日志后写数据库的主要原因。
InnoDB
MyISAM
总结
数据库并发会带来脏读、幻读、丢弃更改、不可重复读这四个常见问题,其中:
脏读 :在第一个修改事务和读取事务进行的时候,读取事务读到的数据为100,这是修改之后的数据,但是之后该事务满足一致性等特性而做了回滚操作,那么读取事务得到的结果就是脏数据了。
幻读 :一般是T1在某个范围内进行修改操作(增加或者删除),而T2读取该范围导致读到的数据是修改之间的了,强调范围。
丢弃修改 :两个写事务T1 T2同时对A=0进行递增操作,结果T2覆盖T1,导致最终结果是1 而不是2,事务被覆盖
不可重复读 :T2 读取一个数据,然后T1 对该数据做了修改。如果 T2 再次读取这个数据,此时读取的结果和第一次读取的结果不同。
第一个事务首先读取var变量为50,接着准备更新为100的时,并未提交,第二个事务已经读取var为100,此时第一个事务做了回滚。最终第二个事务读取的var和数据库的var不一样。
T1 读取某个范围的数据,T2 在这个范围内插入新的数据,T1 再次读取这个范围的数据,此时读取的结果和和第一次读取的结果不同。
T1 和 T2 两个事务都对一个数据进行修改,T1 先修改,T2 随后修改,T2 的修改覆盖了 T1 的修改。例如:事务1读取某表中的数据A=50,事务2也读取A=50,事务1修改A=A+50,事务2也修改A=A+50,最终结果A=100,事务1的修改被丢失。
T2 读取一个数据,T1 对该数据做了修改。如果 T2 再次读取这个数据,此时读取的结果和第一次读取的结果不同。
悲观锁,先获取锁,再进行业务操作,一般就是利用类似 SELECT … FOR UPDATE 这样的语句,对数据加锁,避免其他事务意外修改数据。当数据库执行SELECT … FOR UPDATE时会获取被select中的数据行的行锁,select for update获取的行锁会在当前事务结束时自动释放,因此必须在事务中使用。
乐观锁,先进行业务操作,只在最后实际更新数据时进行检查数据是否被更新过。Java 并发包中的 AtomicFieldUpdater 类似,也是利用 CAS 机制,并不会对数据加锁,而是通过对比数据的时间戳或者版本号,来实现乐观锁需要的版本判断。
分库与分表的目的在于,减小数据库的单库单表负担,提高查询性能,缩短查询时间。
通过分表 ,可以减少数据库的单表负担,将压力分散到不同的表上,同时因为不同的表上的数据量少了,起到提高查询性能,缩短查询时间的作用,此外,可以很大的缓解表锁的问题。分表策略可以归纳为垂直拆分和水平拆分:
水平分表 :取模分表就属于随机分表,而时间维度分表则属于连续分表。如何设计好垂直拆分,我的建议:将不常用的字段单独拆分到另外一张扩展表. 将大文本的字段单独拆分到另外一张扩展表, 将不经常修改的字段放在同一张表中,将经常改变的字段放在另一张表中。对于海量用户场景,可以考虑取模分表,数据相对比较均匀,不容易出现热点和并发访问的瓶颈。
库内分表 ,仅仅是解决了单表数据过大的问题,但并没有把单表的数据分散到不同的物理机上,因此并不能减轻 MySQL 服务器的压力,仍然存在同一个物理机上的资源竞争和瓶颈,包括 CPU、内存、磁盘 IO、网络带宽等。
分库与分表带来的分布式困境与应对之策 数据迁移与扩容问题----一般做法是通过程序先读出数据,然后按照指定的分表策略再将数据写入到各个分表中。分页与排序问题----需要在不同的分表中将数据进行排序并返回,并将不同分表返回的结果集进行汇总和再次排序,最后再返回给用户。
不可重复读的重点是修改,幻读的重点在于新增或者删除。
视图是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询;不包含任何列或数据。使用视图可以简化复杂的 sql 操作,隐藏具体的细节,保护数据;视图创建后,可以使用与表相同的方式利用它们。
视图不能被索引,也不能有关联的触发器或默认值,如果视图本身内有order by 则对视图再次order by将被覆盖。
创建视图:create view xxx as xxxx
对于某些视图比如未使用联结子查询分组聚集函数Distinct Union等,是可以对其更新的,对视图的更新将对基表进行更新;但是视图主要用于简化检索,保护数据,并不用于更新,而且大部分视图都不可以更新。
B+tree的磁盘读写代价更低,B+tree的查询效率更加稳定 数据库索引采用B+树而不是B树的主要原因:B+树只要遍历叶子节点就可以实现整棵树的遍历,而且在数据库中基于范围的查询是非常频繁的,而B树只能中序遍历所有节点,效率太低。
B+树的特点
在最频繁使用的、用以缩小查询范围的字段,需要排序的字段上建立索引。不宜:1)对于查询中很少涉及的列或者重复值比较多的列 2)对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。
如果一个索引包含(或者说覆盖)所有需要查询的字段的值,我们就称 之为“覆盖索引”。
我们知道在InnoDB存储引 擎中,如果不是主键索引,叶子节点存储的是主键+列值。最终还是要“回表”,也就是要通过主键再查找一次,这样就 会比较慢。覆盖索引就是把要查询出的列和索引是对应的,不做回表操作!
举例 :
学号姓名性别年龄系别专业 20020612李辉男20计算机软件开发 20060613张明男18计算机软件开发 20060614王小玉女19物理力学 20060615李淑华女17生物动物学 20060616赵静男21化学食品化学 20060617赵静女20生物植物学
主键为候选键的子集,候选键为超键的子集,而外键的确定是相对于主键的。
C. 数据库的面试会问什么样的问题
目前在职场中很难找到非常合格的数据库开发人员。有人说:“sql开发是一门语言,它很容易学,但是很难掌握。”
在面试应聘的sql Server数据库开发人员时,我运用了一套标准的基准技术问题。下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题。它们按照从易到难的顺序排列。当你问到关于主键和外键的问题时,后面的问题都十分有难度,因为答案可能会更难解释和说明,尤其是在面试的情形下。
你能向我简要叙述一下sql Server 2000中使用的一些数据库对象吗?
你希望听到的答案包括这样一些对象:表格、视图、用户定义的函数,以及存储过程;如果他们还能够提到像触发器这样的对象就更好了。如果应聘者不能回答这个基本的问题,那么这不是一个好兆头。
null是什么意思?
null(空)这个值是数据库世界里一个非常难缠的东西,所以有不少应聘者会在这个问题上跌跟头您也不要觉得意外。
null这个值表示unknown(未知):它不表示“”(空字符串)。假设您的sql Server数据库里有ANSI_nullS,当然在默认情况下会有,对null这个值的任何比较都会生产一个null值。您不能把任何值与一个 unknown值进行比较,并在逻辑上希望获得一个答案。您必须使用IS null操作符。
什么是索引?sql Server 2000里有什么类型的索引?
任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。一些经验不太多的开发人员能够回答这个问题,但是有些地方会说不清楚。
简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。在sql Server里,它们有两种形式:聚集索引和非聚集索引。聚集索引在索引的叶级保存数据。这意味着不论聚集索引里有表格的哪个(或哪些)字段,这些字段都会按顺序被保存在表格。由于存在这种排序,所以每个表格只会有一个聚集索引。非聚集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁盘上数据的指针。它允许每个表格有多个非聚集索引。
什么是主键?什么是外键?
主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。
什么是触发器?sql Server 2000有什么不同类型的触发器?
让未来的数据库开发人员知道可用的触发器类型以及如何实现它们是非常有益的
触发器是一种专用类型的存储过程,它被捆绑到sql Server 2000的表格或者视图上。在sql Server 2000里,有INSTEAD-OF和after两种触发器。INSTEAD-OF触发器是替代数据操控语言(Data Manipulation Language,dml)语句对表格执行语句的存储过程。例如,如果我有一个用于TableA的INSTEAD-OF-UPDATE触发器,同时对这个表格执行一个更新语句,那么INSTEAD-OF-UPDATE触发器里的代码会执行,而不是我执行的更新语句则不会执行操作。
after触发器要在dml语句在数据库里使用之后才执行。这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。
您如何确一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值,而这些值同时在名为TableA的表格的Fld1字段里?
这个与关系相关的问题有两个可能的答案。第一个答案(而且是您希望听到的答案)是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。这个字段就是候选键(通常是另外一个表格的主键)。
另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。由于这个原因,微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。
对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?
你正在寻找进行与数据操控有关的应聘人员。对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。
你可以用什么来确保表格里的字段只接受特定范围里的值?
这个问题可以用多种方式来回答,但是只有一个答案是“好”答案。您希望听到的回答是Check限制,它在数据库表格里被定义,用来限制输入该列的值。
触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。
<b?返回参数和output参数之间的区别是什么?>如果应聘者能够正确地回答这个问题,那么他的机会就非常大了,因为这表明他们具有使用存储过程的经验。
返回参数总是由存储过程返回,它用来表示存储过程是成功还是失败。返回参数总是int数据类型。
OUTPUT参数明确要求由开发人员来指定,它可以返回其他类型的数据,例如字符型和数值型的值。(可以用作输出参数的数据类型是有一些限制的。)您可以在一个存储过程里使用多个OUTPUT参数,而您只能够使用一个返回参数。
什么是相关子查询?如何使用这些查询?
经验更加丰富的开发人员将能够准确地描述这种类型的查询。
相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。</b?返回参数和output参数之间的区别是什么?>
D. 数据库存储过程有哪些,面试题
/*
系统存储过程很多,有些常用,有些不常用
常用:
sp_attach_db附加数据库到一个服务器中
sp_columns返回在当前环境中列的信息
sp_databases列出当前系统中的数据库
sp_configure显示或修改当前服务器的全局配置
sp_depends显示数据库对象的依赖信息
sp_executesql执行动态的T-SQL语句
sp_help报告有关数据库对象的信息
sp_helpdb返回指定数据库或全部数据库的信息
sp_helptext显示规则、默认值、存储过程、触发器、视图等的未加密的文本定义信息
sp_indexes返回指定远程表的索引信息
sp_lock返回有关锁的信息
sp_password增加或者修改指定login的口令
sp_rename更改用户创建的数据库对象名称
sp_renamedb更改数据库名称
sp_spaceused显示数据库的空间使用情况
sp_tables返回在当前环境中可以被查询的对象的列表
sp_who提供当前用户和进程的信息
不常用:
sp_addlinkedserver创建一个允许执行分布式查询的链接服务器
sp_addlinkedsrvlogin在本地服务器和远程服务器之间创建login帐户的映射关系
sp_addlogin创建一个新的login帐户
sp_add_agent_parameter在代理文件中增加一个参数
sp_add_agent_profile为复制代理增加一个代理文件
sp_add_alert创建一个警报
sp_add_category在服务器上,增加一种作业、警报或者操作员的特定分类
sp_add_data_file_recover_suspect_db当数据库复原不能完成时,向文件组增加一个数据文件
sp_add_file_recover_suspect_db对于复原有问题的数据库增加一个文件
sp_add_job增加一个sqlserveragent可以执行的作业
sp_add_jobschele为作业创建调度
sp_add_jobserver把指定的作业增加到指定服务器上
sp_add_jobstep在作业中增加一步或一个操作
sp_add_log_file_recover_suspect_db当数据库复原不能完成时,向文件组增加一个日志文件
sp_add_notification为警报创建一个通知
sp_add_operator为警报或者作业创建一个操作员
sp_add_targetservergroup增加指定的服务器组
sp_add_targetsvrgrp_member在指定的目标服务器组增加一个目标服务器
sp_addalias在数据库中为login帐户增加一个别名
sp_addapprole在数据库中增加一个特殊的应用程序角色
sp_addarticle创建文章,并把该文章添加到出版物中
sp_adddistpublisher创建一个使用本地分布服务器的出版服务器
sp_adddistributiondb在分布服务器上创建一个新的distribution数据库
sp_adddistributor增加一个分布服务器
sp_addextendedproc在系统中增加一个扩展存储过程
sp_addgroup在当前数据库中增加一个组
sp_addmergearticle为一个已有的合并出版物创建一个文章
sp_addmergefilter为了连接另外一个表,创建一个合并过滤器
sp_addmergepublication创建一个新的合并出版物
sp_addmergepullsubscription增加一个拉回类型的订阅物
sp_addmergepullsubscription_agent在订阅服务器上,为合并拉回订阅物创建一个代理
sp_addmergesubscription创建一个推出或者拉回类型的订阅物
sp_addmessage在系统中增加一个新的错误消息
sp_addpublicaton创建一个快照复制或者事务复制出版物
sp_addpublicaton_snapshot创建一个快照代理
sp_addpullsusscription在当前订阅服务器的数据库中增加一个拉回或者匿名订阅物
sp_addpullsusscription_agent在订阅服务器的数据库中增加一个新的代理
sp_addremotelogin在本地服务器上增加一个远程login帐户,允许执行远程存储过程调用
sp_addrole在当前数据库中增加一个角色
sp_addrolemember为当前数据库中的一个角色增加一个安全性帐户
sp_addserver添加一个远程或者本地服务器
sp_addsrvrolemember为固定的服务器角色增加一个成员
sp_addsubscriber增加一个新的订阅服务器
sp_addsubscriber_schele为分布代理和合并代理增加一个调度
sp_addsubscription订阅文章并且设置订阅服务器的状态
sp_addsynctrigers在订阅服务器上创建一个立即修改触发器
sp_addtabletocontents在合并跟踪表中插入一个参考
sp_addtype创建一个用户定义的数据类型
sp_admpdevice增加一个备份设备
sp_adser在当前数据库中为一个新用户增加一个安全性帐户
sp_altermessage修改错误信息的状态
sp_addly_job_to_targets把作业应用到一个或者多个目标服务器
sp_approlepassword在当前数据库中改变应用程序角色的口令
sp_aarticle_validation为指定的文章初始化确认请求
sp_aarticlecolumn指定在文章中使用的列
sp_aarticlefilter创建一个用于水平过滤数据的过滤器
sp_articleview当表被过滤时,为文章创建一个同步化对象
sp_attach_single_file_db在当前服务器中,附加一个只有一个数据文件的数据库
sp_aautostats对于一个指定的索引或统计,自动显示updatestatistics的状态
sp_bindefault把默认值绑定到列或用户定义的数据类型上
sp_bindrule把规则绑定到列或用户定义的数据类型上
sp_bindsession绑定或解除绑定与实例中的其它事务的连接
sp_browsereplcmds在分布数据库中返回一种可读格式的结果集
sp_catalogs返回指定连接服务器中的系统目录列表,在本地服务器中等价于数据库列表
sp_certify_removable确认在可移动介质上用于分布的数据库是否正确配置
sp_change_agent_parameter修改复制代理配置使用的参数
sp_change_agent_profile修改复制代理配置使用的配置参数
sp_change_users_login修改login与当前数据库中用户之间的关系
sp_changearticle改变文章的属性
sp_changedbowner改变当前数据库的所有者
sp_changedistpublisher改变分布出版服务器的属性
sp_changedistributor_password改变分布服务器的口令
sp_changedistributor_property改变分布服务器的属性
sp_changedistribtutiondb改变分布数据库的属性
sp_changegroup改变安全性帐户所属的角色
sp_changemergearticle改变合并文章的属性
sp_changemergefilter改变一些合并过滤器的属性
sp_changemergepublication改变合并出版物的属性
sp_changemergepullsubscription改变合并拉回出版物的属性
sp_changemergesubscription改变合并的推出或者拉回出版物的属性
sp_changeobjectowner改变对象的所有者
sp_changepublication改变出版物的属性
sp_changesubscriber改变用于订阅服务器的选项
sp_changesubscriber_schele改变用于分布式代理和事务代理的订阅服务器的调度
sp_changesubstatus改变订阅服务器的状态
sp_column_privileges返回列的权限信息
sp_column_privileges_ex返回在链接服务器上指定表的列的权限信息
sp_columns_ex返回在链接服务器上列的信息
sp_create_removable创建一个可移动介质数据库
sp_createstats创建单列的统计信息
sp_cursor用于请求定位更新
sp_cursor_list报告当前打开的服务器游标属性
sp_cursorclose关闭和释放游标
sp_cursorfetch从游标中取出数据行
sp_cursoropen定义与游标和游标选项相关联的SQL语句,然后填充游标
sp_cursoroption用于设置各种游标选项
sp_cycle_errorlog关闭错误日志文件重新开始错误记录
sp_datatype_info返回当前环境支持的数据类型信息
sp_dbfixedrolepermission显示每一个固定数据库角色的许可
sp_dboption显示或修改数据库选项
sp_dbremove删除数据库和与该数据库相关的所有文件
sp_defaultdb设置登录帐户的默认数据库
sp_defaultlanguage设置登录帐户的默认语言
sp_delete_alert删除警报
sp_delete_backuphistory删除备份和恢复的历史信息
sp_delete_category删除指定类型的作业、警报和操作员
sp_delete_job删除一个作业
sp_delete_jobschele删除作业的调度
sp_delete_jobserver删除指定的目标服务器
sp_delete_jobstep从作业中删除指定的作业步骤
sp_delete_notfication删除发送给某个操作员的所有通知
sp_delete_operator删除操作员
sp_delete_targetserver从可以使用的目标服务器列表中删除指定的服务器
sp_delete_targetservergroup删除指定的目标服务器组
sp_delete_targetsvrgrp_member从目标服务器组中删除一个目标服务器
sp_deletemergeconflictrow删除冲突表中的记录行
sp_denylogin防止window用户或群组连接到sqlserver
sp_describe_cursor报告服务器游标的属性
sp_describe_cursor_columns报告在服务器游标的结果集中列的属性
sp_describe_cursor_tables报告服务器游标参考的基表信息
sp_detach_db分享服务器中的数据库
sp_drop_agentparameger删除配置文件中的一个或者多个参数
sp_drop_profile删除配置文件
sp_dropalias删除一个帐户的别名
sp_dropapprole删除当前数据库中的应用程序角色
sp_droparticle从出版物中删除一篇文章
sp_dropdevice删除数据库或者备份设备
sp_dropdistpublisher删除出版服务器
sp_dropdistributiondb删除分布数据库
sp_dropdistributor删除分布服务器
sp_dropdropextendedproc删除一个扩展存储过程
sp_dropgroup从当前数据库中删除角色
sp_droplinkedsrvlogin删除一个本地服务器和连接服务器的映射帐户
sp_droplogin删除一个登录帐户
sp_dropmergearticle从合并出版物中删除一篇文章
sp_dropmergefilter删除一个合并过滤器
sp_dropmergepublication删除一个合并出版物和与其相关的快照复制
sp_dropmergepullsubscription删除一个合并拉回订购物
sp_dropmergesubscription删除一个订阅物
sp_dropmessage删除一个消息
sp_droppublication删除出版物和与其相关的文章
sp_droppullsubscription删除当前订阅服务器数据库中的订阅物
sp_dropremotelogin删除一个远程登录帐户
sp_droprole从当前数据库中删除一个角色
sp_droprolemember从当前数据库中的一个角色中删除一个安全性帐户
sp_dropserver删除一个远程或者连接服务器列表中的服务器
sp_dropsrvrolemember从一个固定的服务器角色中删除一个帐户
sp_dropsubscriber删除一个订阅服务器
sp_dropsubscription删除订阅物
sp_droptype删除一种用户定义的数据类型
sp_dropuser从当前数据库中删除一个用户
sp_dropdropwebtask删除以前版本定义的web任务
sp_dsninfo从一个与当前服务器相关的分布服务器返回ODBC和OLEDB数据源的信息
sp_mpparamcmd返回存储在分布数据库中的参数化命令的详细信息
sp_enumcodepages返回一个字符集和代码页的列表
sp_enumcustomresovers返回所有可用的定制解决方案表表
sp_enumdsn返回所有可用的odbc和oledb数据源列表
sp_enumfullsubscribers返回订阅服务器的列表
sp_expired_subscription_cleanup周期性地检查订阅物的状态是否失效
sp_fkeys返回当前环境的外键信息
sp_foreignkeys返回参照连接服务器的表的主键的外键
sp_fulltext_catalog创建和删除全文本目录
sp_fulltext_column指定某一个列是否参加全文本索引
sp_fulltext_database从当前数据库中初始化全文本索引
sp_fulltext_service改变MicrosoftSearchService属性
sp_fulltext_table标记用于全文本索引的表
sp_generatefilters在外键表上创建一个过滤器
sp_get_distributor确定一个分布服务器是否安装在某个服务器上
sp_getbindtoken创建一个绑定的连接文本
sp_getmergedeletype返回合并删除的类型
sp_grant_publication_access在出版物的访问列表中增加一个用户
sp_grantdbaccess在当前数据库中增加一个安全性帐户
sp_grantlogin允许Windows用户或群组连接到SQLServer
sp_help_agent_default检索作为参数传送的代理类型的默认配置的标识号
sp_help_agent_parameter返回代理配置的所有参数
sp_help_agent_profile返回指定代理的配置
sp_help_alert报告有关警报的信息
sp_help_category提供有关作业、警报、操作员的指定种类的信息
sp_help_downloadlist列出有关作业的信息
sp_help_fulltext_catalogs返回有关全文本索引表的信息
sp_help_fulltext_columns返回标记全文本索引的列信息
sp_help_fulltext_columns_cursor使用游标检索标记为全文本的索引列
sp_help_fulltext_tables返回标记为全文本索引的表
sp_help_fulltext_tables_cursor使用游标返回标记为全文本索引的表
sp_help_job返回有关作业的信息
sp_help_jobhistory提供有关作业的历史信息
sp_help_jobschele返回作业的调度信息
sp_help_jobserver返回给定作业的服务器信息
sp_help_jobstep返回作业的步骤信息
sp_help_operator返回有关操作员的信息
sp_help_publication_access返回可以访问指定出版物的帐户列表
sp_help_targetserver列出全部目标服务器
sp_help_targetservergroup列出指定服务器组中的全部目标服务器
sp_helparticle显示有关文章的信息
sp_helpconstraint返回有关约束的类型、名称等信息
sp_helpdbfixedrole返回固定的服务器角色的列表
sp_helpdevice返回有关数据库文件的信息
sp_helpdistpublisher返回充当分布服务器的出版服务器的属性
sp_helpdistributiondb返回分布数据库的属性信息
sp_helpdistributor列出分布服务器、分布数据库、工作目录等信息
sp_helpextendproc显示当前定义的扩展存储过程信息
sp_helpfile返回与当前数据库相关的物理文件信息
sp_helpfilegroup返回与当前数据库相关的文件组信息
sp_helpgroup返回当前数据库中的角色信息
sp_helpindex返回有关表的索引信息
sp_helplanguage返回有关语言的信息
sp_helplinkedsrvlogin返回链接服务器中映射的帐户信息
sp_helplogins返回有关login和与其相关的数据库用户信息
sp_helpmergearticle返回有关合并文章的信息
sp_helpmergearticleconflicts返回有关冲突的出版物中的文章信息
sp_helpmergeconflictrows返回在指定冲突表中的行
sp_helpmergefilter返回有关合并过滤器的信息
sp_helpmergepublication返回有关合并出版物的信息
sp_helpmergepullsubscription返回有关拉回订阅物的信息
sp_helpmergesubscription返回有关推出订阅物的信息
sp_help_notification报告对于给定操作员的警报信息
sp_helppublication返回有关出版物的信息
sp_helprole返回当前数据库中的角色信息
sp_helprolemember返回当前数据库中角色成员的信息
sp_helprotect返回有关用户许可的信息
sp_helpserver显示特定远程或者复制服务器的信息
sp_helpsort显示系统的排列顺序和字符集的信息
sp_helpsrvrole显示系统中的固定服务器角色列表
sp_helpsrvrolemember显示系统中的固定服务器角色成员的信息
sp_helpsubscrberinfo显示有关订阅服务器的信息
sp_helpsubscription显示有特定出版物等有关的订阅物信息
sp_helpsubscription_properties检索安全性信息
sp_helptrigger显示触发器的类型
sp_helpuser显示当前数据库中的用户、WindowsNT用户和组、角色等信息
sp_indexoption为用户定义的索引设置选项
sp_link_publication设置立即修改订阅服务器的同步化触发器使用的配置和安全性信息
sp_linkedservers返回在本地服务器上定义的链接服务器的列表
sp_makewebtask创建一个执行html文档的任务
sp_manage_jobs_by_login删除或者重新指定属于login的作业
sp_mergemmyupdate制作用于合并复制的修改备份
sp_mergesubscription_cleanup删除元数据
sp_monitor显示系统的统计信息
sp_msx_defect从多个服务器操作中删除当前服务器
sp_msx_enlist增加当前服务器到可用的目标服务器列表中
sp_pkeys返回某个表的主键信息
sp_post_msx_operation插入一些目标服务器可以执行的信息
sp_primarykeys返回主键列的信息
sp_processmail使用扩展存储过程修改邮件信息
sp_procoption设置或者显示过程选项
sp_publication_validation初始化文章校验请求
sp_purge_jobhistory删除作业的历史记录
sp_recompile使存储过程和触发器在下一次运行时重新编译
sp_refreshsubscriptions在拉回出版物中增加订阅物到文章中
sp_refreshview刷新指定视图的元数据
sp_reinitmergepullsubscription标记一个合并拉回订阅
sp_reiniteergesubscription标记一个合并订阅
sp_reinitpullsubscription标记一个事务订阅或者匿名订阅
sp_reinitsubscription重新初始化订阅
sp_remoteoption显示或者修改远程登录帐户的选项
sp_remove_job_from_targets从给定的目标服务器中删除指定的作业
sp_removedbreplication从数据库中删除所有的复制对象
sp_replcounters返回复制的统计信息
sp_repldone修改服务器做的分布事务的统计信息
sp_replflush处理文章的高速缓冲存储区
sp_replication_agent_checkup检查每一个分布数据库
sp_replicationdboption在当前数据库中设置复制数据库的选项
sp_replsetoriginator用于在事务复制中检测循环登录
sp_replshowcmds返回标记复制的事务命令
sp_repltrans返回在出版数据库事务日志中的所有事务的结果集
sp_resetstatus重新设置异常数据库的形态
sp_resync_targetserver重新同步所有的多服务器作业
sp_revoke_publication_access从出版数据库的访问列表中删除login帐户
sp_revokedbaccess从当前数据库中删除安全性帐户
sp_revokelogin删除系统的login帐户
sp_script_synctran_commands生成一个可以用于立即修改订阅物的脚本
*/
E. Oracle 存储过程面试题
提供参考
DECLARE
BEGIN
mergeINTOt17_organt1
USINGt40_organt2
ONt1.organno=t2.organno
WHENmatchedTHEN
UPDATE
SETt1.organname=t2.organname,
t1.organlevel=t2.organlevel,
t1.uporgankey=t2.uporgankey,
t1.flag=t2.flag;
COMMIT;
END;
/
F. 面试问 说说对Oracle存储过程的理解,应该从哪方面说呢
首先从功能上讲procere能完成纯SQL完成不了的事情,比如需要一些结构化的语言,循环等等
其次可以说说存储过程于自定义函数的区别,函数只有一个输出值,procere功能更多
第三说说运用,存储过程方便用于job调用,便于每天自动后台执行完成自定义batch的需要
这样说肯定就ok了,还有什么不懂的可以追问
G. 面试官问执行存储过程需要多久,该怎么回答啊
回答:
存储过程的执行时间,要看过程体内各个事务执行操作的时间,以及过程体本身逻辑的复杂程度。另外还要看过程体中所操作的对象的数量级,操作对象数量多需要的时间长,操作对象数量少需要的时间短。