一:什么是数据库?
DBMS(Data Base Management System,数据库管理系统)
二:关系数据库是什么?
几个运算:
以下是关系运算:
投影(projection):调取某一列.
选择(selection):调取某一行.
连接(join):通过外键(每个表的主键)把数据拼接起来.
除(division): 除就是从“被除表格”中调取“除表格”中包含的所有行,然后再从中去掉“除表 格”中所有行的运算。
三:设计数据库
E-R模型:E(entity,实体) | R(relationship,关系)
E-R模型的分析方法:一对一,一对多,多对多
表格的规范化(第一范式,第二范式....)
关系数据库的设计分为概念模式、内部模式和外部模式三个部分.
四:使用数据库-SQL库的基本操作
SQL的功能:生成表格,录入/调取表格,管理用户
①数据定义语言 DDL:生成表格 (对表格定义)
②数据操作语言 DML:输入,调取数据 (对表格内容处理)
③数据控制语言 DCL:管理用户的访问 (权限)
查询(query)语句:SELECT 列名 FROM 表名 WHERE 条件
1.如果是调取符合条件的所有列,列名用*代替;
2.在条件中使用字符要用' '或者" "引号引起来;
3.条件如果不确定,只是知道其中几个字,可以用 where 列名 like'%果';
4.多个条件中间用OR,and等;
5.如果要对最后结果进行排序,在最后加上ORDER BY 列名;
6.部分计算函数
7.连接两个不同的表.相同的列名用 表名.列名 区分开来,不同的就直接写开
8.创建表格:
CREAT TABLE 表名
(列名1 值域,
列名2 值域,
...
primary key(列名));
表格限制直接写在值域后面,这就是约束(constraint),通过给予限制,防止输入矛盾数据.
9.插入数据:
insert into 表名(列名1,列名2,列名3...) values (值1,值2,值3...);
10.删除和更新命令:
delete删除
delete from 表 where...
update更新
update 表名
set 列名='值2' 把列名是值1的改成值2
where 列名='值1'
11.比较运算符
12.与 或 非 逻辑运算符
13.通配符
14.设定数值范围:between ... and ...
例如:where 列名 between 值1 and 值2
15.有空行时:
where 列名 IS NULL
16.分组计算函数:
GROUP BY 分组依据的名,avg(列名) HAVING avg(列名) >30
17.子查询检索
select * from 表 where 列名 in (select 列名 from... where 条件)
18.相关子查询检索:内部查询可以使用外部指定的表格(加粗位置)
19.连接(JOIN)
内部连接:仅选择数值相同的行进行连接,我们称之为内部连接(inner join);
外部连接:全部保留任何一方表格的所有行,将一方中没有的行设置为空值的连接方法称为外部连接(outer join)。
两个表格在SOL命中分左右时,根据保留全部表格行的情况,分为左外部连接(left outer join)和右外部连接(right outerjoin)。
20.制作视图(VIEW)
CREAT VIEW 表1(列1,列2,列3...)
AS select *
from 表2
where 条件;
①做成视图表之后,表名可以直接用于检索的from语句中
②删除视图
DROP VIEW 表名;
③删除表
DROP TABLE 表名;
21.从应用程序使用SQL
在程序语言使用SQL的方式有很多种。编译程序时预置 SQL命令的静态 SQL及执行程序时送出SOL命令的动态 SOL;
22.使用游标移动行
使用程序语言的循环语句(loop statement)移动游标,可以访问多行;
使用游标抽取每行的数据,称作提取(fetch)
五:数据库的应用
- 数据库事务:使用数据库的用户可以利用数据库进行数据的检索/插入/更新/删除,用户的一个连贯操作成为事物.
- 数据库需要有如下属性:
- 提交(COMMIT;):确定事务处理的指令.
- 回滚(ROLLBACK;):取消事务处理的指令.
- 事务处理必须由提交/回滚的任意一个指令来结束.
- 使数据不发生矛盾:数据库事务需要有一致性;
- 通过锁进行控制
- 可序列化:多个事务并行处理也和逐个处理得到的结果一样.
- 由于安排可序列化,就有必要进行同时执行控制(concurrency control)。这种方法最常使用的是由锁(lock)来进行控制。读取数据时使用共享锁(shared lock),写入数据时使用独占锁(exclusive lock)。
- 锁的对立关系
- 其他同时执行控制:时间戳控制(tinestamp control) 乐观控制(Optimistic control)
- 设置隔离级别:
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
语句set transaction:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
①脏读:事务1还没提交,事务2就读取了,在事务1回滚的情况下,事务2读取了不存在的行
②非重复读:事务1读取的时候,事务2更新了这行并提交了,事务1又读了导致结果不一样
③虚读:事务1进行检索,获得多行结果,事务2追加了符合该条件的行,事务1二次检索的时候结果发生变化.
未设定隔离级别的情况下,默认serializable;
13.数据库安全问题:赋予(GRANT)权限
GRANT SELECT,UPDATE ON 表名 TO 人物;
-----赋 予 操 作 权 限
如果想要给 被授权的用户 再 授予其他用户权限的权限,可以附带WITH GTANT OPTION
GRANT SELECT,UPDATE ON 表名 TO 用户 WITH GRANT OPTION;
---------能够授予其他用户权限
如果想要收回GRANT命令授予的权限,此时使用REVOKE(撤销)命令;
REVOKE SELECT,UPDATE ON 表名 TO 用户;
----------能够收回权限
利用可视化表,通过设定对可视表的权限,能够在安全性上进行更加精细化的管理;