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隔离级别下支持
相关推荐
广州灵眸科技有限公司5 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
Cloud云卷云舒7 小时前
云卷云舒:从Oracle/MySQL迁移到HaishanDB:迁移评估工具核心技术拆解
mysql·oracle·ai-native·haishandb·信创数据库替换
憧憬成为web高手7 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学8 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh10 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
用户713335851562410 小时前
MySQL - 事务、redo/undo 日志与 MVCC
mysql
z1234567898611 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD11 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo11 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
用户713335851562411 小时前
MySQL - InnoDB 的 Buffer Pool
mysql