事务
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。常用来管理 insert,update,delete 语句。
注:在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。
常用事务控制语句:
1.BEGIN(或START TRANSACTION):显式地开启一个事务;
2.COMMIT(或COMMIT WORK):COMMIT会提交事务,并使已对数据库进行的所有修改成为永久性的;
3.ROLLBACK(或ROLLBACK WORK):回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。
常用事务处理方法:
1、用 BEGIN, ROLLBACK, COMMIT来实现
BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认
2、用 SET 来改变 MySQL 的自动提交模式
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交
事务测试:
1.建测试表
drop table if EXISTS basic_area;
CREATE TABLE basic_area (
id int(11) NOT NULL,
name varchar(10) DEFAULT NULL,
parentid int(11) NOT NULL,
parentname varchar(20) DEFAULT NULL,
lvl int(11) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.准备测试数据
INSERT INTO basic_area (`id`, `name`, `parentid`, `parentname`, `lvl`) VALUES (1, '广东省', 0, '广东省', 1);
INSERT INTO basic_area (`id`, `name`, `parentid`, `parentname`, `lvl`) VALUES (2, '深圳市', 1, '广东省', 2);
INSERT INTO basic_area (`id`, `name`, `parentid`, `parentname`, `lvl`) VALUES (3, '广州市', 1, '广东省', 2);
INSERT INTO basic_area (`id`, `name`, `parentid`, `parentname`, `lvl`) VALUES (4, '佛山市', 1, '广东省', 2);
INSERT INTO basic_area (`id`, `name`, `parentid`, `parentname`, `lvl`) VALUES (5, '南山区', 2, '深圳市', 3);
INSERT INTO basic_area (`id`, `name`, `parentid`, `parentname`, `lvl`) VALUES (6, '