✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Java面试题总结
✨特色专栏:国学周更-心性养成之路
🥭本文内容:MySQL数据库高级面试题(2)
更多内容点击👇
       MySQL数据库高级面试题(1)

本文目录

    • Q51. 什么样的字段适合建索引
    • Q52. 在数据库中查询语句速度很慢,如何优化?
    • Q53. Oracle和Mysql的区别?
    • Q54. Oracle语句有多少类型
    • Q55. oracle分页查询语句
    • Q56. commit在哪里会运用
    • Q57. 行转列、列换行怎么转
    • Q58. 什么是PL/SQL?
    • Q59. 序列的作用
    • Q60. 表和视图的关系
    • Q61. oracle基本数据类型
    • Q62. truncate与 delete区别
    • Q63. oracle怎么去重
    • Q64. 什么是数据模型?什么是规范化?
    • Q65. 解释冷备份和热备份的不同点以及各自的优点
    • Q66. 你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢?
    • Q67. 如何转换init.ora到spfile?
    • Q68. 解释data block , extent 和 segment的区别
    • Q69. 给出两个检查表结构的方法
    • Q70. 怎样查看数据库引擎的报错
    • Q71. 解释归档和非归档模式之间的不同和它们各自的优缺点
    • Q72. 如何建立一个备份控制文件?
    • Q73. 给出数据库正常启动所经历的几种状态?
    • Q74. 如何生成explain plan?
    • Q75. 如何增加buffer cache的命中率?
    • Q76. ORA-01555的应对方法?
    • Q77. 如何判断数据库的时区?
    • Q78. 解释GLOBAL_NAMES设为TRUE的用途
    • Q79. 如何加密PL/SQL程序?
    • Q80. 解释FUNCTION,PROCEDURE和PACKAGE区别
    • Q81. 解释TABLE Function的用途
    • Q82. 说明:拷贝表( 拷贝数据, 源表名:a目标表名:b)
    • Q83. myisamchk 是用来做什么的?
    • Q84. MyISAM Static 和 MyISAM Dynamic 有什么区别?
    • Q85. 列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况?
    • Q86. 怎样才能找出最后一次插入时分配了哪个自动增量?
    • Q87. 你怎么看到为表格定义的所有索引?
    • Q88. 如何在 Unix 和 MySQL 时间戳之间进行转换?
    • Q89. 列对比运算符是什么?
    • Q90. BLOB 和 TEXT 有什么区别?
    • Q91. MySQL 如何优化 DISTINCT?
    • Q92. 可以使用多少列创建索引?
    • Q93. NOW()和 CURRENT_DATE()有什么区别?
    • Q94. MySQL 里记录货币用什么字段类型好
    • Q95. MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
    • Q96. 锁的优化策略
    • Q97. 索引的底层实现原理和优化
    • Q98. 什么情况下设置了索引但无法使用
    • Q99. 实践中如何优化 MySQL
    • Q100. 优化数据库的方法
    • Q101. 、简单描述 MySQL 中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)
    • Q102. SQL注入漏洞产生的原因?如何防止?
    • Q103. 为表中得字段选择合适得数据类型
    • Q104. Mysql中的事务回滚机制概述
    • Q105. 完整性约束包括哪些?
    • Q106. 试述视图的优点?
    • Q107. 什么是事务?
    • Q108. 事务的特性
    • Q109. 分库分表之后,id主键如何处理?
    • Q110. mysql有关权限的表都有哪几个
    • Q111. 什么是事务?有哪些属性?以及属性的意义。
    • Q112. SQL语句常用优化技巧
    • Q113. 事务的基本要素?
    • Q114. 适用于Oracle的分页查询语句?使用rownum关键字,oracle特有的分析函数和树查询非常有用可以看看。
    • Q115. 事务的语句
    • Q116. 四种隔离级别
    • Q117. Oracle和Mysql的区别?
    • Q118. Oracle语句有多少类型
    • Q119. oracle分页查询语句
    • Q120. 行转列、列换行怎么转
    • Q121. oracle怎么去重
    • Q122. 如何建立一个备份控制文件?
    • Q123. 原表:
    • Q124. Mysql中的事务回滚机制概述
    • Q125. 并发事务带来哪些问题?

Q51. 什么样的字段适合建索引

唯一、不为空、经常被查询的字段

Q52. 在数据库中查询语句速度很慢,如何优化?

1.建索引
2.减少表之间的关联
3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据 量大的表排在前面
4.简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据
5.尽量用PreparedStatement来查询,不要用Statement

Q53. Oracle和Mysql的区别?

1)库函数不同。
2)Oracle是用表空间来管理的,Mysql不是。
3)显示当前所有的表、用户、改变连接用户、显示当前连接用户、执行外部脚本的语句的不同。
4)分页查询时候时候,mysql用limit oracle用rownum

Q54. Oracle语句有多少类型

Oracle语句分三类:DDL、DML、DCL。 DDL(Data Definition Language)数据定义语言,包括: Create语句:可以创建数据库和数据库的一些对象。 Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。 Alter语句:修改数据表定义及属性。 Truncate语句:删除表中的所有记录,包括所有空间分配的记录被删除。 DML(Data Manipulation Language)数据操控语言,包括: Insert语句:向数据表张插入一条记录。 Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是它的操作对象仍是记录。 Update语句:用于修改已存在表中的记录的内容。 DCL(Data Control Language)数据库控制语言,包括: Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。 Revoke语句:可以废除某用户或某组或所有用户访问权限

Q55. oracle分页查询语句

使用rownum,两种如下:
第一种: select * from (select t.,rownum row_num from mytable t) b where b.row_num between 1 and 10
第二种: select * from ( select a.
, rownum rn from mytable a where rownum <= 10 ) where rn >= 1
使用rowid,如下:select * from scott.emp where rowid in (select rd from (select rowid as rd ,rownum as rn from scott.emp ) where rn<=6 and rn>3)

Q56. commit在哪里会运用

oracle的commit就是DML语句提交数据(这里是释放锁不是锁表),在未提交前你前面的操作更新的都是内存,没有更新到物理文件中。 执行commit从用户角度讲就是更新到物理文件了,事实上commit时还没有写date file,而是记录了redo log file,要从内存写到data物理文件,需要触发检查点,由DBWR这个后台进程来写,这里内容有点多的,如果不深究的话你就理解成commit即为从内存更新到物理文件。

Q57. 行转列、列换行怎么转

1)使用decode函数
2)使用case when语句

Q58. 什么是PL/SQL?

PL/SQL是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL 只有 Oracle 数据库有。 MySQL 目前不支持 PL/SQL 的。

Q59. 序列的作用

Oracle使用序列来生成唯一编号,用来处理一个表中自增字段。 Oracle序列是原子对象,并且是一致的。也就是说,一旦您访问一个序列号,Oracle将在处理下一个请求之前自动递增下一个编号,从而确保不会出现重复值。

Q60. 表和视图的关系

视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。 表就是关系数据库中实际存储数据用的。

Q61. oracle基本数据类型

1)字符串类型 char、nchar、varchar、varchar2、nvarchar2
2)数字类型 number、integer
3)浮点类型 binary_float、binary_double、float
4)日期类型 date、 timestamp
5)LOB类型 blob、clob、nclob、bfile

Q62. truncate与 delete区别

TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 TRUNCATE,DELETE,DROP 放在一起比较:
TRUNCATE TABLE :删除内容、释放空间但不删除定义。
DELETE TABLE: 删除内容不删除定义,不释放空间。
DROP TABLE :删除内容和定义,释放空间。

Q63. oracle怎么去重

使用distinct关键字

Q64. 什么是数据模型?什么是规范化?

数据模型是一种标识实体类型及其实体间联系的模型。典型的数据模型有网状模型、层次模型和关系模型。

从关系数据库的表中,除去冗余数据的过程称为规范化。包括:精简数据库的结构,从表中删除冗余的列,标识所有依赖于其它数据的数据

Q65. 解释冷备份和热备份的不同点以及各自的优点

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

Q66. 你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢?

重建控制文件,用带backup control file 子句的recover 命令恢复数据库。

Q67. 如何转换init.ora到spfile?

使用create spfile from pfile 命令.

Q68. 解释data block , extent 和 segment的区别

data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库对象
拥有的所有extents被称为该对象的segment.

Q69. 给出两个检查表结构的方法

1)DESCRIBE命令
2)DBMS_METADATA.GET_DDL 包

Q70. 怎样查看数据库引擎的报错

alert log.

Q71. 解释归档和非归档模式之间的不同和它们各自的优缺点

归档模式是指你可以备份所有的数据库 transactions并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点。但是非归档模式可以带来数据库性能上的少许提高.

Q72. 如何建立一个备份控制文件?

Alter database backup control file to trace.

Q73. 给出数据库正常启动所经历的几种状态?

STARTUP NOMOUNT – 数据库实例启动
STARTUP MOUNT - 数据库装载
STARTUP OPEN – 数据库打开

Q74. 如何生成explain plan?

运行utlxplan.sql. 建立plan表
针对特定SQL语句,使用explain plan set statement_id = ‘tst1’ into plan_table
运行utlxplp.sql 或utlxpls.sql察看explain plan

Q75. 如何增加buffer cache的命中率?

在数据库较繁忙时,适用buffer cache advisory 工具,查询v$db_cache_advice . 如果有必要更改,可以使用 alter system set db_cache_size 命令

Q76. ORA-01555的应对方法?

具体的出错信息是snapshot too old within rollback seg , 通常可以通过增大rollback seg来解决问题。当然也需要察看一下具体造成错误的SQL文本

Q77. 如何判断数据库的时区?

SELECT DBTIMEZONE FROM DUAL;

Q78. 解释GLOBAL_NAMES设为TRUE的用途

GLOBAL_NAMES指明联接数据库的方式。如果这个参数设置为TRUE,在建立数据库链接时就必须用相同的名字连结远程数据库

Q79. 如何加密PL/SQL程序?

WRAP

Q80. 解释FUNCTION,PROCEDURE和PACKAGE区别

function 和procedure是PL/SQL代码的集合,通常为了完成一个任务。
procedure 不需要返回任何值而function将返回一个值在另一方面,
Package是为了完成一个商业功能的一组function和proceudre的集合

Q81. 解释TABLE Function的用途

TABLE Function是通过PL/SQL逻辑返回一组纪录,用于普通的表/视图。他们也用于pipeline和ETL过程。

Q82. 说明:拷贝表( 拷贝数据, 源表名:a目标表名:b)

insert into b(a, b, c) select d,e,f from a;

Q83. myisamchk 是用来做什么的?

它用来压缩 MyISAM 表,这减少了磁盘或内存使用。

Q84. MyISAM Static 和 MyISAM Dynamic 有什么区别?

在 MyISAM Static 上的所有字段有固定宽度。 动态 MyISAM 表将具有像 TEXT, BLOB 等字段,以适应不同长度的数据类型。
MyISAM Static 在受损情况下更容易恢复 。

Q85. 列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况?

它会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用。

Q86. 怎样才能找出最后一次插入时分配了哪个自动增量?

LAST INSERT_ID 将返回由 Auto_increment 分配的最后一个值,并且不需要指定表名称。

Q87. 你怎么看到为表格定义的所有索引?

SHOW INDEX FROM < tablename >;

Q88. 如何在 Unix 和 MySQL 时间戳之间进行转换?

UNIX_TIMESTAMP 是从 MySQL 时间戳转换为 Unix 时间戳的命令 FROM_UNIXTIME 是从 Unix 时间戳转换为 MySQL 时间戳的命令

Q89. 列对比运算符是什么?

在 SELECT 语句的列比较中使用 =,<>,<=,<,> =,>,<<,>>,<=>,AND, OR 或 LIKE 运算符。

Q90. BLOB 和 TEXT 有什么区别?

BLOB 是一个二进制对象,可以容纳可变数量的数据。TEXT 是一个不区分大小写的 BLOB。
BLOB 和 TEXT 类型之间的唯一区别在于对 BLOB 值进行排序和比较时区分大小写,对 TEXT 值不区分大小写。

Q91. MySQL 如何优化 DISTINCT?

DISTINCT 在所有列上转换为 GROUP BY,并与 ORDER BY 子句结合使用。
SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;

Q92. 可以使用多少列创建索引?

任何标准表最多可以创建 16 个索引列。

Q93. NOW()和 CURRENT_DATE()有什么区别?

NOW()命令用于显示当前年份,月份,日期,小时,分钟和秒。
CURRENT_DATE()仅显示当前年份,月份和日期。

Q94. MySQL 里记录货币用什么字段类型好

NUMERIC 和 DECIMAL 类型被 MySQL 实现为同样的类型,这在 SQL92 标准允许。他们被用于保存值,该值的准确精度是极其重要的值,例如与金钱有关的数据。当声明一个类是这些类型之一时,精度和规模的能被(并且通常是)指定。

Q95. MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

1、设计良好的数据库结构,允许部分数据冗 余 ,尽量避免 join 查询,提高效率 。
2、选择合适的表字段数据类型和存储引擎,适当的添加索引。
3、 MySQL 库主从读写分离 。
4、找规律分表,减少单表中的数据量提高查询速度。
5、添加缓存机制,比如 memcached, apc 等 。
6、不经常改动的页面,生成静态页面。
7、书写高效率的 SQL。 比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.

Q96. 锁的优化策略

1、读写分离
2、分段加锁
3、减少锁持有的时间
4.多个线程尽量以相同的顺序去获取资源
不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过 ,反而效率不如一次加一把大锁。

Q97. 索引的底层实现原理和优化

B+树,经过优化的 B+树
主要是在所有的叶子结点中增加了指向下一个叶子节点的指针,因此 InnoDB 建议为大部分表使用默认自增的主键作为主索引。

Q98. 什么情况下设置了索引但无法使用

1、以“%”开头的 LIKE 语句,模糊匹配
2、OR 语句前后没有同时使用索引
3、数据类型出现隐式转化(如 varchar 不加单引号的话可能会自动转换为 int 型)

Q99. 实践中如何优化 MySQL

1、SQL 语句及索引的优化
2、数据库表结构的优化
3、系统配置的优化
4、硬件的优化

Q100. 优化数据库的方法

1、选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置 NOTNULL,例如’省份’、’性别’最好适用 ENUM
2、使用连接(JOIN)来代替子查询
3、适用联合(UNION)来代替手动创建的临时表
4、事务处理
5、锁定表、优化事务处理
6、适用外键,优化锁定表
7、建立索引
8、优化查询语句

Q101. 、简单描述 MySQL 中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)

索引是一种特殊的文件 (InnoDB 数据表上的索引是表空间的一个组成部分 ),它们包含着对数据表里所有记录的引用指针。
普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯一任务是加快对数据的访问速度。
普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字 UNIQUE 把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。
主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字 PRIMARY KEY 来创建。
索引可以覆盖多个数据列,如像 INDEX(columnA, columnB)索引,这就是联合索引。
索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。

Q102. SQL注入漏洞产生的原因?如何防止?

防止 SQL 注入的方式:

  1. 开启配置文件中的 magic_quotes_gpc 和 magic_quotes_runtime 设置
  2. 执行 sql 语句时使用 addslashes 进行 sql 语句转换
  3. Sql 语句书写尽量不要省略双引号和单引号 。
  4. 过滤掉 sql 语句中的一些关键词: update、 insert、 delete、 select、 * 。
  5. 提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。

Q103. 为表中得字段选择合适得数据类型

字段类型优先级 : 整形 >date,time>enum,char>varchar>blob,text
优先考虑数字类型,其次是日期或者二进制类型,最后是字符串类型,同级别得数据类型,应该优先选择占用空间小的数据类型

Q104. Mysql中的事务回滚机制概述

事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销。

要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修改完,可能第二个表修改过程中出现了异常而没能修改,此时就只有第二个表依旧是未修改之前的状态,而第一个表已经被修改完毕。而当你把它们设定为一个事务的时候,当第一个表修改完,第二表修改出现异常而没能修改,第一个表和第二个表都要回到未修改的状态,这就是所谓的事务回滚

Q105. 完整性约束包括哪些?

数据完整性 (Data Integrity)是指数据的精确 (Accuracy)和可靠性 (Reliability)。
分为以下四类:
1、实体完整性:规定表的每一行在表中是惟一的实体。
2、域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。
3、参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。
4、用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。

与表有关的约束:包括列约束(NOT NULL(非空约束))和表约束(PRIMARY KEY、 foreign key、 check、 UNIQUE) 。

Q106. 试述视图的优点?

(1) 视图能够简化用户的操作
(2) 视图使用户能以多种角度看待同一数据;
(3) 视图为数据库提供了一定程度的逻辑独立性;
(4) 视图能够对机密数据提供安全保护。

Q107. 什么是事务?

多条sql语句,要么全部成功,要么全部失败。

Q108. 事务的特性

数据库事务特性:原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)、持久性(Durabiliy)。简称ACID。

原子性:组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有操作都成功,整个事务才会提交。任何一个操作失败,已经执行的任何操作都必须撤销,让数据库返回初始状态。
一致性:事务操作成功后,数据库所处的状态和它的业务规则是一致的。即数据不会被破坏。
隔离性:在并发数据操作时,不同的事务拥有各自的数据空间,它们的操作不会对彼此产生干扰
持久性:一旦事务提交成功,事务中的所有操作都必须持久化到数据库中。

Q109. 分库分表之后,id主键如何处理?

因为要是分成多个表之后,每个表都是从1开始累加,这样是不对的,我们需要一个全局唯一的id来支持。
生成全局id有下面这几种方式:

  1. UUID:不适合作为主键,因为太长了,并且无序不可读,查询效率低。比较适合用于生成唯一的名字的标示比如文件的名字。

  2. 数据库自增id : 两台数据库分别设置不同步长,生成不重复ID的策略来实现高可用。这种方式生成的id有序,但是需要独立部署数据库实例,成本高,还会有性能瓶颈。

  3. 利用redis生成id : 性能比较好,灵活方便,不依赖于数据库。但是,引入了新的组件造成系统更加复杂,可用性降低,编码更加复杂,增加了系统成本。

Q110. mysql有关权限的表都有哪几个

MySQL服务器通过权限表来控制用戶对数据库的访问,权限表存放在mysql数据库里,由mysql_install_db脚本初始化。这些权限表分别user,db,table_priv,columns_priv和host。下面分别介绍一下这些表的结构和内容:
user权限表:记录允许连接到服务器的用戶帐号信息,里面的权限是全局级的。
db权限表:记录各个帐号在各个数据库上的操作权限。
table_priv权限表:记录数据表级的操作权限。
columns_priv权限表:记录数据列级的操作权限。
host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANT和REVOKE语句的影响。

Q111. 什么是事务?有哪些属性?以及属性的意义。

事务是并发操作的单位,是用户定义的一个操作序列。
事务的四个特性:

  1. 原子性(事务必须是一个不可分割的整体)
  2. 一致性(执行完数据库操作后,数据不会被破坏,A给B充Q币,A充了之后B能看见自己的Q币多了)
  3. 隔离性(写写之间隔离)
  4. 持久性(数据库必须要保证有一条数据永久地存放在磁盘)。

Q112. SQL语句常用优化技巧

要提高SQL语句的执行效率,最常见的方法:

  1. 建立索引
  2. 尽量避免全表扫描。
  3. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。
  4. 尽量避免大事务操作,提高系统并发能力。

避免全表扫描及索引优化:
①.避免在where子句中使用 is null 或 is not null 对字段进行判断。
②.避免在 where 子句中使用 != 或 <> 操作符。
③.避免在 where 子句中使用 or来链接条件。
④.少用 in 或 not in。
⑤.注意 like 中通配符的使用
⑥.避免在 where 子句中对字段进行表达式操作。
⑦.避免在 where 子句中对字段进行函数操作。
⑧.在子查询中,用 exists 代替 in 是一个好的选择。
⑨.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
⑩.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

Q113. 事务的基本要素?

原子性Atomicity,指事务由原子的操作序列组成,所有操作要么全部成功,要么全部失败回滚。
一致性Consistency,指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处以一致性状态。比如在做多表操作时,多个表要么都是事务后新的值,要么都是事务前的旧值。
隔离性Isolation,指多个用户并发访问数据库时,数据库为每个用户执行的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。事务的隔离级别在后文中介绍。
持久性Durability,指一个事务一旦提交并执行成功,那么对数据库中数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

Q114. 适用于Oracle的分页查询语句?使用rownum关键字,oracle特有的分析函数和树查询非常有用可以看看。

从m条开始,检索n条记录。
select * from (select rownum r,t1.* from 表名称 t1 where rownum < m + n) b where b.r >= m;

Q115. 事务的语句

1.开始事务:BEGIN TRANSACTION
2.提交事务:COMMIT TRANSACTION
3.回滚事务:ROLLBACK TRANSACTION

Q116. 四种隔离级别

1,未提交读:读数据时不会检查使用任何锁。
2,已提交读:只读取提交的数据并等待其他事务释放锁。
3,可重复读:会保持共享锁到事务结束。
4,可序列化:不仅会锁定影响的数据,还会锁定这个范围

Q117. Oracle和Mysql的区别?

1)库函数不同。
2)Oracle是用表空间来管理的,Mysql不是。
3)显示当前所有的表、用户、改变连接用户、显示当前连接用户、执行外部脚本的语句的不同。
4)分页查询时候时候,mysql用limit oracle用rownum

Q118. Oracle语句有多少类型

Oracle语句分三类:DDL、DML、DCL。 DDL(Data Definition Language)数据定义语言,包括: Create语句:可以创建数据库和数据库的一些对象。 Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。 Alter语句:修改数据表定义及属性。 Truncate语句:删除表中的所有记录,包括所有空间分配的记录被删除。 DML(Data Manipulation Language)数据操控语言,包括: Insert语句:向数据表张插入一条记录。 Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是它的操作对象仍是记录。 Update语句:用于修改已存在表中的记录的内容。 DCL(Data Control Language)数据库控制语言,包括: Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。 Revoke语句:可以废除某用户或某组或所有用户访问权限

Q119. oracle分页查询语句

使用rownum,两种如下:
第一种: select * from (select t.,rownum row_num from mytable t) b where b.row_num between 1 and 10
第二种: select * from ( select a.
, rownum rn from mytable a where rownum <= 10 ) where rn >= 1
使用rowid, 如下: select * from scott.emp where rowid in (select rd from (select rowid as rd ,rownum as rn from scott.emp ) where rn<=6 and rn>3)

Q120. 行转列、列换行怎么转

1)使用decode函数
2)使用case when语句

Q121. oracle怎么去重

使用distinct关键字

Q122. 如何建立一个备份控制文件?

Alter database backup control file to trace.

Q123. 原表:

courseid coursename score
1 Java 70
2 oracle 90
3 xml 40
4 jsp 30
5 servlet 80
为了便于阅读, 查询此表后的结果显式如下( 及格分数为60):
courseid coursename score mark

1 Java 70 pass
2 oracle 90 pass
3 xml 40 fail
4 jsp 30 fail
5 servlet 80 pass

写出此查询语句

select courseid, coursename ,score ,decode(sign(score-60),-1,‘fail’,‘pass’) as mark from course

Q124. Mysql中的事务回滚机制概述

事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销。

要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修改完,可能第二个表修改过程中出现了异常而没能修改,此时就只有第二个表依旧是未修改之前的状态,而第一个表已经被修改完毕。而当你把它们设定为一个事务的时候,当第一个表修改完,第二表修改出现异常而没能修改,第一个表和第二个表都要回到未修改的状态,这就是所谓的事务回滚

Q125. 并发事务带来哪些问题?

在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用戶对同一数据进行操作)。并发虽然是必须的,但可能会导致以下的问题。

  1. 脏读(Dirty read)
  2. 丢失修改(Lost to modify)
  3. 幻读(Phantom read)

  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

更多推荐

MySQL数据库高级面试题(2)