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

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都会有,且含义上与上面的相同。
相关推荐
暮色妖娆丶2 小时前
不过是吃了几年互联网红利罢了,我高估了自己
java·后端·面试
NE_STOP3 小时前
MyBatis-参数处理与查询结果映射
java
狂奔小菜鸡4 小时前
Day40 | Java中的ReadWriteLock读写锁
java·后端·java ee
IvorySQL5 小时前
PostgreSQL 技术日报 (3月5日)|规划器控制力升级,内核能力再进阶
数据库·postgresql·开源
SimonKing5 小时前
JetBrains 用户狂喜!这个 AI 插件让 IDE 原地进化成「智能编码助手」
java·后端·程序员
狂奔小菜鸡5 小时前
Day39 | Java中更灵活的锁ReentrantLock
java·后端·java ee
NE_STOP18 小时前
MyBatis-配置文件解读及MyBatis为何不用编写Mapper接口的实现类
java
数据组小组19 小时前
免费数据库管理工具深度横评:NineData 社区版、Bytebase 社区版、Archery,2026 年开发者该选哪个?
数据库·测试·数据库管理工具·数据复制·迁移工具·ninedata社区版·naivicat平替
爱可生开源社区21 小时前
MiniMax M2.5 的 SQL 能力令人惊艳!
sql·llm