数据库你我的选择

数据库

主键,超键,候选键,外键

  1. 主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)
  2. 超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键
  3. 候选键:是最小超键,即没有冗余元素的超键
  4. 外键:在一个表中存在的另一个表的主键称此表的外键

数据库的四个特性及含义?

答:数据库事务transanction正确执行的四个基本要素。ACID,原子性(Atomicity)、一致性(Correspondence)、隔离性(Isolation)、持久性(Durability)

  1. 原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在zzzzzzzzzzzzzzzzzzzzzz中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
  2. 一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏
  3. 隔离性:隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行 相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请 求,使得在同一时间仅有一个请求用于同一数据
  4. 持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚

 

的工作原理及其种类?

答:数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树

  1. 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引
  2. 为表设置索引要付出代价的:
  1. 增加了数据库的存储空间
  2. 在插入和修改数据时要花费较多的时间(因为索引也要随之变动)

 

外连接

答:概念:包括左向外联接、右向外联接或完整外部联接

 

左连接:left join 或 left outer join

答:左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)

  1. sql语句

select * from table1 left join table2 on table1.id=table2.id

注释:包含table1的所有子句,根据指定条件返回table2相应的字段,不符合的以null显示

 

右连接:right join 或 right outer join

答:右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值

1)sql语句

select * from table1 right join table2 on table1.id=table2.id

注释:包含table2的所有子句,根据指定条件返回table1相应的字段,不符合的以null显示

 

  1. sql语句

select * from table1 full join table2 on table1.id=table2.id

注释:返回左右连接的和(见上左、右连接)

 

数据库优化的思路

  1. SQL语句优化
  1. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描
  2. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如select id from t where num is null

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0

c)很多时候用 exists 代替 in 是一个好的选择

d)用Where子句替换HAVING 子句 因为HAVING 只会在检索出所有记录之后才对结果集进行过滤

 

索引优化

答:看上下索引

用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描

  1. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如select id from t where num is null

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0

c)很多时候用 exists 代替 in 是一个好的选择

d)用Where子句替换HAVING 子句 因为HAVING 只会在检索出所有记录之后才对结果集进行过滤

索引优化

答:看上下索引

 

猜你喜欢

转载自blog.csdn.net/qq_42851004/article/details/81624475