MySQL面试常见问题(2)

  1. 归档模式与非归档模式?为什么归档模式可以恢复到任意时刻
    归档是在重做日志文件被覆盖之前,将该重做日志文件通过复制操作系统文件的方式,保存到指
    定的位置。保存下来的重做日志文件的集合被称为归档重做日志文件,复制的过程被称为归档。在归档日志(ARCHIVELOG)模式下,数据库对重做日志文件进行归档操作。非归档日志(NOARCHIVELOG)模式下,不会对重做日志文件进行归档操作。由于非归档模式不会在覆盖之前保存,这样就造成了数据库在一定时间之前的重做日志文件丢失,也就不能恢复到被覆盖之前。而归档模式在任意时间上都有重做日志文件,故可以恢复到任意时刻。
  2. 如何提高日志的切换频率?
    通过参数 ARCHIVE_LAG_TARGET 可以控制日志切换的时间间隔,以秒为单位。通过减少时间间隔,从而实现提高日志的切换频率。例如以下代码:
    SQL> ALTER SYSTEM SET ARCHIVE_LAG_TARGET=50 SCOPE=both;
    通过上面的命令,可以实现日志每 50 秒切换一次。
  3. 表中有 A B C 三列,用 SQL 语句实现:当 A 列大于 B 列时选择 A 列否则选择 B 列,当 B 列大于 C 列时选择 B 列否则选择 C 列。
select (case when a>b then a else b end ), (case when b>c then b esle c end) 
from table_name

4.一个日期判断的 sql 语句,请取出 tb_send 表中日期(SendTime 字段)为当天的所有记录?(SendTime字段为 datetime 型,包含日期与时间)?

select * from tb where datediff(dd,SendTime,getdate())=0

5.有一张表,里面有 3 个字段:语文,数学,英语。其中有 3 条记录分别表示语文 70 分,数学
80 分,英语 58 分,请用一条 sql 语句查询出这三条记录并按以下条件显示出来(并写出您的思路):大于或等于 80 表示优秀,大于或等于 60 表示及格,小于 60 分表示不及格

select
(case when 语文>=80 then '优秀
when 语文>=60 then '及格'
else '不及格') as 语文,
(case when 数学>=80 then '优秀'
when 数学>=60 then '及格'
else '不及格') as 数学,
(case when 英语>=80 then '优秀'
when 英语>=60 then '及格'
else '不及格') as 英语,
from table

6.自定义函数支持输出参数吗?
自定义函数可以接受零个或多个输入参数,其返回值可以是一个数值,也可以是一个表,但是自定义函数不支持输出参数
7.为什么要及时删除不用的触发器?
触发器定义之后,每次执行触发事件,都会激活触发器并执行触发器中的语句。如果需求发生变化,而触发器没有进行相应的改变或者删除,则触发器仍然会执行旧的语句,从而会影响新的数据的完整性。因此,要将不再使用的触发器及时删除
8.什么是唯一索引?
唯一索引可以确保索引列不包含重复的值。在多列唯一索引的情况下,该索引可以确保索引列中每个值组合都是唯一的。
例如,如果在 last_name、first_name 和 middle_initial 列的组合上创建了唯一索引full_name,则该表中任何两个人都不可以具有相同的全名。聚集索引和非聚集索引都可以是唯一的。
因此,只要列中的数据是唯一的,就可以在同一个表上创建一个唯一的聚集索引和多个唯一的非聚集索引。只有当唯一性是数据本身的特征时,指定唯一索引才有意义。如果必须实施唯一性以确保数据的完整性,则应在列上创建 UNIQUE 或 PRIMARY KEY 约束,而不要创建唯一索引。
9.为什么 UNION ALL 比 UNION 快?
因为在使用 UNION 的时候,需要删除重复的记录,但是使用 UNION ALL 的时候不用删除。所以
如果在知道需要 UNION 的查询不可能出现重复数据的时候,一定要使用 UNION ALL

猜你喜欢

转载自blog.csdn.net/weixin_44051191/article/details/109168633