云主机测评网云主机测评网云主机测评网

云主机测评网
www.yunzhuji.net

mysql触发器使用

MySQL触发器是一种自动执行的存储过程,当特定事件(如插入、更新或删除)发生时,触发器会自动执行。

MySQL触发器是一种存储在数据库中的程序,它会在特定的事件(如插入、更新或删除数据)发生时自动执行,触发器可以用于实现数据的完整性约束、审计和自动化任务等。

以下是一个简单的MySQL触发器示例:

1、创建表结构

CREATE TABLE employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT NOT NULL,
    department_id INT NOT NULL
);

2、创建部门表结构

CREATE TABLE departments (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    manager_id INT,
    FOREIGN KEY (manager_id) REFERENCES employees(id)
);

3、创建插入触发器

当向employees表插入数据时,如果新员工的部门ID为NULL,则将该员工分配给部门ID为1的部门。

DELIMITER //
CREATE TRIGGER assign_default_department
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
    IF NEW.department_id IS NULL THEN
        SET NEW.department_id = 1;
    END IF;
END;
//
DELIMITER ;

4、创建更新触发器

当更新employees表中的数据时,如果员工的部门ID被设置为NULL,则将该员工从部门中移除。

DELIMITER //
CREATE TRIGGER remove_from_department
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    IF NEW.department_id IS NULL THEN
        DELETE FROM departments WHERE id = OLD.department_id;
    END IF;
END;
//
DELIMITER ;

5、创建删除触发器

当从employees表中删除数据时,如果员工的部门中没有其他员工,则删除该部门。

DELIMITER //
CREATE TRIGGER delete_department_if_empty
AFTER DELETE ON employees
FOR EACH ROW
BEGIN
    DECLARE department_count INT;
    SELECT COUNT(*) INTO department_count FROM employees e2 WHERE e2.department_id = OLD.department_id;
    IF department_count = 0 THEN
        DELETE FROM departments WHERE id = OLD.department_id;
    END IF;
END;
//
DELIMITER ;
打赏
版权声明:主机测评不销售、不代购、不提供任何支持,仅分享信息/测评(有时效性),自行辨别,请遵纪守法文明上网。
文章名称:《mysql触发器使用》
文章链接:https://www.yunzhuji.net/internet/176971.html

评论

  • 验证码