基本知识
四种语言
DDL Data Definition Language
- CREATE ALTER COMMENT RENAME
- DROP TRUNCATE
DML(Data Manipulation Language) - SELECT INSERT UPDATE DELETE EXPLAIN PLAN
- MERGE CALL LOCK TABLE
DCL(Data Control Language)数据库控制语言 授权,角色控制等 - grant
- revoke
TCL(Transaction Control Language)事务控制语言 - SAVEPOINT 设置保存点
- ROLLBACK 回滚
- SET TRANSACTION
数据库概念和范式
- 实体(对应一个表):
- 属性(对应一列):
- 码:一个或多个构成候选码。
- 主码(主键)
- 候选码
- 外码(外键): 和其他的表join。
- 主属性和非主属性。
- 码:一个或多个构成候选码。
- 元组:一种取值(对应一行)
范式
- 属性(对应一列):
- 为啥有范式。范式越高,数据的冗余度越小
- 分类:
1NF: 属性不可分 (1NF是对属性的原子性约束,要求属性具有原子性,不可再分解)每一个属性只表示一个概念。
2NF: 符合1NF,并且非主属性完全依赖于码。(2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性,更通俗说有主键ID)
学生 课程 老师 老师职称 教材 教室 上课时间
小明 一年级语文(上) 大宝 副教授 《小学语文1》 101 14:30
注意:
教材只和课程有关
(学生 课程)是码
一个表中应当只含有一种数据。
(学生,课程)是个码,课程却决定了教材,这就叫做不完全依赖,或者说部分依赖。出现这样的情况,就不满足第二范式!有什么不好吗 有冗余。3NF: 符合2NF,并且,消除传递依赖。
(3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余)
老师职称只和老师有关。BNF: 符合3NF,并且,主属性不依赖于主属性。
关键字
删除 drop、delete与truncate
- drop:不要一张表。
- truncate:保留表而删除所有数据
- delete: +where 删除部分数据。 可以回滚,速度最慢
选择插入更新删除
- SELECT
- INSERT
- UPDATE
- DELETE
explain
查看该SQL语句有没有使用上了索引,有没有做全表扫描
权限控制 grant revoke。
having和where
- Where 是一个约束声明 Having是一个过滤声明
- 在查询过程中Where> 聚合语句(sum,min,max,avg,count) > having子句优先执行。
join 分类:
- outer
- left:左表全有
- right:右表全有
- full
- inner:指定相等
- natural:默认相等
- cross:笛卡尔
并发控制
什么是事务?
- 事务(Transaction)是并发控制的基本单位。它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
- 为什么事务? 是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。
- 特性 ACID
- Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。
- Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。
- Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。
- Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。
并发控制
- 为什么?确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。
- 乐观并发控制(乐观锁) :假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。
- 悲观并发控制(悲观锁):假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作
索引 + 存储过程 + 视图
索引
索引是什么?B树。有什么作用以及优缺点?
- 为什么? 加快检索
- 优缺点?
- 索引加快数据库的检索速度
- 索引降低了插入、删除、修改等任务的速度(需要维护)
- 索引需要占物理和数据空间
B+树。
-
原理
- 索引页和数据页:一条索引记录中包含的基本信息包括:键值(即你定义索引时指定的所有字段的值)+逻辑指针(指向数据页或者另一索引页)。
- 分类:
- 聚集索引,表数据按照索引的顺序来存储的。对于聚集索引,叶子结点即存储了真实的数据行,不再有另外单独的数据页。
- 非聚集索引,表数据存储顺序与索引顺序无关
创建
- CREATE INDEX index_name
ON table_name (column_name) - explain
什么是存储过程?有哪些优缺点?
- 为什么?预编译的SQL语句块集合。根据名称和参数调用返回结果。
- 好处:效率高。直接就在数据库服务器运行。代替大量sql。
- 缺点:业务逻辑被封装到存储过程。调试测试。 没有缓存。
- 用法:create produce fname as go exec fname
什么是视图?以及视图的使用场景有哪些?
- 视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。
建立虚表: - 只暴露部分字段给访问者。
- 把多个表查询结果联合起来,查询者只需要直接从视图中获取数据,不必考虑数据来源于不同表所带来的差异
创建: - create view 视图名 as select 语句
- drop view 视图名
sql 注入问题。
- 把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。
- 预防
- 输入输出检查。
- PreparedStatement类是java的一个类。JDBC:执行SQL语句的Java API
扩展
需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。
关于数据库的扩展主要包括:
- 业务拆分 一个数据库按业务变成多个数据库
- 主从复制 实现读写分离
- 数据库分库与分表:表分开,库分开。
SQL语句
select 相关
基本款
select t1.XX, t2.XX count (distinct t2.XXX ) as c // 定义返回表单的形式
from Table1 t1 join Table2 t2 on t1.a=t2.b //查询的位置
where t1.a>0 // 数据满足的条件
group by t1.a // 分组使用
having Max()>0 //分组聚合的结果满足条件
order by //排序
limit 2,1 //第二行,一条数据
select可嵌套子查询