MySQL 学习 Day4(事务, 修改引擎, 自动提交)

注意: 使用事务, 必须选择引擎为 Innodb, myisam是没有事务的

  • MySQL 事务

    • 什么是事务

      • 事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含一个或多个sql语句,这些语句要么都执行,要么都不执行
    • 事务特性

      • 原子性

        • 事务必须是原子工作单元,一个事务中的所有语句,应该做到:要么全做,要么一个都不

          做;

      • 一致性

        • 在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
      • 隔离性

        • 隔离性是指,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰
      • 持久性:

        • 一个事务执行成功,则对数据来说应该是一个明确的硬盘数据更改(而不仅仅是内存中的

        变化)。


  • 引擎分类
    • Innodb
      • 支持事务
      • 默认引擎
      • 支持外键
      • 查询, 插入较慢
      • 支持行级锁
      • 不支持全文检索
    • Myisam
      • 不支持事务
      • 非默认引擎
      • 不支持外键
      • 存储和查询较快
      • 支持表级锁
      • 支持全文检索

  • 引擎设置修改
    • 设置
      • 在配置文件中加入 default-storage-engine=InnoDB , 重启服务
    • 修改
      • alter table table_name engine=myisam/innodb

  • 事务的使用

    • 事务开启 (begin)

      • # 连接一
        mysql> select * from demo;
        Empty set (0.00 sec)
        
        mysql> begin;
        Query OK, 0 rows affected (0.00 sec)
        
        mysql> insert into demo(name) values('张三');
        Query OK, 1 row affected (0.00 sec)
        
        mysql> select * from demo;
        +----+--------+
        | id | name   |
        +----+--------+
        |  2 | 张三   |
        +----+--------+
        1 row in set (0.00 sec)
        -----------------分割线---------------------
        # 连接二
        mysql> select * from demo;
        Empty set (0.00 sec)
        -----------------分割线---------------------
        
    • 事务提交 (commit)

      • # 连接一
        mysql> commit;
        Query OK, 0 rows affected (0.01 sec)
        
        mysql> select * from demo;
        +----+--------+
        | id | name   |
        +----+--------+
        |  2 | 张三   |
        +----+--------+
        1 row in set (0.00 sec)
        -----------------分割线---------------------
        # 连接二
        mysql> select * from demo;
        +----+--------+
        | id | name   |
        +----+--------+
        |  2 | 张三   |
        +----+--------+
        1 row in set (0.00 sec)
        
    • 事务回滚 (rollback)

      • # 连接一
        mysql> select * from demo;
        +----+--------+
        | id | name   |
        +----+--------+
        |  2 | 张三   |
        +----+--------+
        1 row in set (0.00 sec)
        mysql> insert into demo(name) values('lisi');
        Query OK, 1 row affected (0.00 sec)
        
        mysql> select * from demo;
        +----+--------+
        | id | name   |
        +----+--------+
        |  2 | 张三   |
        |  3 | lisi   |
        +----+--------+
        2 rows in set (0.00 sec)
        -----------------分割线---------------------
        # 连接二
        mysql> select * from demo;
        +----+--------+
        | id | name   |
        +----+--------+
        |  2 | 张三   |
        +----+--------+
        1 row in set (0.00 sec)
        -----------------分割线---------------------
        # 连接一
        mysql> rollback;
        Query OK, 0 rows affected (0.00 sec)
        
        mysql> select * from demo;
        +----+--------+
        | id | name   |
        +----+--------+
        |  2 | 张三   |
        +----+--------+
        1 row in set (0.00 sec)
        -----------------分割线---------------------
        # 连接二
        mysql> select * from demo;
        +----+--------+
        | id | name   |
        +----+--------+
        |  2 | 张三   |
        +----+--------+
        1 row in set (0.00 sec)
        

  • 自动提交 (autocommit)
    • 查看 autocommit

      • mysql> show variables like 'autocommit';
        +---------------+-------+
        | Variable_name | Value |
        +---------------+-------+
        | autocommit    | ON    |
        +---------------+-------+
        1 row in set (0.00 sec)
        
        # ON 代表开启
        # OFF 代表关闭
        
    • 开启、关闭

      • 开启
        • 临时生效: set autocommit=1;
        • 永久生效: 在配置文件[mysqld] 下加上: autocommit=1, 重启服务
      • 关闭
        • 临时生效: set autocommit=0;
        • 永久生效: 在配置文件[mysqld] 下加上: autocommit=0, 重启服务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值