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

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

时间:2022-11-10 15:35:37浏览次数:70  
标签:触发器 zhu OLD gender 数据库 DML MySql NEW id

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

标签:触发器,zhu,OLD,gender,数据库,DML,MySql,NEW,id
From: https://www.cnblogs.com/dengyu001/p/16877137.html

相关文章

  • MySQL的子查询(二十)
    勿以恶小而为之,勿以善小而不为--------------------------刘备上一章简单介绍了MySQL的多表连接查询(十九),如果没有看过,​​请观看上一章​​一.MySQL的子查询一.一子......
  • MySQL合并查询结果(二十一)
    勿以恶小而为之,勿以善小而不为--------------------------刘备上一章简单介绍了MySQL的子查询(二十),如果没有看过,​​请观看上一章​​一.合并查询结果多条sql查询语句......
  • MySQL的索引(二十三)
    勿以恶小而为之,勿以善小而不为--------------------------刘备上一章简单介绍了MySQL的视图(二十二),如果没有看过,​​请观看上一章​​一.索引一.一索引的产生前面已经......
  • MySQL的视图(二十二)
    勿以恶小而为之,勿以善小而不为--------------------------刘备上一章简单介绍了MySQL合并查询结果(二十一),如果没有看过,​​请观看上一章​​一.视图一.一视图的出现......
  • Mongodb数据库和MySQL的比较
    谈谈Mongodb和MySQL的区别什么是Mongodb数据库Mongodb是一个介于关系数据库和非关系数据库之间的产品(Nosql),非关系型数据库(nosql),属于文档型数据库。文档是mongoDB......
  • 一个 MySQL 隐式转换的坑,差点把服务器整崩溃了
    我是风筝,公众号「古时的风筝」,专注于Java技术及周边生态。文章会收录在​​JavaNewBee​​中,更有Java后端知识图谱,从小白到大牛要走的路都在里面。本来是一个平静而......
  • 为什么说MySQL单表行数不要超过2000w?
    作为在后端圈开车的多年老司机,是不是经常听到过,“mysql单表最好不要超过2000w”,“单表超过2000w就要考虑数据迁移了”,“你这个表数据都马上要到2000w了,难怪查询速度......
  • SQLServer比较两个数据库的对象
     两个变量,表示要比较的数据库名:@SourceDatabase@DestinationDatabaseDECLARE@SourceDatabaseVARCHAR(50)DECLARE@DestinationDatabaseVARCHAR(50)DECLARE@SQL......
  • 解决golang报错:imports github.com/go-sql-driver/mysql from implicitly required mo
    这句话的意思是,从隐式的引入模块导入的比如我使用某个第三方包,这个第三方包里面包含了mysql包我在代码里直接使用了这个mysql包,但是在go.mod里没有引入,代码里ide是不会报......
  • 安装mysql 5.7教程
    前言:因为个人工作原因安装mysql5.7版本,中间还遇到各种错误所以自己总结一下1.安装当然第一步还是安装可以自己到官网下载也可以在清华源上下载下载安装包官网下载(不......