事务
为什么需要事务:
转账、总量不变,但其他值进行变化。
事务是什么:
作为单个逻辑工作单元执行的一系列操作。
多个操作作为一个整体向系统提交,要么执行/不执行。
事务是一个不可分割的工作逻辑单元。
事务的特性:简称ACID属性(事务安全型强)
原子性(Atomicity):事务是一个完整的操作,各步操作是不可分的,要么执行/不执行。
一致性(Consistency):当事务完成时,总量不变。
隔离性(lsolation):并发事务之间彼此隔离、独立,它不应以任何方式依赖于或影响其他事务。
持久性(Durability):事务完成后,它对数据库的修改被永久保持。
创建事务
#开始事务
begin;/start transaction;
#提交事务
commit;
#回滚/撤销事务
rollback;
关闭和开启事务:
set autocommit=0|1 #值为0:关闭事务 #值为1:开启事务
视图
视图做用
1.不同权限人员关注不同的数据。
2.保证数据的安全性。
3.降低数据库的复杂程度。
4.将多个物理数据库抽象为一个逻辑数据库。
视图是什么
1.视图是一张虚拟表,建立在原表上,使用部分数据或多表的综合数据。
2.视图中不存放数据,数据在原始表中。
3.一个原始表,根据不同权限人员的不同需求,可以创建不同的视图。
创建视图
CTRATE VIEW view_name(规范书写在view后写视图名) AS select 语句; #使用SQL语句删除视图 DROPVIEW IF EXISTS view_name; #IF EXISTS删除前判断视图是否存在 #使用SQL语句查看视图 select 字段1,字段2,...from view_name;
#查看所有视图
USE information_schema;
SELECT * FROM viewsG;
视图注意
1.视图中可以使用多个表
2.一个视图可以嵌套另一个视图(千层套路)。
3.对视图进行添加、更新和删除操作时直接影响原表。
4.多表时视图不允许添加和删除数据!仅作为查询。(使用视图修改数据会有许多限制,容易出错)
索引
索引是什么
索引是一种有效组合数据的方式,为快速查找到指定记录
作用
1.大大提高数据库的检索速度
2.优化了数据库的检索速度
MySQL索引按存储类型分类
1.B-数索引:InnoDB、MyiSAM均支持
2.哈希索引
B-数索引:
使用可以显著减少定位记录时所经历的中间过程,从而加快存取速度。这个数据结构一般用于数据库的索引,综合效率较高。
阶的定义
1、根结点至少有两个子女。
2.每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 <= j <= m - 1。
3.除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足:┌m/2┐ <= k <= m 。
4.所有的叶子结点都位于同一层。
在B-树中,每个结点中关键字从小到大排列,并且当该结点的孩子是非叶子结点时,该k-1个关键字正好是k个孩子包含的关键字的值域的分划。
因为叶子结点不包含关键字,所以可以把叶子结点看成在树里实际上并不存在外部结点,指向这些外部结点的指针为空,叶子结点的数目正好等于树中所包含的关键字总个数加1。
B-树中的一个包含n个关键字,n+1个指针的结点的一般形式为: (n,P0,K1,P1,K2,P2,…,Kn,Pn),其中,Ki为关键字,K1<K2<…<Kn, Pi 是指向包括Ki到Ki+1之间的关键字的子树的指针。
索引类型
普通索引:允许在定义索引的列中插入重复值和空值
唯一索引:索引列数据不重复,允许有空值(只有一个)
主键索引:主外键那个意思
复合索引:将多个列组合作为索引
全文索引:支持值的全文查找,允许重复值和空值
空间索引:对空间数据类型的列建立的索引
创建/删除索引
#创建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
ON table_name (column_name[length]…);
#UNIQUE|FULLTEXT|SPATIAL
#分别对应唯一索引、全文索引或空间索引
#删除索引
DROP INDEX index_name ON table_name;
索引注意事项
1.不要使用仅包含几个不同值的列
2.表中仅包含几行
3.查询时减少使用*返回全部列,不要返回不需要的列
4.WHERE子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前
5.避免在ORDER BY子句中使用表达式
备份和恢复
备份数据库
mysqldump 参数 -u -h -p
需备份的数据库名 需备份的表名 备份后的文件名称
常用参数选项
恢复数据库
mysql –u –p 数据库名 < 备份文件名
source 数据库名
导出/导入数据
SELECT * FROM tablename
[WHERE contion]
INTO OUTFILE 'filename' [OPTION]
#导出的目标文件
#文件导入到数据表
LOAD DATA INFILE filename INTO TABLE tablename [OPTION]
#导入数据前应确保目标表已存在!