mysql-笔记 事务 锁 语句

Start Transaction 或 begin [work] 开始一个事务,开始一个事务,引起其他未提交的事务提交,引起表锁释放

commit 提交事务,永久修改

rollback 回滚事务,撤消修改

set autocommit 在当前会话状态下 启用或不启用 autocommit ,在当前会话中启作用

使用start transaction autocommit 不可用,直到事务结束,autocommit 恢复到先前状态

一些语句不能回滚 数据定义语句:create or drop database create drop alter table 或存储规则

savepoint identifier 保存点-如果已存在 则删除旧的生成新的

rollback [work] to [savepoint] identifier 回滚到保存点 不结束事务

release savepoint identifier 释放保存点 从当前事务中的保存点集合中删除保存点,不提交不回滚。如果不存在 则提示出错

如果执行 没有使用保存点的 commit /rollback没有使用保存点,则删除当前事务中的所有保存点。

调用函数或触发触发器时生成一个新的保存点级别,之前的保存点不可用。当调用函数或触发器结束时,新的保存点 被释放,之前的保存恢复可用状态

---------------------------------------------------------------------------------------------------------

lock tables tbl_name {read | write} 可以在当前客户端会话中 锁定表 一个会员不能获取其他会话的锁或释放其他会话的锁

unlock tables 释放当前会员中的锁,在获取一个新的锁时会隐式释放当前会员中的所有的表锁,释放全局读取锁

flush tables with read lock;

start transaction ; select * from t1; unlock tables;

锁可以模拟事务 或 加快更新表的速度

表锁可基于表或视图。

使用 flush tables with read lock 可以锁定所有数据库中的所有表

需要锁的会员需要获取所有需要的锁在lock tables 语句中。使用锁定时,会员只能使用锁定的表。如:

lock tables t1; select * from t1; select * from t2;提示出错

不能在同一查询语句中用同一名称引用一个锁定的表,可以使用别名代替

loct table t write,t as t1 read; insert into t select * from t as t1;

如果锁定时使用别名,引用时也必须使用别名

loct table t as myalias read; select * from t as myalias;

原文地址:https://www.cnblogs.com/caojuansh/p/11158322.html