数据库系统
前言
记录一些数据库的基础和重要知识点。
数据库基本操作
创立表
-
create
1
2
3
4
5
6create table student
(
sno int primary key not null,
sname varchar(30) not null,
ssex varchar(2)
)
表中数据 - 增删改
-
insert
1
2insert into student values(1,'Sammy','f')
insert into student(sno,sname) values('2','Tom') -
update
1
2
3update student
set sname = 'Teddy'
where sno = 1 -
delete
- 删除特定值
1
2delete from student
where sname = 'Tom'- 删除所有行
1
2
3
4-- 第一种
delete from student
-- 第二种
delete * from student
删除表
-
drop
1
drop table student
修改表
-
alter
-
增加列
1
2-- 增添一列班级
alter table student add sclass varchar(255) -
删除列
1
alter table student drop sclass
-
改变列数据类型
1
alter table student alter sclass int
-
视图
-
创建视图
1
2
3
4create view stu_view as
select sno,sname
from student
where sname = 'Ted' -
撤销视图
1
drop view stu_view
授权GRANT
1 | grant 权限 on 数据库对象 to 用户 |
-
授权普通用户DML操作
1
2
3
4grant select on testdb.* to common_user@'%'
grant insert on testdb.* to common_user@'%'
grant update on testdb.* to common_user@'%'
grant delete on testdb.* to common_user@'%' -
授权开发人员等DDL操作
1
2
3
4
5
6
7
8
9
10-- grant 创建、修改、删除 MySQL 数据表结构权限。
grant create on testdb.* to developer@'192.168.0.%';
grant alter on testdb.* to developer@'192.168.0.%';
grant drop on testdb.* to developer@'192.168.0.%';
-- grant 操作 MySQL 外键权限。
grant references on testdb.* to developer@'192.168.0.%';
-- grant 操作 MySQL 临时表权限。
grant create temporary tables on testdb.* to developer@'192.168.0.%';
drop VS delete VS truncate
-
drop(丢弃数据): drop table 表名 ,直接将表都删除掉,在删除表的时候使用。
-
truncate (清空数据): truncate table 表名 ,只删除表中的数据,再插入数据的时候自增长id又从1开始,在清空表中数据的时候使用。
-
delete(删除数据) : delete from 表名 where 列名=值,删除某一列的数据,如果不加 where 子句和truncate table 表名作用类似。
truncate 和不带 where 子句的 delete、以及 drop 都会删除表内的数据。
truncate 和 delete 只删除数据不删除表的结构(定义)
执行drop语句,此表的结构也会删除,也就是执行 drop 之后对应的表不复存在。
内连接 VS 外连接
索引
定义
索引就像是书的目录一样,为了提高数据的查询效率。
缺点:
-
创建索引和维护索引需要耗费时间,随着数据量的增加而增加
-
占用物理空间
-
对表进行增删改查需要动态维护索引,降低了数据的维护速度
创建的原则:
- 在最频繁使用的、用以缩小查询范围的字段上建立
- 在频繁使用的、需要排序的字段上建立
不适合创建索引的情况:
- 对于查询中很少涉及的列或重复值较多的列
- 对于一些特殊数据类型,如文本(text)etc…
创建及删除
1 | -- create |
分类
-
数据结构
- 树索引(O(log(n)))
- Hash索引
-
物理存储
- 聚集索引
- 非聚集索引
-
逻辑
- 普通索引
- 唯一索引
- 主键索引
- 联合索引
- 全文索引
聚簇索引
是对磁盘上实际数据、重新组织、以按指定的一个或多个列的、值排序的算法。
特点:
- 存储数据的顺序与索引的顺序一致
- 主键会默认创建聚簇索引
- 一张表只允许一个
聚簇索引 VS 非聚簇索引
- 聚簇索引的叶子节点就是数据节点
- 非聚簇索引的叶子结点仍是索引节点,只不过有指向对应数据块的指针
数据库存储过程
数据库隔离级别
- READ_UNCOMMITTED
- READ_COMMITTED
- REPEATABLE_READ
- SERIALIZABLE
MySQL默认:
考什么保证实现
B+数
定义
- B+树是基于B树和叶子结点顺序访问指针进行实现,拥有B树的平衡性,并通过顺序访问指针来提高区间查询的性能
- 一个节点的key值从左到右非递减排列,if key has key i and key i+1 and not null,then key i <= key <= key i+1
- 查找操作,在根结点进行二分查找,找到一个key所在指针,递归查找,直到查找到叶子结点,在叶子结点进行二分查找
- 插入、删除会破坏树的平衡性,所以在插入删除后需要做一个分裂、合并、旋转等来维护树的平衡性
优点
- B+只有叶子节点才存储数据,B每个节点都存储,考虑到IO性能
查寻性能的优化
- 减少请求的数据量
- 只返回必要的列,少用select *
- 返回必要的行,使用limit
- 缓存重复查询的数据:使用缓存可以避免在数据库中进行查询,特别是要在查寻的数据经常被重复查询时
- 减少服务端扫描的行数
- 使用索引来覆盖查询
----------到结尾啦!! Hoohoo----------