数据库复习

数据库复习

实体:包含数据特征的事物对象在概念世界中的抽象名称。

关系模型:一种采用关系二维表的数据结构形式存储实体及其实体间联系的数据模型。

关系表、元组、属性、域、基数、实体

主键、候选键、复合键、代理键

左外连接、右外连接、全外连接

  • SQL:结构化查询语言
    • 数据定义语言
    • 数据操纵语言
    • 数据查询语言
    • 数据控制语言
    • 事务处理语言
    • 游标控制语言

order by 排序查询、asc升序、desc降序 group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。

image-20220119223127174
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
B.maxScores 最高分科目,C.course_id 课程ID,D.course_name 对应课程名,E.name 姓名
FROM
(
SELECT
A.stu_id,
max( A.scores ) AS maxScores
FROM
grade AS A
JOIN stu_course AS B ON A.course_id = B.course_id
GROUP BY
A.stu_id
) AS B,grade as C,stu_course as D,student as E
WHERE B.maxScores = C.scores and B.stu_id = C.stu_id and C.course_id = D.course_id and E.stu_id = D.stu_id;

上述语句难点在于如何实现查询最高分科目名称及其对应分数,思路:先得到该学生科目最高分,再根据该分数,在原表中进行匹配。

mysql中,修改视图数据,原表数据也会发生变化,但是一般不通过视图更新表数据。

ACID

脏读、不可重复读、幻像读、丢失更新

共享锁和排他锁

隔离级别:读取未提交、读取已提交、可重复读、可串行化

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。 调用: 1)可以用一个命令对象来调用存储过程。 2)可以供外部程序调用,比如:java程序。

优点: 1)存储过程是预编译过的,执行效率高。 2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。 3)安全性高,执行存储过程需要有一定权限的用户。 4)存储过程可以重复使用,可减少数据库开发人员的工作量。 缺点:移植性差

索引就一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。 锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

视图:是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查询。 游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

视图:是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查询。 游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

  • TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
    TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 TRUNCATE,DELETE,DROP 放在一起比较:
    TRUNCATE TABLE :删除内容、释放空间但不删除定义。
    DELETE TABLE: 删除内容不删除定义,不释放空间。
    DROP TABLE :删除内容和定义,释放空间。

    truncate与drop是DDL语句,执行后无法回滚;delete是DML语句,可回滚。
    truncate只能作用于表;delete,drop可作用于表、视图等。
    truncate会清空表中的所有行,但表结构及其约束、索引等保持不变;drop会删除表的结构及其所依赖的约束、索引等。
    truncate会重置表的自增值;delete不会。
    truncate不会激活与表有关的删除触发器;delete可以。
    truncate后会使表和索引所占用的空间会恢复到初始大小;delete操作不会减少表或索引所占用的空间,drop语句将表所占用的空间全释放掉。