热线电话:13121318867

登录
2022-04-27 阅读量: 507
MySQL数据库-基础知识(上)

1.说说主键、外键、超建、候选键的差别并举例

  • 超键(super key): 在关系中能唯一标识元组的属性集称为关系模式的超键

  • 候选键(candidate key): 不含有多余属性的超键称为候选键。也就是在候选键中,若再删除属性,就不是键了!

  • 主键(primary key): 用户选作元组标识的一个候选键程序主键

  • 外键(foreign key):如果关系模式R中属性K是其它模式的主键,那么k在模式R中称为外键。

学生信息(学号 身份证号 性别 年龄 身高 体重 宿舍号)和 宿舍信息(宿舍号 楼号)

  • 超键:只要含有“学号”或者“身份证号”两个属性的集合就叫超键,例如R1(学号 性别)、R2(身份证号 身高)、R3(学号 身份证号)等等都可以称为超键!

  • 候选键:不含有多余的属性的超键,比如(学号)、(身份证号)都是候选键,又比如R1中学号这一个属性就可以唯一标识元组了,而有没有性别这一属性对是否唯一标识元组没有任何的影响!

  • 主键:就是用户从很多候选键选出来的一个键就是主键,比如你要求学号是主键,那么身份证号就不可以是主键了!

  • 外键:宿舍号就是学生信息表的外键

2.为什么一般用自增列作为主键?

  • 如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页

  • 如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新记录都要被插到现有索引页的中间某个位置,此时MySQL不得不为了将新记录插到合适位置而移动数据,这增加了很多开销,同时会增加大量的碎片

3.触发器的作用?

  • 安全性,可以基于数据库的值使用户具有操作数据库的某种权利。

  • 审计,可以跟踪用户对数据库的操作。

  • 实现复杂的非标准的数据库相关完整性规则,触发器可以对数据库中相关的表进行连环更新。

  • 触发器能够拒绝或回退那些破坏相关完整性的变化,取消试图进行数据更新的事务。当插入一个与其主健不匹配的外部键时,这种触发器会起作用。

4.什么是存储过程?优缺点是什么?与函数的区别是什么?

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。

优点:

  • 存储过程是预编译过的,执行效率高。

  • 存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。

  • 安全性高,执行存储过程需要有一定权限的用户。

  • 存储过程可以重复使用,可减少工作量冗余。

缺点:移植性差

与函数的区别:

  • 存储过程用户在数据库中完成特定操作或者任务(如插入,删除等),函数用于返回特定的数据。

  • 存储过程声明用procedure,函数用function。

  • 存储过程不需要返回类型,函数必须要返回类型。

  • 存储过程可作为独立的pl-sql执行,函数不能作为独立的plsql执行,必须作为表达式的一部分。

  • 存储过程只能通过out和in/out来返回值,函数除了可以使用out,in/out以外,还可以使用return返回值。

  • sql语句(DML或SELECT)中不可用调用存储过程,而函数可以。

5.什么是视图,优缺点是什么?

视图:是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。

优点:

  • 1对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。

  • 2)用户通过简单的查询可以从复杂查询中得到结果。

  • 3)维护数据的独立性,试图可从多个表检索数据。

  • 4)对于相同的数据可产生不同的视图。

缺点:

查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,那么就无法更改数据

6.说说drop、truncate、 delete区别

  • 1) drop直接删掉表。

  • 2) truncate删除表中数据,再插入时自增长id又从1开始。

  • 3) delete删除表中数据,可以加where字句。

7.什么是临时表,临时表什么时候删除?

临时表可以手动删除

DROP TEMPORARY TABLE IF TEXITS temp_tb

临时表只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间。因此在不同的连接中可以创建同名的临时表,并且操作属于本连接的临时表。创建临时表的语法与创建表语法类似,不同之处是增加关键字TEMPORARY

CREATE TEMPORARY TABLE tmp_table (NAME VARCHAR (10) NOT NULL,time date NOT NULL);select * from tmp_table;

8.关系型数据库和非关系型数据库的优劣?

非关系型数据库以redis为例,NOSQL是基于键值对的,而且不需要经过SQL层的解析,所以性能高,查询速度快。同时由于是键值对,数据之间没有耦合,容易水平扩展

关系数据库:使用SQL语句方便在多个表之间做复杂查询,同时有较好的事务支持,支持对安全性有一定要求的数据访问

9.什么是数据库范式?

  • 第一范式:(确保每列保持原子性)所有字段值都是不可分解的原子值。

  • 第二范式:(确保表中的每列都和主键相关)在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中,数据表里的非主属性都要和这个数据表的候选键有完全依赖关系。

  • 第三范式:(确保每列都和主键列直接相关,而不是间接相关) 数据表中的每一列数据都和主键直接相关,而不能间接相关。

  • 第四范式:要求把同一表内的多对多关系删除。

  • 第五范式:从最终结构重新建立原始结构。

需要注意的是,遵循数据库范式会一定程度影响数据库的查询效率,因此会存在反范式的优化

10.什么是 内连接、外连接、交叉连接、笛卡尔积等?

  • 内连接: 只连接匹配的行

  • 左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行

  • 右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行

  • 全外连接: 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。

  • 交叉连接: 生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配


97.6849
0
关注作者
收藏
评论(0)

发表评论

暂无数据