面试之MySQL数据库部分基础知识

一、几款开源数据库的对比和介绍

é¢è¯ä¹MySQLæ°æ®åºé¨ååºç¡ç¥è¯

二、SQL语言的功能有哪些?

SQL是结构化查询语言(Structured Query Language)的缩写,其功能包括数据查询、数据操纵、数据定义和数据控制四个部分。 数据查询是数据库中最常见的操作,通过select语句可以得到所需的信息。SQL语言的数据操纵语句(Data Manipulation Language,DML)主要包括插入数据、修改数据以及删除数据三种语句。SQL语言使用数据定义语言(Data Definition Language,DDL)实现数据定义功能,可对数据库用户、基本表、视图、索引进行定义与撤销。数据控制语句(Data Control Language,DCL)用于对数据库进行统一的控制管理,保证数据在多用户共享的情况下能够安全。 基本的SQL语句有select、insert、update、delete、create、drop、grant、revoke等。其具体使用方式见下表。

é¢è¯ä¹MySQLæ°æ®åºé¨ååºç¡ç¥è¯

三、什么是事务?

事务是数据库中一个单独的执行单元(Unit),它通常由高级数据库操作语言(例如SQL)或编程语言(例如C++、Java等)书写的用户程序的执行所引起。当在数据库中更改数据成功时,在事务中更改的数据便会提交,不再改变;否则,事务就取消或者回滚,更改无效。 例如网上购物,其交易过程至少包括以下几个步骤的操作: 1)更新客户所购商品的库存信息。 2)保存客户付款信息。 3)生成订单并且保存到数据库中。 4)更新用户相关信息,如购物数量等。 在正常的情况下,这些操作都将顺利进行,最终交易成功,与交易相关的所有数据库信息也成功地更新。但是,如果遇到突然掉电或是其他意外情况,导致这一系列过程中任何一个环节出了差错,例如在更新商品库存信息时发生异常、顾客银行账户余额不足等,都将导致整个交易过程失败。而一旦交易失败,数据库中所有信息都必须保持交易前的状态不变,例如最后一步更新用户信息时失败而导致交易失败,那么必须保证这笔失败的交易不影响数据库的状态,即原有的库存信息没有被更新、用户也没有付款、订单也没有生成。否则,数据库的信息将会不一致,或者出现更为严重的不可预测的后果,数据库事务正是用来保证这种情况下交易的平稳性和可预测性的技术。 事务必须满足四个属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),即ACID四种属性。

(1)原子性

事务是一个不可分割的整体,为了保证事务的总体目标,事务必须具有原子性,即当数据修改时,要么全执行,要么全都不执行,即不允许事务部分地完成,避免了只执行这些操作的一部分而带来的错误。原子性要求事务必须被完整执行。

(2)一致性

一个事务执行之前和执行之后数据库数据必须保持一致性状态。数据库的一致性状态应该满足模式锁指定的约束,那么在完整执行该事务后数据库仍然处于一致性状态。为了维护所有数据的完整性,在关系型数据库中,所有的规则必须应用到事务的修改上。数据库的一致性状态由用户来负责,由并发控制机制实现,例如银行转账,转账前后两个账户金额之和应保持不变,由于并发操作带来的数据不一致性包括丢失数据修改、读“脏”数据、不可重复读和产生幽灵数据。

(3)隔离性

隔离性也被称为独立性,当两个或多个事务并发执行时,为了保证数据的安全性,将一个事物内部的操作与事务的操作隔离起来,不被其他正在进行的事务看到。例如对任何一对事务T1、T2,对T1而言,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行。数据库有四种类型的事务隔离级别:不提交的读、提交的读、可重复的读和串行化。因为隔离性使得每个事务的更新在它被提交之前,对其他事务都是不可见的,所以,实施隔离性是解决临时更新与消除级联回滚问题的一种方式。

(4)持久性

持久性也被称为永久性,事务完成以后,数据库管理系统(DBMS)保证它对数据库中的数据的修改是永久性的,当系统或介质发生故障时,该修改也永久保持。持久性一般通过数据库备份与恢复来保证。 严格来说,数据库事务属性(ACID)都是由数据库管理系统来进行保证的,在整个应用程序运行过程中应用无须去考虑数据库的ACID实现。 一般情况下,通过执行COMMIT或ROLLBACK语句来终止事务,当执行COMMIT语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了,即被写入磁盘,而当执行ROLLBACK语句时,自动事务启动以来对数据库所做的一切更改都会被撤销,并且数据库中内容返回到事务开始之前所处的状态。无论什么情况,在事务完成时,都能保证回到一致状态。

四、什么是触发器?

触发器是一种特殊类型的存储过程,它由事件触发,而不是程序调用或手工启动,当数据库有特殊的操作时,对这些操作由数据库中的事件来触发,自动完成这些SQL语句。使用触发器可以用来保证数据的有效性和完整性,完成比约束更复杂的数据约束。 具体而言,触发器与存储过程的区别见下表。

é¢è¯ä¹MySQLæ°æ®åºé¨ååºç¡ç¥è¯

根据SQL语句的不同,触发器可分为两类:DML触发器和DLL触发器。 DML触发器是当数据库服务器发生数据操作语言事件时执行的存储过程,有After和Instead Of这两种触发器。After触发器被激活触发是在记录改变之后进行的一种触发器。Instead Of触发器是在记录变更之前,去执行触发器本身所定义的操作,而不是执行原来SQL语句里的操作。DLL触发器是在响应数据定义语言事件时执行的存储过程。 具体而言,触发器的主要作用表现为如下几个方面: 1)增加安全性。 2)利用触发器记录所进行的修改以及相关信息,跟踪用户对数据库的操作,实现审计。 3)维护那些通过创建表时的声明约束不可能实现的复杂的完整性约束以及对数据库中特定事件进行监控与响应。 4)实现复杂的非标准的数据库相关完整性规则、同步实时地复制表中的数据。 5)触发器是自动的,它们在对表的数据做了任何修改之后就会被激活,例如可以自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理。以某企业财务管理为例,如果企业的资金链出现短缺,并且达到某种程度,则发送警告信息。 下面是一个触发器的例子,该触发器的功能是在每周末进行数据表更新,如果当前用户没有访问WEEKEND_UPDATE_OK表的权限,那么需要重新赋予权限。

CREATE OR REPLACE TRIGGER update_on_weekends_check
BEFORE UPDATE OF sal ON EMP
FOR EACH ROW 
DECLARE
my_count number(4);
BEGINSELECT COUNT(u_name) 
FROM WEEKEND_UPDATE_OK INTO my_count 
WHERE u_name = user_name; 
IF my_count=0 THEN 
RAISE_APPLICATION_ERROR(20508, 'Update not allowed'); 
END IF; 
END;

五、触发器分为事前触发和事后触发,二者有什么区别?语句级触发和行级触发有什么区别?

事前触发发生在事件发生之前验证一些条件或进行一些准备工作;事后触发发生在事件发生之后,做收尾工作,保证事务的完整性。而事前触发可以获得之前和新的字段值。语句级触发器可以在语句执行之前或之后执行,而行级触发在触发器所影响的每一行触发一次。

参考自:https://www.toutiao.com/a6664337388791136771/https://mp.weixin.qq.com/s/Bces4Hbr_sLudTjR4P-UIw

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL数据库面试题2023是一份涵盖了MySQL数据库基础知识、性能优化、高可用、备份恢复等方面的面试题集合。其中包括了许多常见的MySQL面试题,例如MySQL的存储引擎、索引、事务、锁、主从复制、备份恢复等等。这些问题旨在考察面试者对MySQL数据库的理解和应用能力。 以下是一些关于MySQL数据库的常见问题和答案: 1. 什么是MySQL的存储引擎?MySQL支持哪些存储引擎? MySQL的存储引擎是指MySQL用来管理数据的底层软件组件。MySQL支持多种存储引擎,包括InnoDB、MyISAM、Memory、CSV、Archive等。 2. 什么是索引?MySQL中有哪些类型的索引? 索引是一种数据结构,用于加速数据库中数据的查找。MySQL中有多种类型的索引,包括B-Tree索引、哈希索引、全文索引等。 3. 什么是事务?MySQL中如何实现事务? 事务是指一组数据库操作,这些操作要么全部执行成功,要么全部执行失败。MySQL中通过使用ACID属性来实现事务,即原子性、一致性、隔离性和持久性。 4. 什么是锁?MySQL中有哪些类型的锁? 锁是一种用于控制并发访问的机制,用于保证数据的一致性和完整性。MySQL中有多种类型的锁,包括共享锁、排他锁、意向锁等。 5. 什么是主从复制?MySQL中如何实现主从复制? 主从复制是指将一个MySQL数据库的数据复制到另一个MySQL数据库中。MySQL中通过使用二进制日志(binlog)和复制线程来实现主从复制。 6. 什么是备份恢复?MySQL中如何进行备份恢复? 备份恢复是指将数据库中的数据备份到另一个地方,以便在数据丢失或损坏时进行恢复。MySQL中可以使用mysqldump命令进行备份,使用mysql命令进行恢复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值