㈠ 面试中问到HIBERNATE的缓存机制请问下该怎么回答
首先说下Hibernate缓存的作用(即为什么要用缓存机制),然后再具体说说Hibernate中缓存的分类情况,最后可以举个具体的例子。
㈡ “春招系列”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生物植物学
主键为候选键的子集,候选键为超键的子集,而外键的确定是相对于主键的。
㈢ 数据库存储过程有哪些,面试题
数据库存储过程有哪些
/*
系统存储过程很多,有些常用,有些不常用
常用:
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 增加一个sql server agent可以执行的作业
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 对于一个指定的索引或统计,自动显示update statistics的状态
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用户或群组连接到 sql server
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和OLE DB数据源的信息
sp_mpparamcmd 返回存储在分布数据库中的参数化命令的详细信息
sp_enumcodepages 返回一个字符集和代码页的列表
sp_enumcustomresovers 返回所有可用的定制解决方案表表
sp_enumdsn 返回所有可用的odbc和ole db数据源列表
sp_enumfullsubscribers 返回订阅服务器的列表
sp_expired_subscription_cleanup 周期性地检查订阅物的状态是否失效
sp_fkeys 返回当前环境的外键信息
sp_foreignkeys 返回参照连接服务器的表的主键的外键
sp_fulltext_catalog 创建和删除全文本目录
sp_fulltext_column 指定某一个列是否参加全文本索引
sp_fulltext_database 从当前数据库中初始化全文本索引
sp_fulltext_service 改变Microsoft Search Service属性
sp_fulltext_table 标记用于全文本索引的表
sp_generatefilters 在外键表上创建一个过滤器
sp_get_distributor 确定一个分布服务器是否安装在某个服务器上
sp_getbindtoken 创建一个绑定的连接文本
sp_getmergedeletype 返回合并删除的类型
sp_grant_publication_access 在出版物的访问列表中增加一个用户
sp_grantdbaccess 在当前数据库中增加一个安全性帐户
sp_grantlogin 允许Windows用户或群组连接到 SQL Server
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 显示当前数据库中的用户、Windows NT用户和组、角色等信息
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 生成一个可以用于立即修改订阅物的脚本
*/
㈣ 程序员面试必备PHP基础面试题 – 第十一天
一、两张表 city表和province表。分别为城市与省份的关系表。
表名:city
id City Provinceid
1 广州 1
2 深圳 1
3 惠州 1
4 长沙 2
5 武汉 3
………. 广州
表名称:province:
id Province
1 广东
2 湖南
3 湖北
……….
1、写一条sql语句关系两个表,实现:显示城市的基本信息。显示字段:城市id ,城市名, 所属省份 。
如:
Id(城市id) Cityname(城市名) Privence(所属省份)
2、如果要统计每个省份有多少个城市,请用group by 查询出来。显示字段:省份id ,省份名,包含多少个城市。
二、主键 和外键表示什么?一般用于做什么?
主键:能够唯一表示数据表中的每个记录的字段或者字段的组合就称为主键。一个主键是唯一识别一个表的每一行记录,但这只是其作用的一疗分,主键的主要作用是将记录和存放在其他表中的数据进行关联,在这一点上,主键是不同表中各记录间的简单指针,主键约整就是确定表中的每一条记录,主键不能是空值,唯一约束是用于指定一个或多个列的组合值具有唯一性,以防止在列中输入重复的值,所以,主键的值对用户而言是没有什么意义,并且和它赋予的值也没有什么特别联系。
外键:若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性。A为基本表,B为信息表。
在数据库中,常常不只是一个表,这些表之间也不是相互独立的,不同的表之间需要建立一种关系,才能将它们的数据相互沟通,而在这个沟通过程中,就需要表中有一个字段作为标志,不同的记录对应的字段取值不能相同,也不能是空白的,通过这个字段中不同的值可以区别各条记录,就像我们区别不同的人,每个人都有名字,但它却不能作为主键,因为人名很容易出现重复,而身份证号是每个人都不同的,所以可以根据它来区别不同的人,数据库的表中作为主键的段段就要像人的身份证号一样,必须是每个记录的值都不同,这才能根据
主键的值来确定不同的记录。
关系:外键一定是另外某个表的主键。
三、select now(),Date_ADD(now(),INTERVAL 14 day),Date_SUB(now(),INTERVAL 3 Day) from table; 会获得什么内容,请写出来。
会获得三条数据:
第一条:当前时间;
第二条:当前时间加上14天;
第三条:当前时间减去3天。
四、您所知道的MYSQL 数据库备份,还原方式有哪几种?
备份:
一,搭建主从架构,master-slave,通过binlog文件同步复制主库的数据,也可以直接通过binlog文件恢复数据。
二,通过系统计划任务执行mysqlmp做周期性全备份。
三,物理备份,直接拷贝数据文件、参数文件、日志文件。
还原:
一.通过mysql操作工具,如phpmyadmin,sqlyog等导入备份过的数据库文件。
二.将物理备份的文件拷贝到mysql的data目录下
五、内容管理系统中,表message有如下字段
id 文章id
title 文章标题
content 文章内容
category_id 文章分类id
hits 点击量
创建上表,写出MySQL语句
六、同样上述内容管理系统:表comment记录用户回复内容,字段如下
comment_id 回复id
id 文章id,关联message表中的id
comment_content 回复内容
现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面
文章id 文章标题 点击量 回复数量
用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示0
七、内容管理系统,表category保存分类信息,字段如下
category_id int(4) not null auto_increment;
category_name varchar(40) not null;
用户输入文章时,通过选择下拉菜单选定文章分类
写出如何实现这个下拉菜单
八、PHP文件操作
1、内容管理系统:用户提交内容后,系统生成静态HTML页面;写出实现的基本思路
2、简单描述用户修改发布内容的实现流程和基本思路
1)当用户提交后生成一个由url地址MD5后的文件的编译页面,用文件处理file函数生成一个模板合成页,判断模板编译页是否有,模板页无或者编译页的创建时间戳小于模板页的修改时间都会从新生成编译页面,编译后的页面会调用对应数据库的值显示在页面中,通过对内存数据的读取释放,显示出我们看到的静态数据,然后用file文件将其保存起来生成静态的页面
2)当用户修改了发布内容都会修改数据相关的内容,并通过编译页面更新静态数据并用文件的方式缓存起来,当用户查看时将不做任何数据库查找,直接调用该缓存文件即可
㈤ java面试题中一般数据库会问什么内容(数据库常问的面试题)
数据库基础(面试常见题)
一、数据库基础
1.数据抽象:物理抽象、概念抽象、视图级抽象,内模式、模式高芹神、外模式
2.SQL语言包括数据定义、数据操纵(Data),数据控制(DataControl)
数据定义:CreateTable,AlterTable,DropTable,Craete/DropIndex等
数据操纵:Select,insert,update,delete,数据控制:grant,revoke
3.SQL常用命令:
CREATETABLEStudent(
IDNUMBERPRIMARYKEY,NAMEVARCHAR2(50)NOTNULL);//建表
CREATEVIEWview_nameAS
Select*FROMTable_name;//建视图
CreateUNIQUEINDEXindex_nameONTableName(col_name);//建索引
INSERTINTOtablename{column1,column2,}values(exp1,exp2,);//插入
INSERTINTOViewname{column1,column2,}values(exp1,exp2,);//插入视图实际影响表
UPDATEtablenameSETname=’zang3’condition;//更新数据
;//删除
GRANT(Select,delete,)ON(对象)TOUSER_NAME[WITHGRANTOPTION];//授权
REVOKE(权限表)ON(对象)FROMUSER_NAME[WITHREVOKEOPTION]//撤权
列出工作人员及其领导的名字:首渣
SelectE.NAME,S.NAMEFROMEMPLOYEEES
WHEREE.SUPERName=S.Name
4.视图:
5.完整性约束:实体完整性、参照完整性、用户定义完整性戚亏
㈥ 数据库面试题:
create database aaa;
create table users(id int NOT NULL AUTO_INCREMENT,
user_name char(10),money char(10),add_time datetime
PRIMARY KEY (`id`))ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
3.insert into users values(2,'a1','a11',current_date),(3,'a1','a11',current_date),(4,'a1','a11',current_date),(5,'a1','a11',current_date),(6,'a1','a11',current_date),(7,'a1','a11',current_date),(8,'a1','a11',current_date),(9,'a1','a11',current_date),(10,'a1','a11',current_date),(11,'a1','a11',current_date);
4.参考第二步
5.参考第三步
6.select a.username,a.money,b.email,b.user_phone,b.weigh from users a,user_info b
where a.id=b.id and a.id=XXX(你指定的);
7.mysqlmp -uroot -p aaa > /tmp/aaa.sql (需要输入密码)
我用的是mysql上的写法
㈦ 15个 MySQL 基础面试题,DBA 们准备好了吗
问题1:你如何确定 MySQL 是否处于运行状态?
答案: 在Debian 上运行命令 service mysql status,然后看输出即可。
在 RedHat 或者 centos 上运行命令 service mysqld status,然后看看输出即可。
问题2:如何开启或停止 MySQL 服务?
答案:运行命令 service mysqld start 开启服务;
运行命令 service mysqld stop 停止服务。
问题3:如何通过 Shell 登入 MySQL?
答案:运行命令 mysql -u用户名 -p登陆密码
问题4:如何列出所有数据库?
答案:运行命令 show databases;
问题5: 如何切换到某个数据库并在上面工作?
答案:(1)运行命令 use database_name;
(2)进入名为 database_name 的数据库。
问题6:如何列出某个数据库内所有表?
答案:在当前数据库运行命令 show tables;
问题7:如何获取表内所有 Field 对象的名称和类型?
答案:运行命令 describe 表名;
简写为desc 表名;
问题8:如何删除表?
答案:运行命令 drop table 表名;
问题9:如何删除数据库?
答案:运行命令 drop database 数据库名;
问题10:如何查看表内所有数据?
答案:运行命令 select * from 表名;
问题11:如何从表(比如 oc_users )中获取一个 field 对象(比如 uid)的所有数据?
答案:运行命令 select uid from oc_users;
问题12:假设你有一个名为 ‘xyz’ 的表,它存在多个字段,如 ‘createtime’和 ‘engine’,
名为 engine 的字段由 ‘Memoty’ 和 ‘MyIsam’ 两种数值组成。
如何只列出 ‘createtime’ 和 ‘engine’ 这两列,并且 engine 的值为 ‘MyIsam’?
答案:运行命令 select create_time, engine from xyz where engine = “MyIsam” ;
问题13:如何列出表 ‘xrt’ 内 name 域值为 ‘tecmint’,web_address 域值为 ‘tecmint.com’ 的所有数据?
答案:运行命令 select * from xrt where name = “tecmint” and web_address = “tecmint.com” ;
问题14:如何列出表 ‘xrt’ 内 name 域值不为 ‘tecmint’,web_address 域值为 ‘tecmint.com’ 的所有数据?
答案:运行命令 select * from xrt where name != “tecmint” and web_address = “tecmint.com”;
问题15:如何知道表内行数?
答案:运行命令 select count(*) from 表名;
㈧ SQL数据库面试题 急急急
a)select pname as '商品名',avg(qty) as 平均销售量 from s,p,m where m.city='上海' and s.mno=m.mno and p.pno=s.pno,select p.Pno,p.pname,sum(s.qty)
from s left join p on s.pno=p.pno left join m on p.Mno=m.Mno
where m.city='上海市'
group by p.Pno,p.pname,p.city,p.color
b)、先删除Sale表的外键PNO,再删除gds表。
c)联系:视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系
区别:1、视图是已经编译好的sql语句。而表不是
2、视图没有实际的物理记录。而表有。
3、表是内容,视图是窗口
4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时四对它进行修改,但视图只能有创建的语句来修改
5、表是内模式,视图是外模式
6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
8、视图的建立和删除只影响视图本身,不影响对应的基本表。
㈨ Oracle数据库的面试题目及答案
Oracle数据库的面试题目及答案
基础题目:
1. 比较truncate和 命令
解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要 rollback segment .
而Delete是DML操作, 需要rollback segment 且花费较长时间.
【相同点
truncate和不带where子句的, 以及drop都会删除表内的数据
不同点:
1. truncate和 只姿轿删除数据不删除表的结构(定迹谈肆义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的.存储过程/函数将保留,
但是变为invalid状态.
2.语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
3.语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使侍渣用reuse storage; truncate会将高水线复位(回到最开始).
4.速度,一般来说: drop>; truncate >;
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及
使用上,想删除部分数据行用,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用.
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据
】
2.Oracle中,需要在查询语句中把空值(NULL)输出为0,如何处理?
答案:nvl(字段,0).
nvl( ) 函数
从两个表达式返回一个非 null 值。
语法
NVL(eExpression1, eExpression2)
参数
eExpression1, eExpression2
如果 eExpression1 的计算结果为 null 值,则 NVL( ) 返回 eExpression2。如果 eExpression1 的计算结果不是 null 值,
则返回 eExpression1。eExpression1 和 eExpression2 可以是任意一种数据类型。如果 eExpression1 与 eExpression2
的结果皆为 null 值,则 NVL( ) 返回 .NULL.。
返回值类型
字符型、日期型、日期时间型、数值型、货币型、逻辑型或 null 值
说明
在不支持 null 值或 null 值无关紧要的情况下,可以使用 NVL( ) 来移去计算或操作中的 null 值。
select nvl(a.name,空得) as name from student a join school b on a.ID=b.ID
注意:两个参数得类型要匹配
3.Oracle中char和varchar2数据类型有什么区别?有数据”test”分别存放到10)和varchar2(10)类型的字段中,
其存储长度及类型有何区别?
答案:
区别: 1).CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“test",对于CHAR (10),