mysql 触发器,锁

触发器

介绍:

触发器是与表有关的数据库对象,指在insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。

使用别名old和new 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。

现在触发器还支持行级触发,不支持语句级触发

|------------|-------------------------------|
| 触发器类型 | new 和old |
| insert型触发器 | new 表示将要或者已经新增的数据 |
| update型触发器 | old表示修改之前的数据,new表示将要或已经修改后的数据 |
| delete型触发器 | old表示将要或者已经删除的数据 |

语法:

创建

create trigger trigger_name before/after insert/update/delete on tbl_name for each row --行级触发器 begin trigger_stmt; end;

查看

show triggers;

删除

drop trigger [schema_name .] trigger_name;

MySQL中的锁,按照锁的粒度分,分为一下三类:

  1. 全局锁: 锁定数据库中的所有表

  2. 表级锁:每次操作锁住整张表

  3. 行级锁:每次操作锁住对应的行数据

全局锁:

全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞

flush tables with read lock; 对数据库上锁

mysqldump -uroot -p1234 itcast>itcast.sql >号是备份到的意思,将数据库备份

unlock tables ; 解锁

特点:

数据库中加全局锁,是一个比较重的操作,存在一下问题:

  1. 如果从主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆

  2. 如果从库上备份,那么在备份期间从库不能执行主库同步过来的二进制日志(binlog),会导致主从延迟。

在InnoDB引擎中,我们可以在备份时加上参数 --single-transaction参数来完成不加锁的一致性数据备份

mysqldump --single-transaction -u root -p1234 itcast>itcast.sql

表级锁

表级锁,每次操作锁住整张表。锁定粒度大,发生所冲突的概率极高,并发度最低

表级锁分为3类:

1.表锁

  1. 元数据锁

  2. 意向锁

对于表锁,分为两类:

1.表共享读锁(read lock)

  1. 表独占写锁(write lock)

语法:

  1. 加锁: lock tables 表名 read /write

  2. 释放锁: unlock tables/客户端断开连接。

读锁只能读不能写,并且不会阻塞其他客户端的读

写锁:

读锁自己不仅能读还能写,而其他客户端,什么也做不了;

意向锁:

当我们开启一个事务,并且执行update语句是,就会对更新那一行产生行锁,那么我们在此对着表进行表锁时,这个表就会把每一行进行检查,看有没有行锁,避免所冲突,那样就性能大大降低。

  1. 意向共享锁: 又语句 select ... lock in share mode 添加

  2. 意向排他锁: 由insert,update,delete ,select... for update 添加

行级锁:

行级锁,每次操作锁住对应的行级锁。锁定粒度最小,发生锁冲突的概率最低,并发度最高。用于InnoDB存储引擎中

主要分为3类:

1: 行锁:锁定单个行记录的锁,防止其他事务对此进行update 和delete.

2.间隙锁: 锁定索引记录间隙,确保索引记录间隙不变,防止其他事务在这个间隙进行insert,产生幻读

  1. 临键锁: 行锁和间隙锁组合,同时锁住数据,并锁住数据前面的间隙Gap,在RR隔离级别下支持
相关推荐
大鹏说大话1 小时前
拒绝“慢查询”:SQL性能优化实战与索引的双刃剑效应
数据库·oracle
小狼只想在飞船上收庄稼2 小时前
Linux 信号机制--续1
数据库
MoSTChillax2 小时前
新手 3 个文件跑通前端 + Flask + MySQL(最小可行 CRUD)
数据库·python·mysql·flask
梦想的旅途22 小时前
企微客户自动触达 API:实现全生命周期的自动化消息路由
数据库·自动化·企业微信
shyの同学2 小时前
SQL 谓词下推带来的潜在问题
数据库·sql·mysql
x_lrong2 小时前
LangChain&Redis记忆
数据库·redis·langchain·向量数据库
代码探秘者2 小时前
【Redis】双写一致性:延迟双删 / 读写锁 / 异步通知 / Canal,一文全解
java·数据库·redis·后端·算法·缓存
西柚小萌新2 小时前
【数据库】--PostgreSQL 详细安装教程
数据库·postgresql
数据知道2 小时前
MongoDB 读写关注设置:一致性与性能的黄金平衡法则
数据库·mongodb