赞
踩
对于维护数据的完整性,如果擅长Java,推荐阅读这篇文章:超全分析MybatisPlus中的MetaObjectHandler全局字段填充的基本知识(附Demo及实战)
触发器(Trigger)是数据库的一种特殊存储过程,当某个特定事件在特定表上发生时,触发器会自动执行
触发器在维护数据的完整性、实现复杂的业务规则以及监控数据库活动方面非常有用
基本的概念如下:
触发器的限制和注意事项
触发器的实际应用场景
对于数据库
基本的创建触发器语法如下:
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
FOR EACH ROW
BEGIN
-- 触发器逻辑
END;
对应创建一个manong表,创建一个在插入数据之前更新 created_at 字段的触发器:
CREATE TABLE manong (
id INT PRIMARY KEY,
name VARCHAR(100),
created_at TIMESTAMP
);
DELIMITER //
CREATE TRIGGER before_manong_insert
BEFORE INSERT ON manong
FOR EACH ROW
BEGIN
SET NEW.created_at = NOW();
END//
DELIMITER ;
截图如下:
这三者的命令差不多
如果在数据库中了,可直接使用:SHOW TRIGGERS;
如果未在数据库中,需要指明数据库名:SHOW TRIGGERS FROM your_database_name;
还可以通过触发器名字来查询:show create trigger your_trigger_name;
还可直接使用information_schema.TRIGGERS
表这样查询:
SELECT
TRIGGER_NAME,
EVENT_MANIPULATION,
EVENT_OBJECT_TABLE,
ACTION_STATEMENT,
ACTION_TIMING,
CREATED,
SQL_MODE,
DEFINER
FROM
information_schema.TRIGGERS
WHERE
TRIGGER_SCHEMA = 'your_database_name';
截图如下:
注意TRIGGER_SCHEMA
应该用单引号引用
对应的参数说明如下:
TRIGGER_NAME
:名称EVENT_MANIPULATION
: 事件(INSERT, UPDATE, DELETE)EVENT_OBJECT_TABLE
:作用的表ACTION_STATEMENT
: 执行的SQL语句ACTION_TIMING
:触发时间(BEFORE, AFTER)CREATED
:创建时间SQL_MODE
:创建时的SQL模式DEFINER
:定义者在MySQL中,触发器不能直接更新
需要修改触发器,必须先删除旧的触发器,然后创建一个新的触发器
删除的基本语法如下:DROP TRIGGER [IF EXISTS] trigger_name;
截图如下:
重新创建一个新的触发器:
DELIMITER //
CREATE TRIGGER before_yanjiuseng_insert
BEFORE INSERT ON manong
FOR EACH ROW
BEGIN
SET NEW.created_at = NOW();
-- 新增逻辑,例如:记录插入操作日志
END//
DELIMITER ;
截图如下:
根据以上的示例,测试对应是否可自动补充属性
原表格如下:
先完善表格,基于id自增以及主键
```sql
ALTER TABLE manong DROP PRIMARY KEY; -- 删除原有的主键约束
ALTER TABLE manong MODIFY COLUMN id INT AUTO_INCREMENT PRIMARY KEY; -- 修改 id 字段为自增主键
INSERT INTO manong (name) VALUES ('ma');
INSERT INTO manong (name) VALUES ('nong');
INSERT INTO manong (name) VALUES ('yanjiuseng');
截图如下:
再次查看对应的属性:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。