一二三范式
第一范式 (1NF)
属性不可分。即数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体
中的某个属性不能有多个值或者不能有重复的属性。
第二范式 (2NF)
每个非主属性完全函数依赖于键码。可以通过分解来满足 2NF。
第三范式 (3NF)
非主属性不传递函数依赖于键码。简而言之,第三范式就是属性不依赖于其它非主属性。
SQL查询语句
数据库有什么类型的数据库、关系型数据库的特点
数据库有几种锁?
共享(S)锁:多个事务可封锁一个共享页;任何事务都不能修改该页; 通常是该页被读取完毕,S锁立即被释放。
排它(X)锁:仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页进行访问;X锁一直到事务结束才能被释放。
更新(U)锁:用来预定要对此页施加X锁,它允许其他事务读,但不允许再施加U锁或X锁;当被读取的页将要被更新时,则升级为X锁;U锁一直到事务结束时才能被释放。
两段锁协议
两段锁协议是指每个事务的执行可以分为两个阶段:生长阶段(加锁阶段)和衰退阶段(解锁阶段)。
加锁阶段:在该阶段可以进行加锁操作。在对任何数据进行读操作之前要申请并获得S锁,在进行写操作之前要申请并获得X锁。加锁不成功,则事务进入等待状态,直到加锁成功才继续执行。
解锁阶段:当事务释放了一个封锁以后,事务进入解锁阶段,在该阶段只能进行解锁操作不能再进行加锁操作。
结论:
(1) 若并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可以串行化的
(2) 所有遵守两段锁协议的事务,其并行执行的结果一定是正确的
(3) 但可串行化的调度中,不一定所有事务都必须符合两段锁协议
数据库的三个完整性约束
实体完整性,参照完整性和用户自定义完整性约束。实体完整性规定表的每一行在表中是唯一的实体。
参照完整性指两个表的主关键字和外关键字的数据一致,保证表之间的数据一致性,防止数据丢失或无意义的数据在数据库中扩散。
用户自定义完整性是不同数据库根据应用环境不同,用户定义的一些特殊约束条件。
什么是事务?
事务是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。  事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。
事务的四个特性是什么?
原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。
一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。
隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
什么是锁?
锁是用于解决隔离性的一种机制。事务的隔离级别通过锁的机制来实现。
死锁及其解决办法
Deadlock(死锁):两个事务处于相互等待状态,永远不能结束。
解决方法:撤销不重要的事务。
死锁的预防
一次封锁法:要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。
顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。
存储过程是什么?为什么要使用存储过程?
存储过程是预先编译并存储在数据库中的一组SQL语句集合,可以接受参数、执行逻辑操作并返回结果。它类似于编程语言中的函数。
 
存储过程处理比较复杂的业务时比较实用。 比如说,一个复杂的数据操作。如果你在前台处理的话。可能会涉及到多次数据库连接。但如果你用存储过程的话。就只有一次。从响应时间上来说有优势。 也就是说存储过程可以给我们带来运行效率提高的好处。 另外,程序容易出现 BUG 不稳定,而存储过程,只要数据库不出现问题,基本上是不会出现什么问题的。也就是说从安全上讲,使用了存储过程的系统更加稳定。
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 2.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。 3.存储过程可以重复使用,可减少数据库开发人员的工作量。 4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。
存储过程的缺点 1:调试麻烦,但是用 PL/SQL Developer 调试很方便!弥补这个缺点。    2:移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。    3:重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。 4:如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的。维护起来更加麻烦!
触发器及其作用
触发器是一种特殊的存储过程,它在特定数据库事件(INSERT、UPDATE、DELETE等)发生时自动执行。
触发器有如下作用:
  • 可在写入数据表前,强制检验或转换数据。
  • 触发器发生错误时,异动的结果会被撤销。
  • 部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。
    • DDL用于操作对象和对象的属性,DDL对这些对象和属性的管理和定义具体表现在Create、Drop和Alter上。
  • 可依照特定的情况,替换异动的指令 (INSTEAD OF)。
事务回滚,如何解决数据的不一致?事务的ACID特性怎么保证?(REDO/UNDO机制)
Mysql的存储引擎及区别
只要记住重要的几个引擎:InnoDB、MyISAM、Memory、Archive。不过其他的还有BLACKHOLE和CSV。
主要对比一下前两个和中间两个。
INNODB:
用于事务处理应用程序,支持外键和行级锁。如果应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包括很多更新和删除操作,那么InnoDB存储引擎是比较合适的。
InnoDB除了有效的降低由删除和更新导致的锁定,还可以确保事务的完整提交和回滚,
对于类似计费系统或者财务系统等对数据准确要求性比较高的系统都是合适的选择。
MyISAM:
如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那么可以选择这个存储引擎。
Memory:
将所有的数据保存在内存中,在需要快速定位记录和其他类似数据的环境下,可以提供极快的访问。Memory的缺陷是对表的大小有限制,虽然数据库因为异常终止的话数据可以正常恢复,但是一旦数据库关闭,存储在内存中的数据都会丢失。
ARCHIVE:
拥有很好的压缩机制,它使用zlib压缩库,在记录被请求时会实时压缩。支持最基本的插入和查询两种功能。在MySQL 5.5开始支持索引。不支持事务。支持行级锁和专用的缓存区,所以可以实现高并发的插入。适合存储大量日志、历史数据。
是的,只有INNODB支持事务操作,INNODB也是MySQL的默认引擎,个人认为最重要的一个。
参考CSDN:https://blog.csdn.net/zgrgfr/article/details/74455547
如何优化数据库?提高查询的效率?
https://blog.csdn.net/xlgen157387/article/details/44156679
C/S结构、B/S结构
C/S 结构(Client/Server):即大家熟知的客户机和服务器结构
B/S结构(Browser/Server):浏览器/服务器模式
什么是视图?
视图是从一个或几个基本表(或视图)导出的表,它与基本表不同,是一个虚表。数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。
视图的作用
  1. 视图能够简化用户的操作
  1. 视图使用户能以多种角度看待同一数据
  1. 视图对重构数据库提供了一定程度的逻辑独立性
  1. 视图能够对机密数据提供安全保护
  1. 适当的利用视图可以更清晰的表达查询。
索引
在关系数据库中,索引是一种单独的、物理的数对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
建立索引的优缺点
优点:
通过创建唯一索引,可以保证数据记录的唯一性。
可以大大加快数据检索速度。
可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。
在使用ORDER BY和GROUP BY子句中进行检索数据时,可以显著减少查询中分组和排序的时间。
缺点:
但过多的索引会多耗费空间,且降低了插入、删除、更新的效率。
 
Loading...