如果你在 MySQL 中正在使用一个不支持事务的存储引擎,如果你希望能确保没有其它的线程会出现在一个 SELECT 和 一个 UPDATE 之间 , 你必须使用 LOCK TABLES。下面的示例显示为了安全地执行,这里需要LOCK TABLES :
mysql LOCK TABLES trans READ, customer WRITE;
mysql SELECT SUM(value) FROM trans WHERE customer_id=some_id;
mysql UPDATE customer SET total_value=https://www.04ip.com/post/sum_from_previous_statement
-WHERE customer_id=some_id;
mysql UNLOCK TABLES;
不使用 LOCK TABLES , 将可能发生在 SELECT 和 UPDATE 语句执行期间有另外一个线程可能在 trans 表中插入一行新记录 。
通过使用递增更新 (UPDATE customer SET value=https://www.04ip.com/post/value+new_value) 或 LAST_INSERT_ID() 函数,你可以在很多情况下避免使用 LOCK TABLES 。
你也可以使用用户级锁定函数 GET_LOCK() 和 RELEASE_LOCK() 解决一些情况,这些锁被保存在服务器上的一个哈希表中,并以
pthread_mutex_lock() 和 pthread_mutex_unlock() 实现以获得高速度 。查看章节 6.3.6.2
辅助功能函数 。
查看章节 5.3.1 MySQL 如何锁定表,以获取关于锁定方案的更多信息 。
你可以使用 FLUSH TABLES WITH READ LOCK 命令以读锁锁定所有数据库中的所有表 。查看章节 4.5.3 FLUSH 句法 。如果你有一个可以及时建立文件快照的文件系统,例如 Veritas,这将是得到备份的非常方便方式 。
注意:LOCK TABLES 不是事务安全的,在尝试锁定一个表之前,将自动地提交所有的活动事务 。
6.7.3 SET TRANSACTION 句法
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
设置全局的、整个会话或下一个事务的事务隔离级 。
缺省行为是设置下一个(未启动的)事务的隔离级 。如果你使用 GLOBAL
关键词,语句为所有在那个点上建立的新连接设置默认的全局事务隔离级 。为了这样做,你需要有 SUPER 权限 。使用 SESSION
关键词为当前连接所有将来执行的事务设置默认的事务隔离级 。
你可以使用 --transaction-isolation=... 为 mysqld 设置默认的全局隔离级 。查看章节 4.1.1 mysqld 命令行选项
mysql怎么使用事务的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mysql事务命令、mysql怎么使用事务的信息别忘了在本站进行查找喔 。
- mysql游标和存储过程是什么 mysql游标表名为变量
- 如何使用cmd命令行提示符登录mysql服务器 cmd中登陆mysql
- mysql怎么设置时区 mysql时间显示设置
- 招聘要精通mysql
- mysql 65535 8192 限制 mysql限制资源使用
- mysql有topn
- mysql协议包解析 mysqlicp协议
- mysql子查询和连接查询 mysql子查询插入
- Mysql使用索引查询 mysql使用round
- 云服务器游戏出现黑屏问题怎么解决? 云服务器游戏黑屏怎么办
