随便记的一点数据库

关系数据库

二维表(行和列)

E-R图

实体:对应数据表,长方体来表示,每个实体都有自己的实体成员,即表中记录

属性:实体所具有的属性,椭圆形表示,唯一属性是唯一可用来标识该实体实例属性,下划线表示,一般实体至少有一个唯一属性

关系:实体之间的联系,菱形表示(一对一;一对多;多对多)

数据库中的键

超键—在关系中能唯一标识元组的属性集称为关系模式的超键

候选键—不含有多余属性的超键称为候选键,也称为最小超键 

主键—对数据库表中的每一行数据进行唯一标识

外键—表中的一列,其值是另一个表的主键

三大完整性

实体完整性:实体完整性要求每个表都有唯一标识符,每一个表中的主键字段不能为空或者重复的值

参照完整性:表间规则,参照完整性要求关系中不允许引用不存在的实体,设定相应的更新删除插入规则来更新参考表

用户自定义完整性:用户自定义完整性是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求

三大范式

范式:一张数据表的表结构所符合的某种设计标准的级别

1NF:每个属性都不可再分

2NF:在1NF的基础之上,消除了非主属性对于码的部分函数依赖

(候选码)即上文中的候选键——可以唯一标识元组的一个或一组属性集

若某个关系有N个候选码,可以选定其中一个作为主码

主码中的属性为主属性(其他为非主属性)

(学号,课名)— 码

(姓名,系名,分数,系主任)— 非主属性

对于(学号,课名)→ 姓名,有学号 → 姓名,存在非主属性姓名对码(学号,课名)的部分函数依赖

3NF:在2NF的基础之上,消除了非主属性对于码的传递函数依赖

(学号)— 码

(姓名,系名,系主任)— 非主属性

对于 学号 → 系名,同时 系名 → 系主任,所以存在非主属性系主任对于码学号的传递函数依赖

常用SQL语句

--建表 
create table sample(
    id int  not null primary key,
    name varchar(20),
    age int not null
);

/*删除表*/
delete from sample;
delete * from sample;
drop sample;
truncate sample;
/*
delete:删除表的内容,表的结构还存在,不释放空间,可以回滚恢复;
drop:删除表内容和结构,释放空间,没有备份表之前要慎用;
truncate:删除表的内容,表的结构存在,可以释放空间,没有备份表之前要慎用;

执行速度:drop > truncate > delete
*/

--插入
insert into sample values (1,'QPee',18);
insert into sample (id,age) values (2,18);

--删除
delete from sample where id=1;

--修改
update sample set name='QPee' where id=2;

--查询
select * from sample;


索引问题(提高数据库表数据访问速度)

B树

M为树的阶数,B-树或为空树,否则满足下列条件:

1、根结点的儿子数为[2, M]

2、除根结点以外的非叶子结点的儿子数为[M/2, M]

3、有n个孩子的节点有n-1个关键字

4、所有叶子结点位于同一层

B+树

B+树是B-树的变体,其定义基本与B-树相同,除了:

1、非叶子结点的子树指针与关键字个数相同

2、为所有叶子结点增加一个链指针

3、所有关键字都在叶子结点出现

B+树适用于数据库索引---磁盘读写代价更低(非叶子结点没有指向关键字具体信息的指针),查询效率更稳(任何关键字的查找路径都是从根结点到叶子结点),范围查询更快(叶子节点构成了链表)

聚簇索引和非聚簇索引

聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针

聚簇索引:表数据按照索引的顺序来存储,索引项顺序与表中记录物理顺序一致。叶子结点即存储了真实的数据行,不再有另外单独的数据页。 在一张表上最多只能创建一个聚集索引,因为真实数据的物理顺序只能有一种,一般情况下主键会默认创建聚簇索引

非聚簇索引:表数据存储顺序与索引顺序无关,叶结点包含索引字段值及指向数据页数据行的逻辑指针,其行数量与数据表行数据量一致

普通索引(index):最基本的索引,没有任何限制
唯一索引(unique):与"普通索引"类似,索引列的值必须唯一,但允许有空值
主键索引(primary key):它是一种特殊的唯一索引,不允许有空值
全文索引(fulltext):仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时耗空间
组合索引:遵循”最左前缀“原则

视图

视图是从一个或多个表导出的虚拟的表,其内容由查询定义,具有普通表的结构,但是不实现数据存储
单表视图一般用于查询和修改,会改变基本表的数据;多表视图一般用于查询,不会改变基本表的数据

存储过程

存储过程是SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理,是数据库中的一个对象,存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能

触发器

触发器是种特殊的存储过程,它的执行不是由程序调用,也不需要手动操作,它是由事件来触发

事务

ACID

原子性(Atomicity):事务作为一个整体被执行,包含在其中的操作要么全部被执行,要么都不执行
一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态
隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行
持久性(Durability):一个事务一旦提交,对数据库的修改应该永久保存在数据库中

并发事务的问题

脏读:读到未提交更新的数据

不可重复读:读到已经提交更新的数据,但一个事务范围内两个相同的查询却返回了不同数据

幻读:读到已提交插入数据

不可重复读和幻读的区别:简单来说,不可重复读是由于数据修改引起的,幻读是由数据插入或者删除引起的。

隔离级别

Read uncommitted(读未提交):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据

Read committed(读已提交):只能读取到已经提交的数据,Oracle等多数数据库默认都是该级别 (不重复读)

Repeatable read(可重复读):可重复读,在同一个事务内的查询都是事务开始时刻一致的,MySQL默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读

Serializable(序列化):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

四种事务隔离级别从隔离程度上越来越高,但同时在并发性上也就越来越低

表连接

内连接(inner join):表示只包含匹配的记录

外连接:表示包含不匹配的记录(左外连接left join、右外连接right join、全外连接full join

交叉连接(笛卡尔积)(cross join):指的是表 A 和表 B 不存在关联字段,这时表 A(共有 n 条记录)与表 B (共有 m 条记录)连接后,会产生一张包含 n x m 条记录的新表

数据库优化

  1. 表的设计(结合三范式)
  2. 索引
  3. SQL优化
  4. 存储过程
  5. 缓存
  6. 读写分离
  7. 分区、分表、分库
  8. 数据库系统配置优化
  9. 定时清除数据及碎片整理
  10. 硬件升级

其他

MySQL 对于千万级的大表要怎么优化?

Mysql数据库表分区深入详解

mysql分表,分区的区别和联系

Reference

如何解释关系数据库的第一第二第三范式?

从B树、B+树、B*树谈到R 树

数据库进阶系列之一:漫谈数据库索引

聚簇索引和非聚簇索引的区别

Mysql主键索引、唯一索引、普通索引、全文索引、组合索引的区别

彻底理解数据库事务

数据库事务隔离级别

深入分析事务的隔离级别

数据库表连接的简单解释

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值