事务
1.概念
事务是将一系列数据操作绑成一个整体进行统一管理。
如果一事务执行成功,则在该事务中进行的所有数据更改均会提交,称为数据库中的永久成部分。
如果事务执行是遇到错误且必须取消或回滚,则数据将全部恢复到操作前的状态,所有数据的更改均被清除。
什么是事务?
事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所欲的命令作为一个整体起向系统提交侧小操作请求,即这一组数据库命令要么都执行,要么都不执行。
为什么使用事务  ?
在我们转账时,当你给另一个人转出1000元,此时突然出了故障你的钱转出去了,但是另一个人没有收到 你的钱就不翼而飞了 此时就需要用事务了
2.事务的属性(ACID)
●原子性:事务是一个完整的操作,事务的各步操作(各元素)是不可分的(原子的),要么都执行,要么都不执行
●一致性:当事务完成时,数据必须处于一致状态。
●隔离性:对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,他不应以任何方式依赖于或影响其他事务。
● 持久性:事务的持久性指不管系统是否发生了故障,事务处理的结果都是永久的。
3.执行事务的语法
   1)、开始事务。
           BEGIN; 或  START  TRANSACTION;
  2)、提交事务。
           COMMIT;
           这个语句标志一个事务成功提交。自事务开始至提交语句执行的所有数据更新将永久地保存在数据库文件中,并释放链接时占用的资源。
  3)、回滚(撤销)事务。
           ROLLBACK;
           清除自事务起始点至该语句所做的所有数据更新操作,将数据状态回滚到事务开始之前。
设置值自动提交关闭或开始:
MySQL中默认开启自动提交模式,即为指定开启事务时,
每条SQL语句都是单独的事务执行完毕自动提交,可以关闭自动提交模式,手动提交或回滚事务。
语法:
SET  autocommit = 0 | 1;
值为0:关闭自动提交。
值为1:开启自动提交。
 当执行SET autocommit = 0后,即关闭自动提交,
从下一条SQL语句开始则开启新事务,需使用COMMIT或ROLLBACK语句结束该事务。
编写事务的原则:
事务尽可能简短;
事务中访问的数据量尽量最少;
查询数据时尽量不要使用事务;
在事务处理过程中尽量不要出现等待用户输入的操作;
视图
视图是保存在数据库中的SELECT查询。因此,对查询执行的大多数操作饿可在视图上进行。
使用视图的原因有两点:一个是处于安全考虑,用户不必看到整个数据库的结构,而隐藏部分数据;另一个是符合用户日常业务逻辑,使他们更容易理解数据。
1.定义:
       视图是另一种查看数据库中一个或多个表中数据的方法。
视图是一种虚拟表,通常是作为来自一个或多个表的行或列的子集创建的。当然,它也可以包含全部的行和列。
但是,视图并不是数据库中存储的数值的集合,它的行和列来自查询中引用的表。在执行是,他直接显示来自于表中的数据
2.使用SQL语句创建视图
    CREATE  VIEW_ 视图名
     AS 
     <SELECT>语句;
     注意:在SQL语句命名规范中,视图一般以view_xxx或v_xxx的样式来命名。
3.使用SQL语句删除视图
    DROP  VIEW  [ IF EXINTS ]  视图名;
4.使用SQL语句查看视图数据
    SELECT  *  FROM  视图名;
5.查看所有视图
USE information_schema;
SELECT * FROM views\G;
6.为什么需要视图?               
为了各个阶段的人员更好的查看数据  能提高表的安全性;                           
7.什么是视图?                  
视图是另一种查看数据库中一个或多个表中数据的方法。                    
8.视图通常用来进行一下三种操作                        
(1)筛选表中的行。
(2)防止为经许可的用户访问敏感数据。
(3)将多个物理数据表抽象为一个逻辑数据表。
(4)降低数据库的复杂程度
9.对最终用户的好处:
(1)结果更容易理解。创建视图是,可以将列名改为有意义的名称,使用户更容易理解列所有表的内容。在视图中修改名不会影响基表的列名。
(2)获得数据更容易。很多人对SQL不太了解,因此对他们来说,创建对多个表的复杂查询很困难,可以通过创建视图来方便用户访问多个表中的数据。
10.对开发人员的好处:
(1)限制数据检索更容易。开发人员于是需要隐藏某些行或列中的信息。通过使用视图,用户可以灵活地访问他们的数据,同时保证同一个表或其他表中的其他数据的安全性。要实现这一个目标,可以在创建视图时将对用户保密的列排出在外。
(2)维护应用程序更方便。调试视图表调试查询更容易,跟踪视图中各个步骤的错误更为容易,这是因为所有的步骤都是视图的组成部分
11.使用视图的注意事项
(1)每个视图中可以使用多个表。
(2)与查询相似,一个视图可以嵌套另一个视图,但最好不要超过三层。
(3)对视图数据进行添加、更新和删除操作直接引用表中的数据。
(4)当视图数据来自多个表时,不允许添加和删除数据
索引
索引提供指针有存储在表中指定列的数据值,在根据指定的排序列这些指针。
数据库使用索引的方式与使用书的目录很相似;通过搜索索引找到特定的值,在跟随指针到包含该值的行
1.概念
   索引:一种有效组合数据的方式,为快速查找到指定记录
   作用:
  大大提高数据库的检索速度
  改善数据库性能
  MySQL索引按存储类型分类
  B-树索引:InnoDB、MyISAM均支持
  哈希索引
2.索引分类
1. 普通索引:普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值。
2.唯一索引:唯一索引不允许两行具有相同的索引值。如果现有数据中存在重复的键值,则一般情况下多数数据库不允许创建唯一索引。
允许有空值
3.主键索引:在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。
           主键列中的每个值是非空、唯一的
4.复合索引:在创建索引是,并不是只能对其他一列创建索引,与创建主键一样,可以多个列组合作为索引,这种索引称为符合索引。
5.全文索引:全文索引的作用是在定义索引的列上支持值的全文查找,允许这些索引列中插入重复的空值和重复值。
6.空间索引:空间索引是对空间数据类型的列建立的索引,如GEOMETRY、POINT等。
3.创建索引
创建索引:使用CREATE INDEX语句可以在以经存在的表上添加索引:
语法
CREATE  [UNIQUE | FULLTEXT | SPATIAL] INDEX  index_name
ON  table_name  (column_name[length]……)
其中:
(1)UNIQUE | FULLTEXT | SPATIAL:分别表示唯一索引、全文索引的空间索引,为可选参数。
(2)index_name:指定索引名。
(3)column_name:指定需要创建索引的列。
(4)length:指定索引长度,可选参数,只有字符创类型才能指定索引长度。
(5) table_name:指定创建索引的表名。
4.删除索引
    DROP  INDEX  索引名  ON  表名;
 注:删除表时,该表的所有索引将同时被删除。
删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成索引的所有列都被删除,则整个索引将被删除。
5.使用索引时注意事项:
  1. 查询时减少使用*返回全部列,不要返回不需要的列
  2. 索引应该尽量小,在字节数小的列上建立索引
  3. WHERE子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前
  4. 避免在ORDER BY子句中使用表达式
  5. 根据业务数据发生的频率,定期重新生成或重新组织索引,进行碎片整理;
6.查看索引:
语法:
SHOW INDEX FROM table_name;
备份和恢复
1.使用mysqldump命令备份数据库
   mysqldump:MySQL一个常用的备份命令,执行此命令会将包含数据的表结构和数据内容转换成相应的CREATE语句和INSERT  INTO语句,保存在文本文件中。
 2. mysqldump命令格式
语法
mysqldump  -u  username  -h  host  -ppassword
           dbname[ tbname1 [,tbname2……] ] > filename.sql
其中:
(1)username表示用户名。
(2)host表示登录用户的主机名称,如本机为主机可省略。
(3)password表示登录密码。
(4)dbname为需要备份的数据库。
(5)tbname为需要备份的数据表,可指定多张表。为可选项,如备份整个数据库则此项省略。
(6)filename.sql表示备份的文件名。
   注意:mysqldump是DOS系统下的命令,在使用时无须进入mysql命令行,否则将无法执行
3.使用mysql命令恢复数据库
    对于备份数据库后生成的包含有建库、建表、插入数据等SQL语句的文本文件,可以通过mysql命令还远到心的数据库中,实现数据库的恢复。
语法
mysql –u username –p [dbname] < filename.sql
         其中:
(1)username表示用户名。
(2)dbname表示数据库名字。
(3)filename.sql为数据库备份后的文件。
注:1. mysql为DOS命令
  2.在执行该语句之前,必须在MySQL服务器中创建新数据库,如果不存在恢复数据库过程将会出错
4.表数据导出文本文件
    通过对表数据的导出和导入,可以实现MySQL数据服务器与其他数据库服务器间移动数据。
导出操作,是指将数据从MySQL数据表复制到文本文件,数据导出的方式有很多种。
使用SELECT …… INTO OUTFILE语句导出数据。
语法:
 SELECT  columnlist  FROM  tablename
 [WHERE  contion]
 INTO  OUTFILE  ‘filename’  [OPTION];
从上述语法中可以看出,该导出语句分成以下两部分:
(1)普通的数据查询语句,主要用来实现查询所要导出到文本文件中的数据。
(2)通过参数filename指定导出数据的目标文件
5.文本文档导入表数据
导入操作,是指将数据从文本文件加载到MySQL数据库表里。
同样,导入数据库的方式也有多种。
使用LOAD DATA INFILE语句实现数据的导入,
语法:
LOAD  DATA  INFILE  filename  INTO  TABLE  tablename  [OPTION];
其中:
(1)filename用来指定文本文件的路径和特征。
(2)tablename用来指定导入表的名称。
              注:导入数据前应确保目标表已存在!
拓展
B树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于
走右结点;
B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键
字范围的子结点;
 所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中;
B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点
中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;
B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率
从1/2提高到2/3;

 posted on 2020-06-17 09:48  中国姑娘F  阅读(82)  评论(0编辑  收藏  举报