mysql-事务

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1、要支持事务,需要将数据表类型设置为InnoDB或BDB, 不是所有的表类型都支持事务,MyISAM类型表不能支持事务,只能通过伪事务对表实现事务处理。</span>

2、事务的四个特性:原子性、一致性、孤立性和持久性。

3、创建事务的一般过程是:初始化事务、创建事务、应用SELECT语句查询数据是否被录入和提交事务。

4、创建用户aaa的命令:

mysql> insert into mysql.user(Host, User, Password) values("localhost", "aaa", password("123456"));
Query OK, 1 row affected, 3 warnings (0.07 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.20 sec)

5、创建事务

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
<pre name="code" class="delphi">mysql> insert into tbl_trans values (1, "aaa");
Query OK, 1 row affected (0.03 sec)

mysql> select * from tbl_trans;
+------+------+
| id   | name |
+------+------+
|    1 | aaa  |
+------+------+
1 row in set (0.00 sec)


 

6、提交事务 。在事务提交之前,其他用户查询上表tbl_trans得到的结果为空,只有当前用户使用命令“COMMIT”提交了事务之后,其他用户就可以通过会话查询结果了。

7、撤销事务(事务回滚)。用户想要撤销刚才是数据库操作,可使用ROLLBACK命令撤销数据库中的所有变化。如果执行一个回滚操作,则在输入START TRANSACTION命令后的所有SQL语句都将执行回滚操作。

8、事务的周期由用户在命令提示符中输入START TRANSACTION 指令开始,直至用户输入COMMIT结束。事务不支持嵌套功能,当用户在未结束第一个事务又重新打开一个事务,则前一个事务会自动提交,同样mysql命令中很多命令都会隐藏执行COMMIT 命令。

9、设置 系统不自动提交的命令为 set autocommit =0;

查询系统提交设置的命令为  select @@ autocommit;

10、mysql 伪事务。使用表锁定来锁定表的操作,可以加强非事务表在执行过程中的安全性和稳定性,如下

(1)读锁定,不允许写:

mysql> lock table tbl_trans read;
Query OK, 0 rows affected (0.06 sec)

mysql> insert tbl_trans values(3, "ccc");
ERROR 1099 (HY000): Table 'tbl_trans' was locked with a READ lock and can't be u
pdated
mysql>
解除表锁定测试:

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

mysql> insert tbl_trans values(3, "ccc");
Query OK, 1 row affected (0.00 sec)

mysql> select * from tbl_trans;
+------+------+
| id   | name |
+------+------+
|    1 | aaa  |
|    2 | bbb  |
|    3 | ccc  |
+------+------+
3 rows in set (0.00 sec)

(2)写锁定,不允许其他用户读,但是当前用户自己仍然可以读取表,测试如下:

mysql> lock table tbl_trans write;
Query OK, 0 rows affected (0.04 sec)

mysql> select * from tbl_trans;
+------+------+
| id   | name |
+------+------+
|    1 | aaa  |
|    2 | bbb  |
|    3 | ccc  |
+------+------+
3 rows in set (0.00 sec)
如果打开一个新用户会话,进行查询操作是,界面会被卡住,表示当前的表已经被执行写锁定,只能等待,无法执行下一步的操作。

(3)以上读写锁定可以针对多个表进行设置,格式为lock  table1, table2, .... read/write





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值