137のMySQLの総務

まず、トランザクションの概念

  • サービス:通常のビジネスの数は、複数のSQLステートメントに参加する必要があり、SQL文では、我々は全体のものがある呼んで、実行中の全体的な参加を形成することになります

  • 要するに:トランザクションは複数のSQL文の実行を保護することで、同時実行が成功する必要があります

    案例:转账就是一个事务
    从一个用户将资金转出,再将资金转入到另一个用户
    这两条执行语句都必须要同时执行成功,或者同时不成功
    不能我已经从我的的账户转给对方钱,我的钱少了但是对方没有收到

物事の第二に、4つの特徴

  1. アトミック:トランザクションが同時に成功する成功するかどうかのいずれかと同時に、不可分ユニットのセットです
  2. 一貫性:データの整合性は、前と後に同じことをする必要があります(データベースの整合性:、すべてのデータは、データベースの状態の整合性を呼びかけ、すべての制約に沿ったものである時点でのデータベースの場合は)
  3. 単離:物事の単離は、データへのユーザの同時アクセス複数のユーザがすることはできない強固なものが他のユーザと干渉することを意味し、同時複数のトランザクション間でデータを相互に分離されます
  4. 持続性:永続性のものが提出されると、それはデータベースに障害が発生したり、それがどんな影響を与えた場合でも、その後、データが永続的に変更することを意味

第三に、トランザクションケース

例えば、銀行のためにここに列のテキストに我々、

1.先创建银行表,然后插入两个用户
create table bank(
    id int,
    name varchar(16),
    money decimal(65, 2)
);
insert into bank values(1, 'Tom', 10), (2, "Bob", 10);

3.1エラーケース(未使用総務)

1.进行转账操作(没有事务的支持下)
# 先将Tom的钱减去,然后再给ruakei的用户加钱,但问题来了
# 我们的表里面并没有ruakey这个用户啊,所以给ruakey加钱的这个sql语句实际上是没有意义的
# 所以这样就会导致Tom用户的钱就丢了,所以吴国一个银行出现了这种情况的话,后果不堪设想
update bank set money=money-1 where name='Tom';
update bank set money=money+1 where name='ruakei';
mysql> select * from bank;
+------+------+-------+
| id   | name | money |
+------+------+-------+
|    1 | Tom  |  9.00 |
|    2 | Bob  | 10.00 |
+------+------+-------+

3.2オープン情勢

道を開き総務

ベギン;

SQL文。

SQL文。

コミット;上記の2つのSQL文を確認しては成功している間、トランザクションがコミットされ、正しく実行された場合、対応するデータのデータシートには、改定されます

  • ロールバックの状況
# 将两条sql看做事务处理
# 开启事务
begin;
update bank set money=money-1 where name='Tom';
update bank set money=money+1 where name='ruakei';
select * from bank;(这个时候,发现表里的数据tom被减钱了,没有ruakey这个账户,所以以上两条sql语句是错误的所以,执行rollback语句还原tom用户减钱之前)
# 确认有误,回滚
rollback;

##################################cmd 图解
mysql> select * from bank;
+------+------+-------+
| id   | name | money |
+------+------+-------+
|    1 | Tom  |  9.00 |
|    2 | Bob  | 10.00 |
+------+------+-------+

mysql> rollback;
Query OK, 0 rows affected (0.14 sec)
mysql> select * from bank;
+------+------+-------+
| id   | name | money |
+------+------+-------+
|    1 | Tom  | 10.00 |
|    2 | Bob  | 10.00 |
+------+------+-------+
  • コミット条件を
begin;
update bank set money=money-1 where name='Tom';
update bank set money=money+1 where name='Bob';
select * from bank;(这个时候,发现表里的数据tom被减钱了,bob账户也加钱了,所以我们提交事务)
# 确认无误,提交事务
commit;
######################################cmd 图解
mysql> select * from bank;
+------+------+-------+
| id   | name | money |
+------+------+-------+
|    1 | Tom  |  9.00 |
|    2 | Bob  | 11.00 |
+------+------+-------+

おすすめ

転載: www.cnblogs.com/xichenHome/p/11622142.html
おすすめ