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

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都会有,且含义上与上面的相同。
相关推荐
tryxr1 分钟前
Chat2Excel 项目通用服务开发
java·开发语言·excel·java项目开发
小裕哥略帅6 分钟前
Spring AOP 实现通用 Token 自动刷新重试工具包
java·后端·spring
Lenyiin10 分钟前
第6篇_Python高级语法与标准库精髓:从会用到达精通
java·python·html
YHHLAI13 分钟前
TypeScript 面试题:type 与 interface 的区别与相同点
java·ubuntu·typescript
咖啡八杯18 分钟前
PageHelper 分页封装:TableDataInfo 与 startPage() 的工作原理
java·spring boot·分页·若依·开源框架·pagehelper
多敲代码防脱发20 分钟前
Alibaba Sentinel(熔断、限流)(国内下载Sentinel)
java·开发语言·sentinel
.Hypocritical.23 分钟前
【SpringBoot】配置文件加载位置与优先级详解
java·spring boot·后端
JAVA面经实录9171 小时前
RabbitMQ 完整面试题答案
java·rabbitmq·java-rabbitmq
拾光Ծ1 小时前
【MySQL】对表数据的操作:增删查改(CRUD)
android·数据库·sql·mysql