美文网首页
数据库 - 事物管理

数据库 - 事物管理

作者: GuoDJ | 来源:发表于2021-06-18 08:44 被阅读0次

    事物管理

    事务

    • 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行
    • 事务用来管理 insert,update,delete 语句

    事物的特性

    事务是必须满足4个条件(ACID) :

    • 原子性(Atomicity,或称不可分割性)

    一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。
    事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

    • 一致性(Consistency)

    在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合

    所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

    • 隔离性(Isolation,又称独立性)

    数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发

    执行时由于交叉执行而导致数据的不一致。

    • 持久性(Durability)

    事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失

    开启事务

    关键字:start transaction 或者 begin

    提交事务

    关键字:commit

    回滚事务

    关键字:rollback

    案例分析

    //提前准备工作
    create table user(
      id int(10),
      name varchar(35),
      money double(9,2)
    );
    insert into user values(1,"A",2000);
    insert into user values(2,"B",2000);
    select * from user;
    +------+------+---------+
    | id   | name | money   |
    +------+------+---------+
    |    1 | A    | 2000.00 |
    |    2 | B    | 2000.00 |
    +------+------+---------+
    
    //A转账给B 500块
    1.开启事务
    start transaction
    
    2.1 对数据进行修改
    update user set money=money-500 where name="A"; 
    update user set money=money+500 where name="B";
    
    2.2 如果中途发现操作有误,可以回滚事物 rollback
    rollback;
    
    3.如果没有问题,可以直接提交事务
    commit;
    
    • 一个事务开启到事务的回滚或提交结束,如果还需要进行修改数据的话,就必须重新开启一个新的事务
    • 如果没有开启事务的话,那么所有的修改操作将会被自动提交

    索引

    • 索引的建立对于数据库的高效运行是很重要的。索引可以大大提高数据库的检索速度。
    • 索引分单列索引,组合索引:
      • 单列索引,即一个索引只包含一个字段,一个表可以有多个单列索引。
        • 普通索引,唯一索引,主键索引,全文索引
      • 组合索引,即一个索引包含多个字段

    索引:index

    索引名:index _ 表名 _ 索引字段

    索引字段:以哪个字段为准添加索引

    普通索引

    方式1:(建表之后,直接创建索引)

    create index 索引名 on 表名(字段名 (length));
    

    举例:

    create index index_emp_empno on emp(empno);
    
    • length:如果是blob和text类型的话, 需要指定长度

    方式2:(修改表的结构)

    alter table 表名 add index 索引名(字段名);
    

    举例:

    alter table emp add index index_emp_ename(ename);
    

    方式3:建表的时候一起创建

    create table 表名(
        字段1 类型(长度),
        ...
        index 索引名(字段1(长度))
    )
    

    举例:

    create table test(
        name varchar(20),
        index index_test_name(name(20))
    );
    

    唯一索引

    索引列(索引字段)的值必须的唯一的,但允许有空值。如果是组合索引,则字段值的组合必须唯一。

    方式1:(建表之后,直接创建索引)

    create unique index 索引名 on 表名(字段名);
    举例:
    create unique index index_emp_empno on emp(empno)
    

    方式2:(修改表的结构)

    alter table 表名 add unique index 索引名(字段名);
    举例:
    alter table emp add unique index index_emp_empno(empno);
    

    方式3:建表的时候一起创建

    create table 表名(
        字段1 类型(长度),
        ...
        unique index 索引名(字段1(长度))
    )
    举例:
    create table test(
        name varchar(20),
        unique index index_test_name(name(20))
    );
    
    

    组合索引

    方式1:(建表之后,直接创建索引)

    create  index 索引名 on 表名(字段1,字段2,..);
    举例:
    create  index index_emp_empno_ename on emp(empno,ename)
    

    方式2:(修改表的结构)

    alter table 表名 add  index 索引名(字段1,字段2....);
    举例:
    alter table emp add  index index_emp_empno_ename(empno,ename);
    

    方式3:建表的时候一起创建

    create table 表名(
        字段1 类型(长度),
        ...
        index 索引名(字段1,字段2..)
    )
    举例:
    create table test(
        name varchar(20),
        index index_test_id_name(id,name(20))
    );
    

    全文索引

    • 主要用来查询文中的关键字,而不是直接与索引中的值相比较的。

    • fulltext索引跟其他索引大不相同,它更像一个搜索引擎,而不是简单的where语句的参数匹配。

    • fulltext索引配合 match against 操作使用,而不是一般的where

    • 它可以在create table,alter table, create index使用,不过目前只有char,varchar,text类型的列上可以创建全文索引

    方式1:(建表之后,直接创建索引)

    create fulltext index 索引名 on 表名(字段1);
    举例:
    create fulltext index index_emp_empno on emp(empno)
    

    方式2:(修改表的结构)

    alter table 表名 add fulltext index 索引名(字段1);
    举例:
    alter table emp add fulltext index index_emp_empno(empno);
    

    方式3:建表的时候一起创建

    create table 表名(
        字段1 类型(长度),
        ...
        fulltext(字段1)
    )
    举例:
    create table test(
        name varchar(20),
        fulltext(name)
    );
    

    主键索引

    • 它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引

    方式1:创建表格后添加主键索引

    ALTER TABLE 表名 ADD PRIMARY KEY(字段名)
    
    举例:
    ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
    

    方式2:创建表格时添加主键索引

    create table 表名(
        字段1 类型(长度),
        ...
        PRIMARY KEY(字段名)
    )
    

    相关文章

      网友评论

          本文标题:数据库 - 事物管理

          本文链接:https://www.haomeiwen.com/subject/cvqkyltx.html