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隔离级别下支持
相关推荐
星月昭铭11 分钟前
5步在Trae中配置SQLcl MCP,让AI直接操作Oracle数据库
数据库·oracle·ai编程
phltxy19 分钟前
Redis Set:原理、命令与实战场景详解
数据库·redis·缓存
他是龙55119 分钟前
SQLi-Labs 通关笔记(Less-38 ~ Less-53):堆叠注入与 ORDER BY 注入
数据库·笔记·less
今天也是元气满满的一天呢21 分钟前
20260512-SQL学习大览
数据库·sql·学习
北秋,26 分钟前
Web Security Academy 第二关:SQL 注入登录绕过
数据库·sql
思麟呀26 分钟前
MySQL基础CRUD语句
数据库·mysql
funnycoffee12328 分钟前
cisco Firepower 4110 9300 FXOS set chassis hostname
java·服务器·数据库
0xDevNull29 分钟前
MySQL中的锁详解
mysql
六月雨滴31 分钟前
Oracle 数据库诊断文件与故障排查
数据库
草莓熊Lotso35 分钟前
【Linux网络】从 0 到 1 实现高性能 UDP 聊天室:深入拆解 Linux 网络编程与线程池架构
linux·运维·服务器·网络·数据库·c++·udp