📅  最后修改于: 2023-12-03 15:03:07.339000             🧑  作者: Mango
在 MySQL 中,我们可以使用触发器(trigger)来自动设置一列的值等于另一个列的值。当更新或插入数据时,触发器会自动触发并执行一系列指定的操作。
我们可以使用 CREATE TRIGGER
语句来创建触发器,语法如下:
CREATE TRIGGER trigger_name
BEFORE INSERT OR UPDATE ON table_name
FOR EACH ROW
BEGIN
-- 触发器执行的操作
END;
其中,trigger_name
是触发器的名称,table_name
是触发器所在的表名,BEFORE INSERT OR UPDATE
表示触发器将在插入或更新数据时触发,FOR EACH ROW
表示对于每一行数据都会触发触发器,BEGIN
和 END
之间是触发器要执行的操作。
大多数情况下,我们需要在触发器中引用 NEW
和 OLD
关键字来获取新旧数据。其中,NEW
表示插入或更新后的新数据,OLD
表示插入或更新之前的旧数据。
例如,我们要创建一个触发器,在插入或更新 table_name
表中的 column_name1
列时,自动将 column_name2
列的值设置为 column_name1
的值,可以使用以下代码:
CREATE TRIGGER trigger_name
BEFORE INSERT OR UPDATE ON table_name
FOR EACH ROW
BEGIN
SET NEW.column_name2 = NEW.column_name1;
END;
以下是一个完整的示例代码,假设我们有一个 users
表,其中包含 id
、username
和 password
三列。我们需要在插入或更新数据时,自动将 password
列的值设置为 username
列的值。
-- 创建 users 表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL
);
-- 创建触发器
CREATE TRIGGER set_password
BEFORE INSERT OR UPDATE ON users
FOR EACH ROW
BEGIN
SET NEW.password = NEW.username;
END;
-- 插入一条新数据
INSERT INTO users (username) VALUES ('test');
-- 查询数据
SELECT * FROM users;
执行以上代码后,我们将得到以下输出:
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 1 | test | test |
+----+----------+----------+
ALTER TRIGGER
和 DROP TRIGGER
语句进行操作。