MySql数据库触发器DML(数据库操作)

1.数据库触发器的作用是什么?

触发器主要用于强制复杂的业务规则和要求,还有助于强制引用的完整性,便于在添加,更新或删除表中的行时保留表之间已定义的关系。

 2.新建两张表

create table zhu(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(8),
gender char(2),
age int(11)
);

CREATE TABLE zhu_log(
id INT PRIMARY KEY AUTO_INCREMENT,
time TIMESTAMP,
operation VARCHAR(10),
detail VARCHAR(50)
);

INSERT INTO zhu(name,gender,age) VALUES ('张三', '男', 22);

3.做一个插入触发器

//插入
CREATE TRIGGER trigger_insert
AFTER INSERT ON zhu FOR EACH ROW
INSERT INTO zhu_log(time,operation,detail)
VALUES(NOW(),'INSERT',CONCAT('新纪录: ',NEW.id,',',NEW.name,',',NEW.gender,',',NEW.age));

4.做一个更改触发器

//更新
CREATE TRIGGER trigger_update
AFTER UPDATE ON zhu FOR EACH ROW
INSERT INTO zhu_log(time,operation,detail)
VALUES(NOW(),'UPDATE',CONCAT('(',OLD.id,',',OLD.name,',',OLD.gender,',',OLD.age,')','->','(',NEW.id,',',NEW.name,',',NEW.gender,',',NEW.age,')'));

5.做一个删除触发器

//删除
CREATE TRIGGER trigger_delete
AFTER DELETE ON zhu FOR EACH ROW
INSERT INTO zhu_log(time,operation,detail)
VALUES(NOW(),'DELETE',CONCAT('旧纪录: ',OLD.id,',',OLD.name,',',OLD.gender,',',OLD.age));

6.检查三个触发器是否成功

show TRIGGERS;

7.测试插入触发器

INSERT INTO zhu(name,gender,age)
VALUES ('李玉', '女', 20);

 

 8.测试更改触发器

UPDATE zhu SET NAME='王五',gender='男',age=41 WHERE id='4';

 

 

9.测试删除触发器

DELETE FROM zhu WHERE id='4';

 

 

 

 注意:建表语句关于id的自增,如果设置一个表的id自增,另一个表没有设置id自增,那么当触发器创建好的时候,将不能正常执行sql语句。

Field ‘id‘ doesn‘t have a default value

posted @ 2022-11-10 15:22  努力前行、  阅读(131)  评论(0)    收藏  举报