视图、存储过程、函数、触发器

1.视图

视图就是一张基于查询的虚拟表,里面定义的其实就是普通的SQL语句。如果一条复杂查询的SQL语句我们频繁的使用,就可以定义视图,方便操作。创建语法如下:

CREATE VIEW <视图名> AS <SELECT语句>

2.存储过程

存储过程里面定义的SQL语句集合可以进行一些逻辑处理。比如,我们保存数据时,如果数据库里面有,则不插入,如果没有,则进行插入。这时就可以定义一个存储过程来完成整个逻辑功能。

IN表示输入参数,OUT表示输出参数,DECLARE表示定义变量,set表示改变值。

sql 复制代码
CREATE PROCEDURE saveUser(IN p_account VARCHAR(20),IN p_sex CHAR(1),OUT res_mark
INT)
BEGIN
DECLARE v_count INT DEFAULT 0;
SELECT COUNT(*) INTO v_count FROM t_user WHERE account = p_account;
IF v_count = 0 THEN
INSERT INTO t_user(account,sex)VALUES(p_account,p_sex);
SET res_mark = 0;
ELSE
SET res_mark = 1;
END IF;

3.函数

函数必须有返回值,里面可以定义流程控制语句。

sql 复制代码
CREATE FUNCTION checkUserType(p_type INT) RETURNS VARCHAR(4)
BEGIN
IF p_type = 0 THEN
RETURN '管理员';
ELSE
RETURN '业务用户';
END IF;

4.触发器

触发器不需要直接调用,而是在执行了增,删,改之后自动执行的存储过程。比如,我们需要在删除用户前,需要现删除用户所管理的菜单关系。

sql 复制代码
CREATE TRIGGER delete_user_menu BEFORE DELETE //表示在删除用户前触发
ON user //针对的是用户表
FOR EACH ROW
BEGIN
DELETE FROM user_menu WHERE user_id = old.id;//old表示要删除的用户数据
  • insert只会有new ,代表着要插入的新记录
  • delete只会有old ,代表着要删除的记录
  • update由于执行的是先删除旧的记录,再插入新的记录,因此new和old都会有,且含义上与上面的相同。
相关推荐
Code_Geo21 分钟前
agent设计模式:第三章节—并行化
java·设计模式·agent·并行化
ldmd28424 分钟前
Go语言实战:入门篇-4:与数据库、redis、消息队列、API
数据库·redis·缓存
Javatutouhouduan25 分钟前
2025Java高质量面试真题汇总!
java·高并发·java面试·java面试题·后端开发·java架构师·java八股文
是Dream呀30 分钟前
工业级时序数据库选型指南:技术架构与场景化实践
数据库·架构·时序数据库
骑士99911136 分钟前
时序数据库TDengine用法
数据库·时序数据库·tdengine
Pluchon37 分钟前
硅基计划5.0 MySQL 叁 E-R关系图&联合/多表查询&三大连接&子查询&合并查询
开发语言·数据库·学习·mysql
Gold Steps.39 分钟前
MySQL 8+ 日志管理与数据备份恢复实战指南
数据库·mysql·数据安全
程序员鱼皮42 分钟前
老弟第一次学 Redis,被坑惨了!小白可懂的保姆级 Redis 教程
数据库·redis·程序员
维诺菌1 小时前
k8s java应用pod内存占用过高问题排查
java·jvm·云原生·容器·性能优化·kubernetes