1、简述关系型数据库
关系数据库是建立在关系模式上的数据库,通过实体以及实体间的联系均用关系基础来表示,
关系模型由关系数据结构,关系操作集合,关系完整性,三部分组成;
主键:唯一完整标识,一个数据列只能有一个主键,且不能缺失,不能为空,在另外一个表中称为外键;
2、数据库有哪些约束
主键约束:要求主键列数据唯一,并且不能为空;
唯一约束:要求改该列唯一,允许为空,但只能出现异常;
检查约束:某列取值范围限制,格式限制等;
外键约束:用于在两个表 之间建立关系,需要指定引用主表的那一列;
3、数据库,内连接,左连接,右连接有什么区别?
(1)内连接:只查询两个表相连的字段都存在的数据;
(2)左连接:以左表为主,查询左表的数据,右表没有的数据会以NULL 代替;
(3)右连接:以右表为主,查询右表的数据,左表没有的数据会以NULL代替;
(4)自连接:使用自连接可以将自身表的一个镜像当作另一个表来对待,如查询当前员工表的上下级;
4、数据库事务
1. Transaction正确执行的四个要素,ACID(原子性),一致性,隔离性,持久性。
原子性:要不全部都完成,要不全部都不完成,事务正在执行会被回滚,到开始前状态。
一致性:在开始之前和开始之后,数据库的完整性约束没有被破坏,转账 100 只收到 60。
隔离性: 如果两个事务同时执行,为了不让他们混淆,将他们隔离开来
持久性:在事务完成以后,将该事务对数据库的更改持久的保存在数据库中;
5、数据库索引
- 5.1数据库索引是一个排序好的数据结构可以协助快速查询,创建索引可以提高系统的性能
索引分为两类,唯一索引,普通索引
(1) 第一 通过索引可以保证数据库每一行数据的唯一性
(2) 第二 可以大大的加快数据的检索速度
(3) 第三 可以加速表和表之间的链接
(4) 第四 可以在使用分组和排序子句进行数据可以检索时减少分成和排序时间
5.2索引为什么快
索引是有序的,就好像查字典一样,事先给他排序好.然后在通过关键字去查询速度当然就快了。
索引是对数据库表中一列或多列的值进行排序的一种结构.索引的作用相当于图书的目录,
可以根据目录中的页码快速找到所需的内容。
当表中有大量记录时,若要对表进行查询;
第一种搜索信息方式是全表搜索,是将所有记录一一取出,
和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量数据库系统时间,
并造成大量磁盘I/O操作;
第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,
最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录
6、数据库范式
1. 数据库有三种范式
第一 范式在任何一个关系数据中,一范式是对关系模型的基本要求,不满足就不是关系数据库,
就是每一个列(属性),不能再分割成多个列(属性)
通俗解释:一个字段只存储一项信息。
第二 范式 先满足的第一范式,要求数据库表中的每个实例或性必须可以被唯一的区分
为了实现通常为一个表加上一个列,以存储各个实例的唯一标识,标识称为主键
第三 范式 先满足前一和二范式 定义一个数据中不包含已在其他表中已包含的字段,非主键字段。
表不要出现不相关的字段,如果要进行关联可以通过它的唯一标识进行关联
7、存储过程
7.1 什么是存储过程?
将常用的或很复杂的工作预先用SQL 语句写好,并指定一个名称存起来
那么以后想要用数据,提供已定义好的存储过程的功能相同的服务时;
只需要执行 execue;即可字段完成,和函数调用差不多.
7.2 存储过程使用场景
存储过程只在创建时编译而一般SQL 语句每执行一次编译,所以使用存储过程可以大大的数据的执行速度 , 当对数据进行很复杂 的操作的时候,如对表进行 upate,insert,select,Delete时,可以将此复杂操作用存储过程存起来, 与数据事务进行结合.
7.3 存储过程的优点
使用存储过程可以重复使用,可减少开发人员的工作,安全性提高,可以设定只有某些指定的用户可以使用。
8、数据库优化经验
(1) 当只要一行数据时使用 LIMIT 1
(2) 为搜索字段建索引,以及常用 WHERE的地方
(3) 在Join表的时候使用相当类型的例,并将其索引
(4) 避免 SELECT * (5)永远为每张表设置一个ID (6)应尽量避免在where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。 如:selectid from t where num/2=100应改为:select id fromt where num=100*2
9.3000万数据的表,要删除1000万条数据,怎样操作最快
第一种方式: 建一个新表,把不需要删除的数据select出来放进去 然后把原表删除,然后重命名,重建索引
第二种 3000万数据的表,要删除1000万条数据,怎样操作最快
一:如果有唯一字段的,创建主键和索引,提高查询主键字段效率;
二:如果这些数据是变更的,可以通过时间来创建分区;
三:如果部分老数据都是不需要的数据(不常用),可以定期将老数据备份到其他位置;
四:如果是查询的话,可以通过分页查询的形式进行,不要一次性读取过多数据。
9、数据库查询
9.1 --用一条SQL语句查询出每门课都大于80分的学生姓名
select distinct name from aa where name not in (select distinct name from aa where fengshu<=80)
9.2 表中有 10条重复的数据,如果删除之留一条