【MySQL】基本语法(二)

事务

  • 事务
    • 为了启动一个事务,你使用 START TRANSACTION 语句。BEGINBEGIN WORKSTART TRANSACTION 的别名。
    • 要提交当前事务并使其变化永久化,你要使用 COMMIT 语句。
    • 要回滚当前事务并取消其变化,你可以使用 ROLLBACK 语句。
    • 要禁用或启用当前事务的自动提交模式,你可以使用 SET autocommit 语句
START TRANSACTION;
/*执行语句*/
COMMIT;

/*回滚语句*/
ROLLBACK;

/*关闭自动提交*/
SET autocommit = 0;
--OR--
SET autocommit = OFF;

/*启动自动提交*/
SET autocommit = 1;
--OR--
SET autocommit = ON;

  • 认识锁
    概念:计算机协调多个进程或线程并发访问某一资源的机制
    锁的重要性:在数据库中,除了传统的计算资源(CPU、RAM、I\O等)的争抢,数据也是一种供多用户共享的资源。
    因此,如何保证数据并发访问的一致性,有效性,是所有数据库必须要解决的问题
    锁的缺点:加锁是消耗资源的,锁的各种操作,包括:获得锁、检测锁是否已经解除、释放锁等,都会增加系统的开销
    查看数据库使用什么级别事务锁隔离
SHOW VARIABLES like '%isolation%'
  • 锁的类型
    自增锁

    - **0**:`traditonal` 每次 `insert` 语句执行都会产生表锁
    - **1**:`consecutive simple insert` 会获得批量的锁,保证一批插入自增序列的连续性,插入之前提前释放锁,在这个模式下你会发现当你 `insert` 多条数据回滚的时候虽然 DB 没有插入数据,但是自增 ID 已经增长了,也是数据库默认的级别
    
      • 2interleaved 不会锁表,实时插入,并发最高,但是基于主从的复制是不安全的,感兴趣可以去查询 RBR 和 SBR 的优缺点
show variables like '%innodb_autoinc_lock_mode%'
    • innodb_autoinc_lock_mode = 0

在这一模式下,所有的 insert 语句都要在语句开始的时候得到一个表级的 auto_inc 锁,在语句结束的时候才释放
这种模式下 auto_inc 锁一直要保持到语句的结束,所以这个就影响到了并发的插入
但是主从同步时候是安全的

    • innodb_autoinc_lock_mode = 1

这一模式下去 simple insert 做了优化,由于 simple insert 一次性插入值的个数可以立马得到确定,所以 MySQL 可以一次生成几个连续的值,用于这个 insert 语句,也保证主从同步基于语句的复制安全
这一模式也是 MySQL 的默认模式,这个模式的好处是 auto_inc 锁不要一直保持到语句的结束,只要语句得到了相应的值后就可以提前释放锁

    • innodb_autoinc_lock_mode = 2

无自增锁ÿ

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值