MySQL 事务1
本人应用的MySQL的版本为:5.6.22
MySQL5.5以后默认使用InnoDB存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表. 可以通过engine关键字在创建或修改数据库时指定所使用到引擎。主要存储引擎:MyISAM、InnoDB、MEMORY和MERGE介绍,通过实例主要讲解下MyISAM与InnoDB在事务上应用区别
(一)MyISAM
它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。
每个MyISAM在磁盘上存储成2个文件,其中文件名和表名都相同,但是扩展名分别为:
(二)InnoDB
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
实例一:(1) 创建测试应用的表结构如下,储存引擎选择MySAM
Create Table: CREATE TABLE `t1` (
`id` int(6) DEFAULT NULL,
`id2` int(6) DEFAULT NULL,
`name` varchar(18) NOT NULL DEFAULT 'zhaolf'
) ENGINE=MyISAM DEFAULT CHARSET=utf8
(2) 插入测试应用数据 mysql> select * from t1;
+------+------+------+
| id | id2 | name |
+------+------+------+
| 2 | 1 | dbdh |
| 8 | 8 | 8 |
| 7 | 7 | 7 |
+------+------+------+
3 rows in set (0.00 sec)
(3) 操作
mysql> savepoint t1;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t1 values(3,3,3);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t1;
+------+------+------+
| id | id2 | name |
+------+------+------+
| 2 | 1 | dbdh |
| 8 | 8 | 8 |
| 7 | 7 | 7 |
| 3 | 3 | 3 |
+------+------+------+
4 rows in set (0.00 sec)
mysql> rollback to t1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> select * from t1;
+------+------+------+
| id | id2 | name |
+------+------+------+
| 2 | 1 | dbdh |
| 8 | 8 | 8 |
| 7 | 7 | 7 |
| 3 | 3 | 3 |
+------+------+------+
4 rows in set (0.00 sec)
// 根据以上得知MySAM没有对事务做支持
实例二: 表为t1,存储引擎修改为InnoDB
(1) 第一步:修改为不自动提交模式
mysql> alter table t1 engine=innodb;
Query OK, 4 rows affected (0.62 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> show create table t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int(6) DEFAULT NULL,
`id2` int(6) DEFAULT NULL,
`name` varchar(18) NOT NULL DEFAULT 'zhaolf'
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql>
(2) 事务操作
mysql> savepoint t1;
Query OK, 0 rows affected (0.00 sec)
mysql> delete from t1 where id =3;
Query OK, 1 row affected (0.00 sec)
mysql> rollback to t1;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from t1;
+------+------+------+
| id | id2 | name |
+------+------+------+
| 2 | 1 | dbdh |
| 8 | 8 | 8 |
| 7 | 7 | 7 |
+------+------+------+
4 rows in set (0.00 sec)
mysql>
通过实例说明两种存储引擎的区别.