INSERT ... ON DUPLICATE KEY UPDATE
是一种 SQL 语句,用于在插入数据时,如果遇到主键或唯一索引冲突,则执行更新操作。这种语句通常用于避免插入重复数据,同时更新已存在的数据。
假设我们有一个 users
表,结构如下:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100) UNIQUE,
age INT
);
使用 INSERT ... ON DUPLICATE KEY UPDATE
的示例:
INSERT INTO users (id, name, email, age)
VALUES (1, 'John Doe', 'john@example.com', 30)
ON DUPLICATE KEY UPDATE
name = VALUES(name),
age = VALUES(age);
触发器是一种特殊的存储过程,会在特定的数据库操作(如 INSERT、UPDATE、DELETE)发生时自动执行。
假设我们希望在插入新用户时,自动记录插入时间:
DELIMITER $$
CREATE TRIGGER after_user_insert
AFTER INSERT ON users
FOR EACH ROW
BEGIN
INSERT INTO user_logs (user_id, action, timestamp)
VALUES (NEW.id, 'INSERT', NOW());
END$$
DELIMITER ;
原因:
解决方法:
SHOW TRIGGERS
查看触发器是否创建成功,并检查插入操作是否实际执行。-- 检查触发器是否存在
SHOW TRIGGERS LIKE 'after_user_insert';
-- 确认用户权限
SHOW GRANTS FOR CURRENT_USER;
-- 插入测试数据
INSERT INTO users (id, name, email, age)
VALUES (2, 'Jane Doe', 'jane@example.com', 25);
通过以上步骤,可以诊断并解决触发器未执行的问题。
领取专属 10元无门槛券
手把手带您无忧上云