数据库 - 事物管理

2021-06-18  本文已影响0人  GuoDJ

事物管理

事务

事物的特性

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

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

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

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

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

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

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

开启事务

关键字: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);

方式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))
);

全文索引

方式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(字段名)
)
上一篇下一篇

猜你喜欢

热点阅读