MySQL自学文档

94 阅读3分钟

1. 视图 (Views)

视图是虚拟表,它是基于一个或多个表的数据的动态结果集。视图包含了一个或多个表中的数据,你可以像查询普通表一样查询视图。视图存储的是SQL查询语句,而不是数据。

创建视图

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

查询视图

SELECT * FROM view_name;

修改视图

ALTER VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE new_condition;

删除视图

DROP VIEW view_name;

2. 存储过程 (Stored Procedures)

存储过程是一组为了完成特定功能的SQL语句集合,它被编译并存储在数据库中,可被数据库中的应用程序调用。存储过程可以接受参数,并可以返回多个结果。

创建存储过程

CREATE PROCEDURE procedure_name(IN param1 datatype, OUT param2 datatype)
BEGIN
-- SQL statements
END;

调用存储过程

CALL procedure_name(value1, @output_variable);

示例:计算员工薪水

CREATE PROCEDURE CalculateSalary(IN emp_id INT, OUT total_salary DOUBLE)
BEGIN
    SELECT SUM(salary) INTO total_salary FROM employees WHERE id = emp_id;
END;

-- 调用存储过程
SET @total = 0;
CALL CalculateSalary(1, @total);
SELECT @total;

3. 自定义函数 (User-Defined Functions)

自定义函数是用于扩展MySQL功能的SQL语句集,可以像内置函数一样使用,但它们是根据用户需求定制的。

创建自定义函数

CREATE FUNCTION function_name(param1 datatype)
RETURNS datatype
BEGIN
-- SQL statements
RETURN result;
END;

调用自定义函数

SELECT function_name(value);

示例:计算平方值

CREATE FUNCTION SquareNumber(x DOUBLE)
RETURNS DOUBLE
BEGIN
    RETURN x * x;
END;

-- 调用自定义函数
SELECT SquareNumber(4);

4. 游标 (Cursors)

游标是一个数据库查询结果的指针。游标用于处理数据库中的每条记录,可以进行复杂的逻辑操作。

声明游标

DECLARE cursor_name CURSOR FOR
SELECT column1, column2, ...
FROM table_name
WHERE condition;

打开游标

OPEN cursor_name;

提取游标数据

FETCH cursor_name INTO variable1, variable2, ...;

关闭游标

CLOSE cursor_name;

示例:使用游标查询员工信息

CREATE PROCEDURE GetEmployeeDetails()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE emp_id INT;
    DECLARE emp_name VARCHAR(50);
    DECLARE cur1 CURSOR FOR SELECT id, name FROM employees;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    OPEN cur1;
    read_loop: LOOP
        FETCH cur1 INTO emp_id, emp_name;
        IF done THEN
            LEAVE read_
            ```
            LEAVE read_loop;
        END IF;
        -- 处理每条获取到的记录
    END LOOP;
    CLOSE cur1;
END;
 
-- 调用存储过程
CALL GetEmployeeDetails();

5. 触发器 (Triggers)

触发器是与表相关联的特殊存储过程,当对表进行INSERT、UPDATE或DELETE操作时自动执行。

创建触发器

CREATE TRIGGER trigger_name
BEFORE/AFTER INSERT/UPDATE/DELETE ON table_name
FOR EACH ROW
BEGIN
-- SQL statements
END;

示例:创建一个在员工工资更新后触发的触发器

CREATE TRIGGER AfterUpdateSalary
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    IF NEW.salary > 50000 THEN
        -- 可以执行的SQL操作,例如发送通知或记录日志
    END IF;
END;

-- 更新员工工资将触发此触发器
UPDATE employees SET salary = 60000 WHERE id = 1;

总结

视图、存储过程、自定义函数、游标和触发器是MySQL中强大的高级特性,它们可以提高数据库的灵活性、安全性和效率。通过使用这些特性,可以创建复杂的数据操作逻辑,同时保持数据的一致性和完整性。在实际应用中,应该根据具体需求合理使用这些特性,以确保数据库的性能和可维护性。