数据库 200307

1. 什么是超键?什么是主键?二者有什么关系?

  • 超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。
  • 候选键:最小超键,即没有冗余元素的超键。
  • 主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。
  • 只能能唯一标识元组的属性集就是超键,所以,超键不唯一,并且,超键可以是一个属性也可以是多个属性,同时候选键是最少的超键,那么候选键也是不唯一的,但是一个元组,主键是唯一的,是从候选键中选择一个作为主键

2. 数据库的三范式是什么?

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

  • 第二范式:(确保表中的每列都和主键相关) 在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

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


3. char 和 varchar 的区别是什么?

  • char:存储定长数据很方便,CHAR 字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义 char (10),那么不论你存储的数据是否达到了 10 个字节,都要占去 10 个字节的空间(自动用空格填充),且在检索的时候后面的空格会隐藏掉,所以检索出来的数据需要记得用 trim 函数去过滤空格。
  • varchar:存储变长数据但存储效率没有 CHAR 高,必须在括号里定义长度,可以有默认值。保存数据的时候,不进行空格自动填充,而且如果数据存在空格时,当值保存和检索时尾部的空格仍会保留。另外,varchar 类型的实际长度是它的值的实际长度 + 1,这一个字节用于保存实际使用了多大的长度。

4. delete 和 truncate 有什么区别?谁效率更好?

  • DELETE 语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
  • TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。
  • 当表被 TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,而 DELETE 操作不会减少表或索引所占用的空间。 drop 语句将表所占用的空间全释放掉。

5. 存储过程和函数的区别

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

  • 存储过程中可以使用 try-catch 块和事务,而函数中不可以

  • 函数有且只有一个输入参数和一个返回值,而存储过程没有这个限制

  • 函数可以被存储过程调用而存储过程不可以被函数调用


6. 视图的操作会对基本表产生影响吗?

  • 视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,视图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查询。
  • 当用户试图修改视图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的视图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。

7. count(*)和 count(列名)谁的效率更高?

  • count (*) 对行的数目进行计算,包含 NULL

  • count (column) 对特定的列的值具有的行数进行计算,不包含 NULL 值。

  • count (1) 这个用法和 count (*) 的结果是一样的。

  • count (1) 和 count (*) 效率差不多,二者都快于 count (column)


【Java 面试那点事】

这里致力于分享 Java 面试路上的各种知识,无论是技术还是经验,你需要的这里都有!

这里可以让你【快速了解 Java 相关知识】,并且【短时间在面试方面有跨越式提升】

面试路上,你不孤单!
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员世杰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值