mysql事务 Transactions
1.定义
事务是操作数据的一个单元,是恢复和并发控制的基本单位。
2.事务的特性( ACID )
(1)Atomicity 原子性
一个事务是一个不可分割的工作单位.要么所有的语句都执行成功,要么所有的语句都不执行.
(2)Consistency 一致性
事务必须是使数据库从一个一致性状态变到另一个一致性状态.
(3)Isolation 隔离性
一个事务的执行不能被其他事务干扰,在一个事务中添加修改的数据,不能被令一个事务读取或者修改.
(4)Durability 持久性
指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
3.开启和结束事务
begin
begin work
start transaction
都可以开启事务,在调用以上语句时,mysql会隐式的执行 commit 操作,以结束当前客户端线程的未结束事务.
若之前执行了 lock table 操作,则所锁定的表会解锁。
提交事务用commit,回退事务用rollback
4.保存点( Savepoints )
在事务中用以记录语句执行位置的一个标记,可用来标记回退到哪个位置。
mysql> SELECT id,name FROM trans_test;
+----+------+
| id | name |
+----+------+
| 1 | a |
| 2 | b |
+----+------+
mysql> START TRANSACTION;
mysql> UPDATE trans_test SET name=’z’ WHERE id = 1;
mysql> SAVEPOINT savepoint_one;
mysql> UPDATE trans_test SET name=’y’ WHERE id = 2;
mysql> SELECT id,name FROM trans_test;
+----+------+
| id | name |
+----+------+
| 1 | z |
| 2 | y |
+----+------+
mysql> ROLLBACK TO SAVEPOINT savepoint_one;
mysql> SELECT id,name FROM trans_test;
+----+------+
| id | name |
+----+------+
| 1 | z |
| 2 | b |
+----+------+
mysql> COMMIT;
5.自动提交( AUTOCOMMIT )
mysql默认开启自动提交功能,即每条语句都会封装上 START TRANSACTION 和 COMMIT.
查看当前session是否开启自动提交
mysql> show session variables like 'AUTOCOMMIT';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
SET AUTOCOMMIT=0 关闭自动提交
SET AUTOCOMMIT=1 开启自动提交
6.隔离级 Isolation Levels
这个概念不得不讲,隔离级是影响事务间数据改变时对其他事务数据可见性和准确性的关键要素。
mysql支持4种级别的隔离级:
(1)READ UNCOMMITTED
这种可以让所有事务看到其他事务中未提交的数据改变。可能读取到脏数据。
These are called dirty reads —the data is said to be dirty because the change is not permanent yet.
(2)READ COMMITTED
只有在一个事务中显示提交了的(调用了commit语句)数据,在其他事务中才是可见了.
可以避免脏数据读取,但是可能在事务A执行过程中,其他事务修改数据导致事务A中已读数据失效。
在sql server和oracle中默认用了此级别。
(3)REPEATABLE READ
这是mysql默认的隔离级。
用此隔离级当再次读取已经读过的数据时,读取的数据都是相同的,即使在这个事务执行过程中,令一个事务修改并提交了其中的数据。
这可能导致读取的数据已经不存在。
下面看《mysql_administrators_bible》中的一段话:
Using the REPEATABLE READ isolation level, all reads within a transaction show the same
data values, even if a second transaction has committed a data change while the first
transaction was still running. If a transaction starts, reads a row, waits 60 seconds, and
reads the same row again, both data reads will be the same— even if in those 60 seconds
another transaction has changed and committed data. The first transaction has the same
data when it repeats the read. Any transactions started after the data commit will see the
new data.
REPEATABLE READ may not seem like a good idea —after all, if the data changes,
shouldn’t a transaction be aware of that? The problem is that a transaction may take
different actions based on the values of the data. Data values changing in the middle of
a transaction may lead to unexpected consequences. Consider what would happen if
the schema changed in the middle of a transaction, and the desired fields or tables cease
to exist!
(4)SERIALIZABLE
当读数据时加读取锁(LOCK IN SHARE MODE),其他事务允许读操作,但是在读取锁释放之前不允许更新数据.
7.查看当前连接的隔离级
mysql> show session variables like 'tx_isolation';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)
或者
mysql> select @@session.tx_isolation;
+------------------------+
| @@session.tx_isolation |
+------------------------+
| REPEATABLE-READ |
+------------------------+
1 row in set (0.00 sec)
或者
mysql> SELECT VARIABLE_NAME, VARIABLE_VALUE
-> FROM INFORMATION_SCHEMA.SESSION_VARIABLES
-> WHERE VARIABLE_NAME=’tx_isolation’;
+---------------+------------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+------------------+
| TX_ISOLATION | READ-UNCOMMITTED |
+---------------+------------------+
8.查看服务器的隔离级
mysql> SELECT @@global.tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| REPEATABLE-READ |
+-----------------------+
1 row in set (0.00 sec)
或者
mysql> show global variables like 'tx_%';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.01 sec)
或者
mysql> SELECT VARIABLE_NAME, VARIABLE_VALUE
-> FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
-> WHERE VARIABLE_NAME=’tx_isolation’;
9.设置隔离级
SET @@{global|session}.tx_isolation= {read-uncommitted|
read-committed|repeatable-read|serializable}
或者
SET {GLOBAL | SESSION} TRANSACTION ISOLATION LEVEL {READ
UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
分享到:
相关推荐
sails-mysql-transactions, 带有mySQL事务支持的帆/水线 ORM 带有复制支持的MySQL事务性 ORMsails-mysql-transaction 是用于MySQL的船帆ORM适配器,具有事务和复制群集支持。这个适配器在流行的sails-mysql 适配器...
MySQL中的分布式事务主要是一种数据库事务管理的技术,它允许跨多个物理数据库位置的数据进行一致性、可靠性的操作。分布式事务通常用在需要将数据分布在多个服务器、多个数据库或多个数据存储中的应用中。为保证...
安装将sails-mysql-transactions添加到应用程序的package.json 。 如果您的软件包中尚未安装sails请不要直接运行install。 如果您已经安装了sails-mysql ,则可能会干扰此模块的操作。 从package.json删除它,并使用...
4. **事务(Transactions)**: 通过 `sql::Connection` 的 `begin()`, `commit()`, 和 `rollback()` 方法,可以实现事务的开始、提交和回滚,确保数据的一致性和完整性。 5. **异常处理(Exception Handling)**: ...
5. **事务(Transactions)**:MySQL 5.0支持ACID(原子性、一致性、隔离性和持久性)事务,提供了更高的数据一致性保证,尤其对于InnoDB存储引擎。 6. **分区(Partitioning)**:分区是将大型表分成较小、更易...
2. 事务(Transactions):事务是一系列数据库操作的逻辑单元,具有ACID属性——原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。它们用于确保数据的一致性和完整性。 3....
6. **XA Transactions**:MySQL 5.5支持分布式事务处理的XA协议,增强了多数据库系统的协调一致性。 7. **Unicode支持**:全面支持Unicode UTF-8字符集,可以处理多种语言的数据。 8. **内存管理优化**:对内存...
最后,还会给出 TpmC (Transactions per Minute, C) 的数值,用以衡量每分钟内完成的事务数量,它是评估数据库性能的关键指标之一。 ##### 3. 其他命令选项 除了上述提到的基本参数外,`./tpcc_start` 命令还支持...
从输出中可以看到“TRANSACTIONS”部分,它会列出当前最大的事务ID(Trxid counter),该数值即为当前最新的事务ID。除此之外,还能查看到活跃事务的列表、历史事务列表以及每个事务的状态。比如,活跃事务状态为...
5. **事务管理**:JDBC支持ACID(原子性、一致性、隔离性和持久性)特性,通过`Connection`对象的`setAutoCommit()`和`commit()`/`rollback()`方法控制事务。 6. **批处理**:使用`BatchPreparedStatement`可以一次...
- Transactions:支持事务处理,确保数据一致性。 总之,MySQL Connector/C 6.1.5是连接MySQL数据库的重要工具,它提供了丰富的功能和灵活的API,适用于各种C语言项目。通过理解并熟练运用其提供的功能,开发者...
- **InnoDB Transactions**:监控事务的总数和每秒完成的事务数量。 #### MyISAM 相关指标 - **MyISAM Indexes**:展示MyISAM表索引的状态,包括创建、删除等操作。 - **MyISAM Key Cache**:监控MyISAM键缓存的...
4. **事务(Transactions)**:MySQL的InnoDB引擎支持ACID(原子性、一致性、隔离性和持久性)事务,确保数据的一致性和完整性。 5. **分区(Partitioning)**:MySQL提供分区功能,允许将大表分割成更小、更易管理...
- **默认存储引擎更改为InnoDB**:这使得事务安全性成为MySQL的核心特性之一。 - **性能与可扩展性增强**: - 提高默认线程并发数。 - 控制后台I/O线程数量。 - 调整主线程I/O速率。 - 支持操作系统内存分配程序...
4. **事务处理(Transactions)**:事务是一组数据库操作,要么全部成功,要么全部失败,确保数据的一致性和完整性。ACID(原子性、一致性、隔离性、持久性)是事务处理的核心属性。 5. **并发控制(Concurrency ...
6. **事务(Transactions)**:支持ACID(原子性、一致性、隔离性、持久性)属性,确保数据的一致性。 7. **备份与恢复**:MySQL提供了多种备份工具,如mysqldump,用于定期备份数据库,以防止数据丢失。 8. **...
标题中的“Spring3.1+Hibernate4.1+Atomikos3.9+MySql5.1+Tomcat5/6/7实现JTA事务管理”揭示了一个集成开发环境,用于构建分布式、事务一致性的Java应用程序。这个组合利用了Spring框架的依赖注入和AOP(面向切面...
5. 事务(Transactions):事务是数据库操作的基本单元,保证数据的一致性和完整性。ACID属性包括原子性、一致性、隔离性和持久性,是事务处理的核心原则。 6. 并发控制(Concurrency Control):MySQL采用锁定机制...
4. **事务(Transactions)**:事务是数据库操作的一组逻辑单元,它们要么全部成功,要么全部失败。MySQL支持ACID(原子性、一致性、隔离性和持久性)属性,确保了数据的完整性和一致性。 5. **分区(Partitioning...
在.NET中,我们可以使用System.Transactions命名空间下的Transaction类来创建和控制事务。事务处理通常涉及到四个基本特性,也被称为ACID属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和...