当前位置: 首页 > 后端技术 > PHP

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

时间:2023-03-29 16:49:49 PHP

大家好,我是PHP程序员面试笔试系列的作者刘毅。本周(2019.3.4至3.8)135篇更新文章如下:周一:PHP面试MySQL数据库基础知识周??三:PHP面试MySQL数据库索引周五:PHP面试MySQL数据库面试题》一、二有什么区别、三、四范式?”文章,关注公众号:《六一编程库》,回复:《范式》,我发给你。以下内容来自《PHP程序员面试笔试宝典》,如需转载请注明出处。1、几种开源数据库的比较介绍2、SQL语言有哪些功能?SQL是StructuredQueryLanguage的首字母缩写,它的功能包括四个部分:数据查询、数据操作、数据定义和数据控制。数据查询是数据库中最常见的操作,可以通过select语句获取需要的信息。SQL语言的数据操作语句(DataManipulationLanguage,DML)主要包括插入数据、修改数据和删除数据三种语句。SQL语言使用数据定义语言(DataDefinitionLanguage,DDL)实现数据定义功能,可以定义和撤销数据库用户、基本表、视图和索引。数据控制语言(DCL)用于对数据库进行统一控制和管理,保证多用户共享时的数据安全。基本的SQL语句包括select、insert、update、delete、create、drop、grant、revoke等,具体用法见下表。整理了一篇《一二三四范式有什么区别?3.什么是交易?事务是数据库中的单个执行单元(Unit),通常是由高级数据库操作语言(如SQL)或编程语言(如C++、Java等)编写的用户程序执行引起的。).当数据库中数据修改成功后,事务中修改的数据会被提交,不会被修改;否则,事务将被取消或回滚,更改将无效。例如,在网上购物中,交易过程至少包括以下步骤:1)更新顾客购买的商品的库存信息。2)保存客户付款信息。3)生成订单并保存到数据库中。4)更新用户相关信息,如购物数量等。一般情况下,这些操作会顺利进行,最终交易成功,所有与交易相关的数据库信息都会更新成功。但如果突然停电或其他意外情况,导致这一系列流程中的任何一个环节出现错误,例如更新商品库存信息异常、客户银行账户余额不足等,会导致整个交易过程失败。失败。一旦交易失败,数据库中的所有信息必须保持交易前的状态。比如最后一步更新用户信息失败,交易失败,那么必须保证失败的交易不影响数据库的状态,即原来的Inventory信息没有更新,用户没有得到支付,并且不会生成订单。否则,数据库中的信息就会不一致,或者会出现更严重的不可预知的后果。数据库事务只是在这种情况下用来保证事务的稳定性和可预测性的技术。一个事务必须满足四个属性,即原子性、一致性、隔离性和持久性,即ACID。(1)原子事务是一个不可分割的整体。为了保证事务的总体目标,事务必须是原子的,即当数据被修改时,要么全部执行要么都不执行,即事务不允许部分完成,避免仅执行这些操作的一部分而导致的错误。原子性要求事务必须完全执行。(2)一致性数据库数据在事务执行前后必须保持一致的状态。数据库的一致性状态应该满足模式锁指定的约束,那么在事务完全执行后数据库仍然处于一致性状态。为了保持所有数据的完整性,在关系数据库中,所有规则都必须应用于事务的修改。数据库的一致性状态由用户负责,通过银行转账等并发控制机制实现。转账前后两个账户的总和应该保持不变。并发操作导致的数据不一致包括丢失数据修改、读“脏”数据、不可重复读、产生ghost数据。(3)隔离隔离也叫独立性。当两个或多个事务并发执行时,顺序保证数据的安全,一个事物的内部运行与事务的运行是隔离的,不会受到其他正在进行的事务的影响,T2要么在T1开始之前结束,要么在T1完成之后开始执行。数据库有四种事务隔离级别:readuncommitted、readcommitted、repeatableread和serializable。因为隔离使得每个事务的更新对其他事务不可见,直到它承诺,实施隔离是解决临时更新问题和消除级联回滚的一种方法。(4)持久性持久性也叫持久性。事务完成后,数据库管理系统(DBMS)保证其对数据库中数据的修改是永久性的。当系统或介质出现故障时,修改也是永久性的。保持。持久化一般通过数据库的备份和恢复来保证。严格来说,数据库事务属性(ACID)是由数据库管理系统来保证的,应用在整个应用运行过程中不需要考虑数据库的ACID实现。通常,事务通过执行COMMIT或ROLLBACK语句来终止。当执行COMMIT语句时,自事务开始以来对数据库所做的所有更改都成为永久性的,即写入磁盘,而当执行ROLLBACK语句时,自自动事务开始以来对数据库所做的所有更改都被撤消,并且数据库的内容返回到事务开始之前的状态。无论如何,当事务完成时,它保证返回到一致的状态。4.什么是触发器?触发器是一种特殊类型的存储过程,它由事件触发,而不是程序调用或手动启动。当数据库有特殊操作时,这些操作由数据库中的事件触发,自动完成这些SQL语句。使用触发器可以保证数据的有效性和完整性,完成比约束更复杂的数据约束。具体来说,触发器和存储过程的区别如下表所示。根据SQL语句的不同,触发器可以分为两大类:DML触发器和DLL触发器。DML触发器是在数据库服务器上发生数据操作语言事件时执行的存储过程。有两种类型的触发器:After和InsteadOf。Aftertriggerisactivatedtrigger是记录改变后的触发器。Insteadofthetrigger就是在记录发生变化之前执行触发器自己定义的操作,而不是执行原来SQL语句中的操作。DLL触发器是响应数据定义语言事件而执行的存储过程。具体来说,触发器的主要作用如下:1)增加安全性。2)使用触发器记录修改及相关信息,跟踪用户对数据库的操作,实现审计。3)维护创建表时声明约束无法实现的复杂完整性约束,对数据库中的特定事件进行监控和响应。4)实施复杂的非标准数据库相关完整性规则,同步实时复制表中数据。5)触发器是自动的。对表中的数据进行任何修改后,它们将被激活。例如,可以自动计算数据值。如果数据的值满足一定的要求,就会进行特定的处理。以企业的财务管理为例,如果企业的资金链出现短缺,达到一定程度,就会发出警告信息。以下是触发器的示例。触发器的作用是每个周末更新数据表。如果当前用户没有访问WEEKEND_UPDATE_OK表的权限,则需要重新授予权限。创建或替换触发器update_on_weekends_checkBEFORE更新salONEMPFOREACHDECLAREmy_countnumber(4);BEGINSELECTCOUNT(u_name)FROMWEEKEND_UPDATE_OKINTOmy_countWHEREu_name=user_name;IFmy_count=0THENRAISE_APPLICATION_ERROR(20508,'不允许更新');万一;结尾;5.触发器分为前触发和后触发。两者有什么区别?语句级触发和行级触发有什么区别?预触发发生在事件发生之前,以验证某些条件或进行一些准备工作;事后触发发生在事件发生后,做收尾工作,保证交易的完整性。并且预触发可以得到以前的和新的字段值。语句级触发器可以在语句执行之前或之后执行,而行级触发器为受触发器影响的每一行触发一次。通知:本周三(3.6)更新PHP面试MySQL数据库索引,敬请期待。以上内容节选自《PHP程序员面试笔试宝典》书籍。目前,本书没有电子版。各大电商平台均可购买纸质版。更多PHP相关面试知识和考题,请关注公众号获取:六一编程库,对本文有任何问题或建议可以留言。我会不断改进,追求极致,谢谢大家的支持。