mysql触发器

mysql触发器

show triggers;
select * from information_schema.`TRIGGERS`;

select * from `performance_schema`.prepared_statements_instances;

DELIMITER $$

CREATE TRIGGER before_insert_user
BEFORE INSERT ON test
FOR EACH ROW
BEGIN
-- 校验 age 是否大于 18
IF NEW.name <= 18 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Age must be greater than 18';
END IF;

-- 校验 email 是否符合格式(简单示例)
IF NOT NEW.pwd REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Invalid email format';
END IF;
END$$

DELIMITER ;

 

DELIMITER $$

CREATE TRIGGER before_insert_user_check_duplicate
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
-- 检查 username 是否已经存在
IF EXISTS (SELECT 1 FROM users WHERE username = NEW.username) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Username already exists';
END IF;
END$$

DELIMITER ;

 

 

sql
DELIMITER $$

CREATE TRIGGER before_insert_user_fill_timestamp
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
-- 如果没有提供 created_at,则自动填充当前时间
IF NEW.created_at IS NULL THEN
SET NEW.created_at = NOW();
END IF;
END$$

DELIMITER ;

 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: