MySQL技术问答系列-NO5

119 篇文章 0 订阅
60 篇文章 0 订阅

一.什么是视图?游标是什么?

视图和游标都是数据库中的概念,它们在数据库管理和操作中起着不同的作用。

视图:

  1. 视图是原始数据库数据的一种变换,它提供了一个查看表中数据的另外一种方式。可以将其视为一个移动的窗口,通过这个窗口,用户可以看到感兴趣的数据。
  2. 视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。
  3. 视图的定义存在数据库中,但与此定义相关的数据并没有再存一份于数据库中。通过视图看到的数据实际上存放在基表中。
  4. 视图看上去非常像数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。
  5. 视图具有简单性,它不仅可以简化用户对数据的理解,也可以简化他们的操作。

游标:

  1. 游标是一个用于在关系型数据库中遍历数据记录的机制。它允许程序员通过指针方式来访问和处理查询结果集中的每一条记录。
  2. 游标通常被用来处理大量数据集合,以便逐行或逐批地进行操作。
  3. 游标主要有两种类型:静态游标和动态游标。常见的属性包括位置、大小、方向、是否可滚动等。
  4. 实际上,游标是一段私有的SQL工作区,也就是一段内存区域,用于暂时存放受SQL语句影响到的数据。当使用SQL的select查询操作返回的结果是一个包含一行或者是多行的数据集时,游标可以允许我们在结果集上进行更复杂的操作,如查看结果的第一行、下一行、最后一行、前十行等。

二.什么是存储过程?用什么来调用?

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,它存储在数据库中,一次编译后永久有效。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程可以视为数据库内置的一种编程语言,具有自己的变量、if语句、循环语句等,可以将多条SQL语句以逻辑代码的方式串联起来,按照一定的逻辑执行。

存储过程可由应用程序调用、由用户调用,也可在数据库系统(如SQL Server)启动时调用。当应用程序或用户执行存储过程时,通常使用EXECUTE命令或其快捷方式EXEC,后跟该过程的名称来调用。如果存储过程是T-SQL批处理中的第一个语句,则无需EXECUTE或EXEC关键字即可执行该过程。

存储过程的主要优点在于其速度快,尤其在数据量特别庞大的情况下,利用存储过程能达到倍速的效率提升。此外,存储过程还允许模块化的设计,即只需创建一次,以后在程序中就可以调用多次。然而,存储过程也存在一些缺点,如移植性差、编写难度大、维护性差等。

三.如何通俗地理解三个范式?

数据库设计时的三个范式(1NF、2NF、3NF)是为了确保数据库的结构合理、减少数据冗余和保证数据的完整性。

  1. 第一范式(1NF):确保每列都保持原子性,即数据库表的每一列都是不可分割的原子数据项。这意味着表中的每个字段都是最小的数据单元,不能再进行拆分。例如,如果一个字段包含多个值(如学生的多个电话号码),那么应该将这些值拆分为多个独立的字段。这样做有助于消除数据的重复和冗余。
  2. 第二范式(2NF):在第一范式的基础上,确保表中的非主键列完全依赖于主键。换句话说,非主键列的值必须与主键直接相关,而不是与其他非主键列相关。如果存在部分依赖关系(即某些字段只依赖于主键的一部分),就需要将这些字段拆分到另一个表中。这样,每个表都只包含与主键直接相关的数据,进一步减少了数据冗余。
  3. 第三范式(3NF):在第二范式的基础上,确保非主键列之间不存在传递依赖关系。传递依赖是指一个非主键列的值依赖于另一个非主键列的值。如果存在这种依赖关系,就需要将这些字段拆分到另一个表中。通过消除这种依赖关系,可以进一步减少数据冗余和不一致性。

四.什么是基本表?

基本表(Base Table)是SQL中用于表示传统的关系模型中的关系模式的术语。它是数据库中数据存储的基础单位,由行(记录)和列(属性)组成的二维表格。每一行代表着一组相关数据的集合,即一条记录;每一列则代表着记录中的一个具体属性。基本表直接存储在数据库中,是数据持久化的直接载体。

基本表具有以下特点:

  1. 列是同质的,即每一列中的分量都是同一类型的数据,来自同一个域。
  2. 不同的列可以来自同一个域,每一列又称之为属性,不同的属性要有不同的属性名。
  3. 列的顺序和行的顺序都无关紧要。
  4. 任意两个元组的候选码不能取相同的值。
  5. 分量必须要取原子值,即一个表中的某一项不能再拆成好几项。

基本表与查询表和视图表有所不同。查询表是查询结果对应的表,而视图表是由基本表和其他视图表导出的表,是虚表,不对应实际存储的数据。基本表则是实际存在的表,直接反映了数据的存储状态。

在数据库设计中,了解基本表的概念及其特点是至关重要的,它有助于设计高效、灵活的数据库系统。

五.简述视图的优点?

  1. 简化操作:视图可以简化用户对数据的理解和操作。通过将经常使用的查询操作定义为视图,用户无需每次都指定全部的条件,只需简单地操作视图即可,从而极大地简化了对数据库的操作。
  2. 数据安全性:视图提供了数据的安全保护功能。通过视图,用户只能看到和访问他们被授权的数据,而无法看到或修改其他未授权的数据。这在一定程度上保障了数据的安全性,防止了未授权用户对数据的访问和修改。
  3. 逻辑数据独立性:视图使得应用程序和数据库表在一定程度上独立。即使数据库表的结构发生变化,只要视图的结构保持不变,应用程序的代码就无需修改,从而保证了逻辑数据独立性。
  4. 屏蔽复杂性:视图可以屏蔽数据库的复杂性。用户无需了解复杂的数据库表结构和关联关系,只需通过视图来查看和操作数据,从而降低了使用数据库的门槛。
  5. 集中数据:有时用户需要的数据分散在多个表中,定义视图可以将这些数据集中在一起,方便用户的数据查询和处理。
  6. 权限管理:通过授予用户使用视图的权限,而不是直接访问数据表,可以简化权限管理。这样,不仅可以控制用户对数据的访问范围,还能增加数据的安全性。
  7. 适应需求变化:当业务系统的需求发生变化时,可能需要改动数据表的结构。使用视图可以减少这种改动的工作量,因为视图可以重新组织数据以满足新的需求。

六.MySQL中的NULL是什么意思?

NULL 是一个特殊的标记,用于表示某个字段的值是缺失的或未知的。它不是零(0),也不是空字符串(''),而是一个完全没有值的状态。

七.MySQL中主键、外键和索引的区别?

主键(Primary Key):

主键是用于唯一标识数据库表中每一行/记录的关键字段。它具有以下特点:

  • 唯一性:主键的值在表中必须是唯一的,不能重复。
  • 非空性:主键字段的值不能为空。
  • 稳定性:主键值一旦确定,就不应该被修改。
  • 永久性:主键值在整个数据的生命周期中是唯一不变的。

主键的作用是确保表中每一行数据都能够被唯一地标识和访问。常见的主键选择是使用自增长的整数或具有唯一性的字段(如身份证号码、邮箱等)。

外键(Foreign Key):

外键是用于建立表与表之间关系的字段。它关联另一个表的主键,从而在表之间创建关系。外键具有以下特点:

  • 引用关系:外键字段关联到另一个表的主键字段,以建立两个表之间的关系。
  • 数据一致性:外键用于保持表之间的数据一致性,确保引用的数据存在于被引用的表中。
  • 可空性:外键字段可以允许为空(null),表示该行数据没有关联到其他表的数据。

外键的主要作用是保证数据的一致性和完整性,并且减少数据冗余。

索引(Index):

索引在MySQL中是一个用于提高数据检索速度的数据结构。它的主要作用如下:

  • 加速查询:索引可以极大地减少数据库系统必须扫描的数据量,从而提高查询速度。
  • 优化排序和分组操作:通过对数据进行排序,索引可以帮助数据库系统更快地执行排序和分组操作。
  • 提高数据检索速度:索引可以显著提高数据的检索速度,尤其是在处理大量数据时。

八.你可以用什么来确保表格里面的字段只接受特定范围里的值?

  1. 数据类型限制:在创建表或字段时,可以指定数据类型,如整数型(INT)、字符型(VARCHAR)、日期型(DATE)等。这些数据类型本身就限制了字段所能接受的值的范围。例如,一个整数类型的字段就不能接受字符串或日期作为值。
  2. 数据完整性约束:MySQL提供了多种数据完整性约束,其中一些可以直接用于限制字段的取值范围。例如:
    • CHECK约束:这种约束用于限制输入列的值。你可以在定义表结构时,使用CHECK约束来指定字段必须满足的条件。如果尝试插入或更新不满足这些条件的值,数据库将报错。但需要注意的是,MySQL在较早的版本中并不支持CHECK约束,直到MySQL 8.0.16版本才开始支持。
    • 主键约束(Primary Key):确保字段的值是唯一的。虽然这不是直接限制值的范围,但确保数据的唯一性有助于保持数据的准确性和一致性。
    • 唯一约束(Unique):类似于主键约束,但允许字段中有NULL值。
    • 非空约束(NOT NULL):确保字段始终有值,不能为空。
  1. 触发器(Triggers):触发器是一种在数据库表上发生特定事件(如INSERT、UPDATE或DELETE)时自动执行的特殊类型的存储过程。你可以使用触发器来在插入或更新数据之前检查字段的值,并在值超出特定范围时阻止操作或进行修改。
  2. 应用程序级别的验证:除了数据库级别的验证外,你还可以在应用程序级别进行验证。在将数据发送到数据库之前,应用程序可以检查字段的值,并拒绝超出范围的值。这种方法的缺点是,如果多个应用程序或用户直接访问数据库,可能会绕过这些验证。

九.说说对SQL语句优化有哪些方法?

  1. 选择恰当的数据类型:选择合适的数据类型可以减少存储空间的占用和提高查询性能。例如,对于存储较大的数值或文本,使用正确的数据类型能够节省存储空间。
  2. 避免SELECT *:尽量使用具体字段代替SELECT *进行查询,这样可以节省资源、减少网络开销,并可能利用到覆盖索引,提高查询效率。
  3. 使用合适的索引:根据常用的查询和连接条件创建适当的索引,可以极大地减少查询时间。但是,索引也会占用存储空间,并可能影响插入和更新操作的性能,因此需要避免过多的索引。
  4. 避免在查询中使用函数:在查询语句中使用函数,尤其是在WHERE条件中使用函数,会导致数据库引擎无法使用索引进行优化。尽量将函数应用于查询结果,而不是在查询中使用。
  5. 使用连接(JOIN)代替子查询:在多表查询情况下,使用连接(JOIN)操作通常比使用子查询更高效。JOIN操作可以减少查询的复杂度,并能够使用索引进行优化。
  6. 优化LIKE语句:使用LIKE语句时,尽量避免以通配符开头,因为这样的查询通常无法利用索引。
  7. 减少全表扫描:通过优化查询条件,尽量让数据库使用索引进行查询,而不是进行全表扫描。
  8. 使用批处理操作:对于大量的数据操作,使用批处理操作可以提高效率。
  9. 优化排序和分组操作:尽量减少排序和分组操作中的数据量,可以考虑在查询之前对数据进行预处理或者使用索引来优化排序和分组操作。
  10. 避免在列上进行计算:这会导致数据库引擎无法进行索引查找,从而进行全表扫描。
  11. 使用LIMIT分页:当查询大量数据时,使用LIMIT子句进行分页,避免一次性返回过多数据。
  12. 分析查询执行计划:使用数据库提供的工具(如MySQL的EXPLAIN)分析查询执行计划,找出性能瓶颈并进行优化。
  • 30
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纵然间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值