1 什么是事务
1.1 是什么
- 可以把事务看做是sql语句组,事务是有单条或者多天sql语句组成的单元
- 在这个单元中,每条sql语句是都是相互依赖的,所有的sql语句执行成功,这个事务才会执行成功
- 只要有一条执行失败,那就会撤销执行,回滚到最初未执行的状态.
2.事务的特性
- 原子性:事务是一个整体,具有整体性,不可分割
- 一致性: 内部保持抑制,比如你转账了 1000元,你的账户就会减少100元,对方的扎账户就会增加1000元.保持一致.
- 孤立性:每个事务都在自己的空间内执行,与其他嘎生在系统中的事务隔离,保证事务之间不会相互冲突.
- 持久性:系统可以通过事务的更新的日志和最后的备份,恢复丢失的数据.
注意
在默认情况下,在MySQL中创建的数据表类型是MyISAM ,但是该类型不支持书屋,所以要将操作数据表的类型设置为InnoDB或者BDB.
所以创建事务过程要创建一个InnoDB或者BDB
创建表时:
CREATE TABLE test01(
#这里加创建表的条件
)TYPE=INNODB / BDB;
在创建表后:
ALTER TABLE student TYPE =INNODB/ BDB;
使用alter table 操作可能会导致数据库中的数据丢失,所以修改前要对表进行备份.
2 事务的初始化,创建,提交,回滚
CREATE TABLE account(
id INT(16) AUTO_INCREMENT PRIMARY KEY NOT NULL,
`name` VARCHAR(30),
number VARCHAR(30)
)ENGINE= INNODB;
DROP TABLE account;
INSERT INTO account(id,`name`,number)VALUES(1,'zhang3','2200'),(2,'wang5','2000');
SELECT * FROM account;
# set autocommit 设置自动提交功能,0表示关闭,1表示打开.
SET autocommit=0;
#1.开启事务
START TRANSACTION;
#2.开启事务
BEGIN;
UPDATE account SET number=number-1000 WHERE `name`='zhang3';
UPDATE account SET number=number+1000 WHERE `name`='wang5';
#提交事务
COMMIT;
#回滚事务
ROLLBACK;
SELECT * FROM account;