mysql【存储过程】【触发器】

触发器学习链接:https://www.runoob.com/w3cnote/mysql-stored-procedure.html

示例#

#

show databases;

-- 创建表test2
create table test2 (
	s_id INT primary key,
	s_name VARCHAR(32),
	s_age INT
);

-- 插入
insert into test2 (s_name,s_age) values ('周英杰',20); -- 没有设置自增或者默认值的话会报错
insert into test2 (s_name,s_age) values 
('孟子恒',20),
('张艺卓',20),
('段青垚',21);
insert into test2 (s_name,s_age) values ('马俊杰',21),('张馨元',20); 

-- 给s_id添加自增
alter table test2 modify s_id INT AUTO_INCREMENT;  -- primary key保留着
-- alter table test2 add constraint auto_increment_s_id auto_increment (s_id);  语法不对

-- 查看表结构
DESCRIBE test2;

存储过程#

-- 定义存储过程
-- BEGIN .... END:存储过程开始和结束符号:
delimiter $$  -- 作用:这是改变命令结束符;为$$
create procedure ShowTest2Students()
begin
	SELECT * from test2;  -- 需要加;
end$$
delimiter ; -- 恢复默认分隔符

-- 展示已有的存储过程
SHOW PROCEDURE STATUS;

-- 删除存储过程
DROP PROCEDURE IF EXISTS ShowTest2Students;

-- 调用存储过程
call ShowTest2Students();

触发器#

-- 定义触发器
-- 触发器通常用于更新或插入数据,不支持执行 SELECT 或其他查询操作来返回结果给客户端
create trigger after_test2_delete
after delete on test2
for each row
begin
	insert into student (s_name,s_age) values ('匿名用户',100);  -- 正确
	-- 	UPDATE test2 set s_age=22;  -- 不能对同表进行操作
end; 

-- 查看现有触发器
SHOW TRIGGERS;

-- 删除触发器
DROP TRIGGER IF EXISTS after_test2_delete;

-- 测试触发器
delete from test2 
where s_id=3;
/*
报错:MySQL 不允许在触发器内部直接修改触发器所作用的表,因为这样会导致递归触发,触发器本身会再次被激活,导致死锁或无限循环
解决:1.使用另一个表记录操作 2.避免在触发器中直接更新触发的表:
*/

#

-- 删除
delete from test2 where s_name='匿名用户';

-- 查询所有
select * from test2;

-- 更新
UPDATE test2 set s_age=21;

作者:cloud-2-jane

出处:https://www.cnblogs.com/cloud-2-jane/articles/18649901

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   一只大学生  阅读(10)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示