MySQL的视图,存储过程,触发器

视图

视图是一个虚拟的表,是由查询的SQL语句的抽象。视图本身不存储数据,而是存储一个SQL的查询语句,所以视图可以简化复杂的查询,增强安全性和提供数据的抽象层

CREATE VIEW view_name as
SELECT column1,...
FROM table_name
WHERE condtion;

示例

CREATE VIEW active_users AS
SELECT username, email
FROM users
WHERE status = 'active';

//查询视图
SELECT * FROM view_name;
// 更新视图
UPDATE active_users SET email = '916691771@qq.com' WHERE username = 'jack';
// 删除视图
DROP VIEW view_name;

存储过程

存储过程是一组预编译的SQL语句,可以通过一个名称来调用这一组预编译的SQL语句,存储过程可以接受参数,并且可以返回结果,适合复杂的业务逻辑和多次重复使用的操作

CREATE PROCEDURE procedure_name (IN param1 datatype ,OUT param2 datatype)
BEGIN
    --  存储过程逻辑
END;

示例

CREATE PROCEDURE GetUserEmail(IN username VARCHAR(50), OUT email VARCHAR(100))
BEGIN
    SELECT email INTO email FROM users WHERE username = username;
END;

-- 调用存储过程
call procedure_name(parameter1,@output_parameter);
SELECT @output_parameter;

CALL GetUserEmail('john_doe', @user_email);
SELECT @user_email;

触发器

触发器是在特定事件发生时自动执行的存储程序。他们可以用于强制执行业务规则,记录审计信息或进行复杂的数据验证

-- 创建触发器
CREATE TRIGGER trigger_name
BEFORE | AFTER INSERT|UPDATE|DELETE ON table_name
FOR EACH ROW
BEGIN
--  执行触发器逻辑
END;

示例

CREATE TRIGGER before_insert_users
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
    SET NEW.created_at = NOW();
END;