Heim > Datenbank > MySQL-Tutorial > mysql中的事务_MySQL

mysql中的事务_MySQL

WBOY
Freigeben: 2016-06-01 11:52:27
Original
1546 Leute haben es durchsucht

一:什么是事务
银行转账!张三转10000块到李四的账户,这其实需要两条SQL语句:
给张三的账户减去10000元;
给李四的账户加上10000元。
如果在第一条SQL语句执行成功后,在执行第二条SQL语句之前,程序被中断了(可能是抛出了某个异常,也可能
是其他什么原因),那么李四的账户没有加上10000元,而张三却减去了10000元。这肯定是不行的!
你现在可能已经知道什么是事务了吧!事务中的多个操作,要么完全成功,要么完全失败!不可能存在成功一半
的情况!也就是说给张三的账户减去10000元如果成功了,那么给李四的账户加上10000元的操作也必须是成功的
;否则给张三减去10000元,以及给李四加上10000元都是失败的!


二:事物的四大特性(ACID)
面试!
事务的四大特性是:
原子性(Atomicity):事务中所有操作是不可再分割的原子单位。事务中所有操作要么全部执行成功

,要么全部执行失败。

一致性 (Consistency):事务执行后,数据库状态与其它业务规则保持一致。如转账业务,无论事务

执行成功与否,参与转账的两个账号余额之和应该是不变的。

隔离性(Isolation):隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务

不会相互干扰。

持久性(Durability):一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使
提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。


三:MySQL中的事务
在默认情况下,MySQL每执行一条SQL语句,都是一个单独的事务。如果需要在一个事务中包含多条SQL语句,那
么需要开启事务和结束事务。
开启事务:start transaction;
结束事务:commit或rollback。
在执行SQL语句之前,先执行strat transaction,这就开启了一个事务(事务的起点),然后可以去执行多条
SQL语句,最后要结束事务,commit表示提交,即事务中的多条SQL语句所做出的影响会持久化到数据库中。或者
rollback,表示回滚,即回滚到事务的起点,之前做的所有操作都被撤消了!


首先创建一张表:
CREATE TABLE account(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30),
balance NUMERIC(10.2)
);


INSERT INTO account(NAME,balance) VALUES('zs', 100000);
INSERT INTO account(NAME,balance) VALUES('ls', 100000);
INSERT INTO account(NAME,balance) VALUES('ww', 100000);


SELECT * FROM account;


使用rollback回到事物起点,所以语句无效
START TRANSACTION;
UPDATE account SET balance=balance-1000 WHERE id=1;
UPDATE account SET balance=balance+1000 WHERE id=2;
ROLLBACK;


commit表示提交事物,sql语句执行后保存到数据库中
START TRANSACTION;
UPDATE account SET balance=balance-1000 WHERE id=1;
UPDATE account SET balance=balance+1000 WHERE id=2;
COMMIT;


quit退出之后,mysql会自动回滚事物
START TRANSACTION;
UPDATE account SET balance=balance-10000 WHERE id=1;
UPDATE account SET balance=balance+10000 WHERE id=2;
quit ;

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage