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隔离级别下支持
相关推荐
Databend13 小时前
在 AWS 中国峰会逛了一天,我在 Databend 展台看到了 Agent 数据基础设施的新思路
数据库·人工智能·agent
李白客2 天前
KES新版MySQL兼容能力再升级意味着什么?
mysql·国产数据库
ClouGence2 天前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
飞将2 天前
从零实现数据库(2)——HashIndex + IndexManager
数据库
Nturmoils3 天前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
渣波3 天前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
Jim6004 天前
【吃透 MySQL InnoDB连载】第 1 章・解密线上数据库高频故障
mysql
GreatSQL4 天前
gt-checksum v4.0.0 新功能解读系列文章(4):SSL 加密连接——数据校验传输安全再升级
mysql
倔强的石头_4 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库