MySQL (五)创建删除触发器、用户、事务

触发器编程-创建(CREATE TRIGGER)、删除(DROP TRIGGER) 2、一个触发器只适用于一个表,每个表最多只能有3个触发器,分别是INSERT触发器、UPDATE触发器和DELETE触发器。(3)INSTEAD OF:当对触发器作用的表执行INSTEAD OF后面指定的操作时,仅执行触发器程序。2、对S表创建一个级联删除触发器,要求删除s表中记录时要把SC表中相应的选课记录也删除。当对定义了触发器的关系表中做数据更新操作时,系统会自动执行相应的触发器,不需要人为执行。由于INSERT或UPDATE语句的执行而导致要加到该触发器作用的表中去的所有新行。 阅读详情

五、触发器

指在insert、update、delete之前或是之后,触发并执行触发器中的SQL语句

old引用原来的数据内容,new引用新的数据内容

1.创建触发器

代码:

CREATE DEFINER=`root`@`localhost` TRIGGER `test`.`total_AFTER_DELETE` #触发器名 total_AFTER_DELETE
AFTER DELETE ON `total` #列total发生删除之后
FOR EACH ROW #行级触发器
BEGIN
	delete from test.section where id = old.id; #函数体
END

另一个文件中运行:

delete from test.total where id = "2"

a.insert

#数据准备
create database test;
use test;
create table total  (
`id` int primary key, 
`dept` int,
`age` int,
`height` float ,
`university` varchar(20)
)engine = InnoDB charset = utf8mb4 collate = utf8mb4_bin;

insert into `total` values(1,3500,18,182,"CUMT");
insert into `total` values(2,3522,23,167,"JNU");

use test;
create table userlogs( #日志表
	id int(11) primary key auto_increment,
	operation varchar(20),
    old_id int(11), 
    new_id int(11) 
)engine=innodb default charset = utf8;

依据上面截图的步骤写到对应的位置,在MySQL workbench里直接写运行总是报错

至少我是这样,如果有办法直接在代码区写,请戳我修改

create trigger to_user_insert #触发器名称为to_user_insert
after insert on `total` #表total插入时触发
for each row 
begin 
	insert into userlogs values(null,'insert',null,new.id);
end;
#插入数据
use test;
insert into `total` values(7,3513,25,198,"CUMT");
insert into `total` values(8,3514,23,168,"CUMT");

日志表userlogs结果:列id表示进行两次插入,列new_id表示两次插入的数据的id分别为7和8

(7和8对应表total中新插入数据的id)

只有new_id,没有old.id

表total的结果:

b.update

create trigger to_user_update 
after update on `total` #表total更新时触发
for each row 
begin 
	insert into userlogs values(null,'update',old.id,new.id);
end;
#更新数据
use test;
update total set age = 9 where id = 7; #更新年龄
update total set id = 10 where id = 8; #更新id

日志表userlogs结果:最后一行,对id数据进行更新,更新前为8,更新后为10

同时拥有old.id和new_id

c.delete

create trigger to_user_delete
after delete on `total` #表total删除时触发
for each row 
begin 
	insert into userlogs values(null,'delete',old.id,null);
end;
#删除数据
use test;
delete from total where id = 7;
delete from total where id = 10;

日志表userlogs结果:有old.id,无new_id

2.删除触发器

drop trigger total_AFTER_DELETE; #触发器名

六、用户

1.创建用户

create user 'boxieyu'@'localhost' #用户名@主机名 仅当前主机访问
identified by '12346'; #密码

create user 'boxieyu'@'%' #任意主机访问
identified by '12346'; #密码

2.修改用户

#修改用户名
rename user 'boxieyu'@'localhost' to 'boxiansi'@'localhost' #原用户名 to 新用户名
#修改用户密码
alter user 'boxiansi'@'localhost' identified by '654321' 

3.删除用户

drop user 'boxiansi'@'localhost'

4.查询权限

show grants for 'boxieyu'@'%'

5.授予权限

grant all on test.* to 'boxieyu'@'%' 
#grant 权限名称 on 库名.表名 to 用户名@主机名

权限名称如下:

6.撤销权限

revoke all on test.* from 'boxieyu'@'%'

七、事务

一组操作,要成功都成功,要失败都失败

1.查看、修改事务提交方式

#查看事务提交方式,1表示自动提交,0表示手动提交
select @@autocommit;
#修改事务提交方式
set @@autocommit = 0;

2.提交事务

#数据准备
create database test;
use test;
create table money  ( 
`name` varchar(20) primary key, 
`cny` int
)engine = InnoDB charset = utf8mb4 collate = utf8mb4_bin;

insert into `money` values('boxiansi',2000);
insert into `money` values('boxieyu',2000);

初始数据:

start transaction; #开启事务
select * from money where name = 'boxiansi';
update money set cny = cny - 100 where name = 'boxiansi';
update money set cny = cny + 100 where name = 'boxieyu';
commit #提交事务

运行结果:

3.回滚事务

start transaction; #开启事务
select * from money where name = 'boxiansi';
update money set cny = cny - 100 where name = 'boxiansi';
update money set cny = cny + 100 where name = 'boxieyu';
rollback #回滚事务,回到事务起点
commit; #提交事务

运行结果:

4.设置停止点

start transaction; #开启事务
select * from money where name = 'boxiansi';
update money set cny = cny - 100 where name = 'boxiansi';
savepoint stop1; #设置停止点
update money set cny = cny + 100 where name = 'boxieyu';
rollback to stop1; #回滚事务,回滚到停止点stop1
commit; #提交事务,不提交事务原数据表不会产生任何变化

运行结果:回滚到停止点stop1,即仅执行第一步将'boxiansi'账户减少100

其他:并发事务与事务隔离级别

脏读、不可重复读和幻读的概念具体参照:(文字真的不好描述)

55. 基础-事务-并发事务演示及隔离级别_哔哩哔哩_bilibili

#查看隔离级别
select @@transaction_isolation;
#修改当前窗口隔离级别
set session transaction isolation level read committed; #read committed是新的隔离级别

MySQL触发器基本用法浅谈:创建、查看、删除 本文结合实例形式分析了mysql触发器的基本创建、查看、删除等相关使用方法与注意事项;讲述了MySQL触发器基本用法。 阅读详情

相关推荐

STM32 bootloader程序跳转到APP卡死在B_ENDP_ALIGN,原因:有未处理的中断。解决方法:重启系统

Bootloader和App中都用到了串口,定时器等,所以从Bootloader跳转App后未卡死。 后来写的另一个App里没有用到这几个外设,然后就是无限的卡死。 现在Bootloader中跳转App之前将已打开的外设关掉,再跳转至App就不再出现卡死。  if(((*(vu32*)(APPLICATION_ADDRESS+4))&0xFF000000)==0x08000000) {

jingzhixingyun的博客 7897

MySQL数据库查看触发器MySQL修改和删除触发器(DROP TRIGGER)

查看触发器是指查看数据库中已经存在的触发器的定义、状态和语法信息等。MySQL 中查看触发器的方法包括 SHOW TRIGGERS 语句和查询 information_schema 数据库下的 triggers 数据表等。本节将详细介绍这两种查看触发器的方法。

m0_37449634的博客 5796

17.3 删除触发器

17.3 删除触发器 当在数据库中确认某个触发器不再使用时,就可以将不再使用的触发器删除,在MySQL中,使用DROP TRIGGER语句删除触发器。 17.3.1 语法格式 删除触发器的语法格式如下: DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name 语法格式说明如下: ·DROP TRIGGER...

weixin_41275260的博客 7564

数据库sqlserver-----触发器的插入,更新和删除

提要:创建两个表:buy 和detail 想了解更多:自增函数:http://t.csdn.cn/u1VAX数据类型:http://t.csdn.cn/AVGMk 两张虚拟表inserted,deleted 在buy表中插入数据之前,两张表都为空在buy表中插入一个数据之后: 不能写为 否则会报:仅当使用了列列表并且 IDENTITY INSERT 为 ON 时,才能为表'buy'中的标识列指定显式值。第一个字段是自增的,插入时不需要赋值插入后,则会看到:1. 此时再更新一下buy表:

weixin_69884785的博客 1万+

MySQL进阶】MySQL触发器详解

小杨带你学MySQL进阶内容触发器的相关知识,一文让你掌握触发器的相关操作以及触发器的优缺点等相关知识。

小杨的博客 8738

MySQL-触发器

MySQL 数据库触发器是一个特殊的存储过程,不同的是执行存储过程要使用 CALL 语句来调用,而触发器的执行不需要使用 CALL 语句来调用,也不需要手工启动,只要一个预定义的事件发生就会被 MySQL自动调用。

大虾好吃吗 4025

MySQL触发器

详细可以查看mysql8.0官方文档:https://dev.mysql.com/doc/refman/8.0/en/triggers.html,这里只是简单做个笔记。什么是触发器,复制网上的一段解释:CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt1.trigger_name:触发器的名称 2.tirgger_time:触发时机,为BEFORE或者AFTER 3.trigg

atwdy的博客 9538

MySQL触发器事务讲解

数据库中的触发器(Trigger)是一种特殊的存储程序,它会在指定的表上发生特定事件(如 INSERT、UPDATE、DELETE)时自动执行。触发器可以用于实现复杂的数据逻辑、自动化任务或数据完整性约束。事务是一组需要作为一个整体执行的 SQL 语句,要么全部成功(提交),要么全部失败(回滚)。典型场景:银行转账(A 转给 B 100 元,A 扣款和 B 入账必须同时成功或失败)。

lsh0411的博客 979

MySQL-创建触发器(trigger)

创建触发器MySQL中,创建触发器语法如下: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt 其中: trigger_name:标识触发器名称,用户自行指定; trigger_time:标识触发时机,取值为 BEFORE 或 AFTER; trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE; tbl_name:标识建

Onecat_j的博客 6955

mysql 创建视图的权限_mysql创建用户视图 事务存储过程 触发器 约束的打怪

创建用户create user 用户名@主机名 identified by '密码’说明:1)Create user 关键字2)用户名 //登录数据库服务器的名称 mysql –h主机名 –u用户名 –p密码3)主机名 //可以是域名或IP地址或 ‘%’, 代表任意主机名可以登录数据库服务器4)“@” //用户名与主机名之间分隔符5)Identified by //在创建用户时候设置的密码 ...

weixin_42495394的博客 2169

MySQL-触发器触发器概述、触发器创建、查看删除触发器触发器的优缺点

触发器是由`事件来触发`某个操作,这些事件包括`INSERT`、`UPDATE`、`DELETE`事件。所谓事件就是指用户的动作或者触发某项行为。如果定义了触发程序,当数据库执行这些语句时候,就相当于事件发生了,就会`自动`激发触发器执行相应的操作。 当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。

小孔靠得住的博客 1861

MySQL触发器创建与管理_mysql触发器简介及如何创建删除触发器

什么是mysql触发器需要MySQL 5 对触发器的支持是在MySQL 5中增加的。因此,本章内容适用于MySQL 5或之后的版本。MySQL语句在需要时被执行,存储过程也是如此。但是,如果你想要某条语句(或某些语句)在事件发生时自动执行,怎么办呢?例如:1.每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确,州的缩写是否为大写;2.每当订购一个产品时,都从库存数量中减去订购的数量;3...

weixin_30069591的博客 990

MySQL技能完整学习列表8、触发器、视图和事务——1、触发器(Triggers)的使用——2、视图(Views)的创建和使用——3、事务(Transactions)的管理

MySQL技能完整学习列表8、触发器、视图和事务——1、触发器(Triggers)的使用——2、视图(Views)的创建和使用——3、事务(Transactions)的管理 触发器(Triggers)的使用 创建触发器 示例:创建一个简单的触发器 测试触发器 视图(Views)的创建和使用 创建视图 示例:创建一个简单的视图 使用视图 事务(Transactions)的管理 事务的基本要素 管理事务的SQL语句 示例:使用事务进行转账操作

红目香薰 1108

第六章:MySQL触发器事务处理

触发器可以用来强制执行业务规则、维护数据完整性、自动更新数据,或者记录数据变化等。事件驱动:触发器是事件驱动的。这意味着它们会在特定的数据库事件(如插入、更新或删除操作)发生时被触发。这些事件可以是单个操作,也可以是批量操作。自动执行:一旦触发器被定义并关联到特定的表和事件上,它就会在满足条件时自动执行。不需要手动调用触发器,它们是透明的,对数据库用户是隐藏的。业务规则的强制:触发器可以用来强制执行数据库的业务规则和完整性约束。

Argonaut_的博客 1257

触发器+事务

触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力 create trigger 触发器名称 触发的时机 触发的动作 on 表名 for each row 触发器状态。 参数说明: 触发器名称: 自己定义 触发的时机: before /after 在执行动作之前还是之后 触发的动作 :指的激发触发程序的语句类...

小杜的博客 2036

MySQL必知必会——触发器事务处理

一、游标 1、简介 游标(cursor)是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。 在存储了游标之后,应用程序就可以根据需要滚动或浏览其中的数据。游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。游标只能用于存储过程和函数。 2、使用方法 声明一个游标: declare 游标名称 CURSOR for ...

Code for need ,Code for fun 729

mysql创建用户视图 事务存储过程 触发器 约束的打怪

创建用户 create user 用户名@主机名 identified by '密码’ 说明: 1)Create user 关键字 2)用户名 //登录数据库服务器的名称 mysql –h主机名 –u用户名 –p密码 3)主机名 //可以是域名或IP地址或 ‘%’, 代表任意主机名可以登录数据库服务器 4)“@” //用户名与主机名之间分隔符 5)Identified by //在创建用户...

liuqun of program life 316

MySQL触发器到底是什么?MySQL创建触发器(CREATE TRIGGER)

MySQL触发器和存储过程一样,都是嵌入到 MySQL 中的一段程序,是 MySQL 中管理数据的有力工具。不同的是执行存储过程要使用 CALL 语句来调用,而触发器的执行不需要使用 CALL 语句来调用,也不需要手工启动,而是通过对数据表的相关操作来触发、激活从而实现执行。比如当对 student 表进行操作(INSERT,DELETE 或 UPDATE)时就会激活它执行。触发器与数据表关系密切,主要用于保护表中的数据。

m0_37449634的博客 1341

MySQL-触发器(TRIGGER)

例如,对于一张数据表,不能同时有两个 BEFORE UPDATE 触发器,但可以有一个 BEFORE UPDATE 触发器和一个 BEFORE INSERT 触发器,或一个 BEFORE UPDATE 触发器和一个 AFTER UPDATE 触发器。BEFORE 和 AFTER,触发器被触发的时刻,表示触发器是在激活它的语句之前或之后触发。现在触发器还只支持行级触发,不支持语句级触发。注意:当触发器设计对触发表自身的更新操作时,只能使用 BEFORE 类型的触发器,AFTER 类型的触发器将不被允许。

m0_74823715的博客 1443

番外篇第3集:多模态运维!让 AI 看懂 Grafana 图表并自动生成巡检报告

文章摘要 《多模态运维:让AI看懂Grafana图表并自动生成巡检报告》介绍了如何利用Qwen2.5-VL多模态模型解决传统运维巡检的痛点。文章指出人工查看Grafana监控图表存在效率低、易漏判、报告编写耗时等问题,提出通过Grafana Render API和多模态AI技术实现自动化巡检方案。 主要内容包括: 环境准备:配置Qwen2.5-VL多模态模型和Grafana访问权限 测试验证:展示模型准确识别图表类型、指标数值和异常趋势的能力 技术实现:封装Grafana截图API客户端,支持面板截图和数据

qq_2937655951的博客 75

391套-微信小程序项目源码合集.zip

微信小程序它基于微信这个庞大的社交平台,能够轻松触达海量用户,为开发者提供广阔的市场空间。其次,微信小程序采用轻量级的应用设计,用户无需下载安装,即点即用,大大减少了用户的使用门槛。汇集了众多基于原生开发框架的优质小程序项目源码。这些源码不仅涵盖了从基础功能到复杂应用的全方位案例,还包含了丰富的开发技巧和最佳实践。无论是初入小程序领域的开发者,还是已经有所积累的专家,都能从中汲取灵感,快速提升自己的开发能力。如果您希望深入了解微信小程序的魅力,掌握原生开发框架的精髓,那么这份资源将是您不可或缺的参考资料。赶快点击查看,开启您的小程序开发之旅

上一篇: MySQL (五)插入修改数据、视图、存储过程、自定义函数
下一篇: MySQL (六)函数(字符串、数值、日期、流程空值)、窗口函数(聚合、排名、取值)
boxiansi
博客等级 码龄5年 113粉丝 · 27原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值