触发器
触发器就像它的名字一样,在某种条件下会触发一条SQL语句。比如我们可以设置一个触发器,当SELECT/DROP等语句使用时,会执行一条SQL语句。
触发器依附的是一个基本表,当基本表发生如SELECT等SQL命令后,会触发触发器生成两个临时存在的表(new表和old表)。
- 当运行
INSERT时:新的数据会被插入到new表 - 当运行
DELETE时:被删除的数据会被移动到old表 - 当运行
UPDATE时:旧的数据会到old表,新的数据到new表中。
old表和new表永远只会存储正在进行的这一行数据。有一个临时存储的作用。
1 | CREATE TRIGGER 触发器名称 [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON 表名/视图名 |
FOR EACH ROW表示针对每一行都会生效,触发触发器。
查看触发器:
1 | SHOW TRIGGERS; |
删除触发器:
1 | DROP TRIGGER 触发器名称; |
事务
我们可能会遇到这样的问题,比如我们写的论坛中有一个用户注销了,我们需要删除关于他的帖子,论坛信息,表情包之类的反正很多东西。一个一个删除将会变得非常麻烦,也就是一堆的SQL语句来完成。这些数据库操作语句可以构成一个事务,只有Innodb引擎支持事务,我们可以看看数据库支持哪些引擎:
1 | SHOW ENGINES; |
MySQL自适应Innodb引擎。
事务具有以下特性:
- 原子性:一个事务要不执行完,要不发生错误回到事务发生前。
- 一致性:如果事务结束了没有错误,这表示数据库的完整性没有被破坏。
- 隔离性:可以多个事务同时进行,隔离性可以防止他们交叉导致数据不一致。事务隔离分为不同等级:读未提交、读提交、可重复读、串行化。
- 持久性:对数据的修改是永久的,系统故障也不会丢失。
事务的大体操作:
1 | BEGIN; #开始事务 |
说些什么吧!