• java数据库编程之事务、视图、索引、备份、恢复


    第五章:事务、视图、索引、备份和恢复

    5.1:事务

    事务的概念:事务(transcation)是讲一系列数据操作捆绑成为一个整体进行统计管理。

    如果某一事务执行成功了,则该事务进行操作的所有数据将会提交,如果数据在执行的时候遇到错误且必须取消或回滚,则数据将会全部恢复到操作之前的状态,所有的数据更改将被清除。

    5.1.1:为什么需要事务

    如果不用事务进行捆绑一些操作的话,在执行过程中有可能一条执行成功,中途发生错误,一些失败了,这样的话执行完之后的数据就有问题,所有我们要引入事务!!

    我们有时候要把几个操作捆绑在一起,要么一起成功,如果有一个失败,则此事务就失败了,必须全部成功,才会成功!!,

    5.1.2:什么是事务

    事务是一种机制,一个操作的序列,包含看一组数据库操作的命令,并且把所有的命令坐位一个整体一起想系统提交或撤销操作请求。即这一组数据库命令要么都执行,要么都不执行。因此事务是一个不可分割的工作逻辑单元。

    事务是作为单个工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,即原子性(Atomicity)、一致性(Consitency)、隔离线(lsolation)、及持久性(Durability)  这些特征通常简称为ACID;

      原子性

    事务是一个完整的操作,事务各元素是不可分的(原子的)、事务中所有的元素必须作为一个整体提交或回滚,如果任何一部分失败,则整个事务都失败了

      一致性

    当事务完成时,必须处于一致的状态,在正在进行的事务中,数据库可能处于不一致的状态,如果数据可能部分修改了,然而当事务成功完成时,数据必须再次回到已知的已知状态,通过事务对数据所做的修改不能损坏数据,或者说事务不能是数据存储处于不稳定状态。。。

      隔离性

    对数据库进行修改所有的并发事务是彼此隔离的。这表明事务必须是独立的。。不会依赖或影响其他事务。。

      持久性

    事务执行完之后对数据库的数据进行修改,都是永久的保存起来了。。

    5.1.3:如何执行事务

    1:开始事务

    语法:begin或者start  transcation

    2:提交事务

    语法:commit

    3:回滚/撤销 事务

    语法:rollback;

    例子:

    USE mybank;

    /*设置结果集一gbk的编码格式显示*/

    SET NAMES utf8;

    /*开始事务(指定事务此处开始,后面的sql语句就是一个整体*/

    BEGIN; /* start transaction;*/

    UPDATE bank SET currentMoney =currentMoney-500 WHERE customerName='张三';

    UPDATE bank SET currentMoney =currentMoney+500 WHERE customerName='李四';

    /*提交事务,写入硬盘,保存起来*/

    COMMIT;

    2:设置自动提交关闭或开启

    因为每条sql语句都有自动提交的功能,所以我们通过命令来控制

    Set  autocommit=0;    //关闭自动提交

    Set  autocommit=1;    //打开自动提价

    5.2:视图

    5.2.1:为什么需要视图

    在实际工作中,不同身份的用户可能关注的数据不同,处于安全原因,用户不必要知道整个数据库的结构,隐藏了一些数据,我们可以把重复使用的复杂结果保存在视图里面。方便多次使用查询。。。

    5.2.2:什么是视图

    视图是一种查看数据库中一个或者多个表的数据的方法,视图是一张虚拟表,通常作为来自一个或者多个表的行或列的子集创建的,当然他也可以包含全部的列,他的数据来自子查询的引用表,视图充当着一个查询中指定的筛选器,定义视图可以查询一个或者多个表,也可以嵌套视图,就是一个视图里面放另一个视图,也可以基于当前数据库或其他数据库。

    视图通常用来以下操作

      筛选表中的行

      防止未经许可用户访问敏感数据

      将多个物理数据表抽象为一个逻辑数据表

    对最终用户的好处

    结果容易理解

    获得数据更容易

    对开发者好处

    限制数据检索更加容易

    维护更加方便

    5.2.3:如何创建或者使用视图

      使用SQL语句创建视图

    语法:

    Create  view  视图名

    As

    <select 语句>;             //查询语句

      使用sql语句删除视图

    Drop  view   if exists  视图名;

      使用sql语句查看视图

    Select  *   from   view_Name(视图名称);

    视图注意事项

      每个视图可以使用多个表

      与查询相似,一个视图可以嵌套另一个视图,但最好不要超过三层

      对视图进行条件数据或者更新数据直接引用的表中的数据

      当视图的数据来自多个表时,不允许添加和删除数据

    5.3:索引

    5.3.1:什么是索引

    数据库中的索引和字典中的目录类似,可以利用目录查找到所需要的信息。无需阅读整本书,

    索引的作用是通过使用索引,大大提高了数据库的检索速度,改善性能。

    5.3.2:索引分类

      普通索引

    是mysql的基本索引,允许在定义中插入重复的值或者空值,唯一任务就是加快对数据库的访问。

      唯一索引   unique 关键词

    不允许两行具有相同的索引值。和唯一约束   unique   key  一样的效果

      主键索引

    在数据库中定义主键将自动创建主键索引,主键索引要求主键中每一个值是非空的、唯一的。可以加快访问速度·

      复合索引

    在创建索引的时候,并不是对其中一个创建,而是多个列绑定起来一起创建的索引,及多个组合起来不会重复,

      全文索引

    全文索引的作用是在定义索引的列上支持值的全文查找,允许这些列插入重复和空值,主要用于大量的文本搜索,

      空间索引

    对数据类型的列建立的索引,必须是不能为空的

    5.3.3:创建索引

    语法:

    Create  [unique] [fullText] [spaital] index  index_name   on   table_name(column [length]….);

    例子:create unique  index   index_student_studentName   on  student(studentName);

    5.3.4:删除索引

    Drop   index  index_name  on table_name;

    注意:

    删除表时,该表的所有的索引将同时被删除,

    删除表的列是,如果要删除的列为索引的组成部分,则该列也会从索引的删除,如果组成的所有列被删除,则整个索引就被删除,,

    使用索引加快速度,但没必要每个列都创建索引,因此索引要维护的,并且战友一定的资源,可以按照下列标准创建索引

      频繁搜索的列

      经常用作查询的列

      经常排序的列,分组的列

      经常用作连接的列(主外键)

    不要使用这些创建列

      仅包含几个不同的值

      表中仅包含几行

    5.3.5:查询索引

    Show   index  form table_name(表名);

    例子:show   index  from  studentG;     //(G代表会格式输出)

    5.4:数据库的备份和恢复

    5.4.1:使用mysqlDump命令备份数据库

    语法:mysqldump  -u 账户名 -h  host   -p passWord   dbName[table1,table2]>filename.sql

    例子:mysqldump   -u root –p  myschool student>d:ackmyschool09.sql;

    EnterPassword:输入密码

    Mysqldump提供了很多参数:可以用命令参考mysqldump  help;

    5.4.2:使用mysql命令恢复数据库

      语法:mysql  -u  username  -p  DBName<file.sql;        //也支持Linux系统下

    例子:mysql  -u root –p schoolDB<d:ackschoo;l09.sql;

      语法:source  fileName;

    步骤:

    Create database  myschoolDB;

    Use  myschoolDB;

    /*恢复数据库*/

    Source  d:ackupmyschool09.sql;

    5.4.4:表数据的导出到文本文件

    语法:

    Select  coloumnlist   from   Tablename;

    [where contion]

       Into  outfile  ‘fileName’[option];

    例子:select   *  from  result where subjectNo=(select subjectNo from subject where subjectName=’logic java’)   into  outfile ’ d:/backup/reuslt_java.txt’;

    5.4.5:文本文件导入到数据库

    语法:

    Load  data   infile  into  table  tablename [option];

    例子:use  myschoolDB;

    /*创建result表*/

    Create table result(

    studentNo int(4) not null  comment ‘学号’,

    studentName  varchar(50) comment  ‘学生姓名’

    ) charset =utf8;

    /*加载书籍*/

    Load  data  infile  ‘d:/back/reslt_java.txt’  into  table  result;

  • 相关阅读:
    Ibatis中SqlMapClientTemplate和SqlMapClient的区别
    Spring整合Ibatis之SqlMapClientDaoSupport
    iBatis查询时报"列名无效"或"找不到栏位名称"无列名的错误原因及解决方法
    五个程序员求职者的最佳提问
    JVM性能调优指南
    Review software requirements specification and create test scenarios (what to test for a certain functionality)
    Security Testing Test Scenarios
    Performance testing test scenarios
    Test Scenarios for Excel Export functionality
    Test Scenarios for sending emails
  • 原文地址:https://www.cnblogs.com/bdqnwangchao/p/7638831.html
Copyright © 2020-2023  润新知