我要求用户的当前密码不能与最后五个使用的密码匹配。过期的密码将存储在与此类似的表中。
################################################################
# table_A #
################################################################
# id # label # attr_string # attr_datetime # u_id #
################################################################
# 1 # expired_pass # some_hash # YYYY-MM-DD HH:MM:SS # 1 #
# 2 # expired_pass # some_hash # YYYY-MM-DD HH:MM:SS # 1 #
# 3 # expired_pass # some_hash # YYYY-MM-DD HH:MM:SS # 1 #
# 4 # expired_pass # some_hash # YYYY-MM-DD HH:MM:SS # 1 #
# 5 # expired_pass # some_hash # YYYY-MM-DD HH:MM:SS # 1 #
################################################################
现在我想要一个触发器,在输入检查时,如果已经存储了>=5个过期密码,如果是,那么删除最旧的密码。这就是我到目前为止想出来的。
DELIMITER //
CREATE TRIGGER removePass AFTER INSERT ON `user_attributes`(
SET @user_id := SELECT u_id FROM `user_attributes` WHERE id = LAST_INSERT_ID()//
SET @num := SELECT COUNT(id) FROM `user_attributes` WHERE u_id = @user_id AND label = 'expired_password'//
IF @num >= 5 THEN
DELETE FROM `user_attributes`
WHERE id IN(
SELECT id
FROM `user_attributes`
WHERE u_id = @user_id
AND label = 'expired_pass'
ORDER BY attr_datetime DESC
LIMIT 1
)
END IF
)//
DELIMITER ;
最佳答案
您可以避免使用attr_datetime
并依赖id
s:
DELETE FROM `user_attributes`
WHERE id = (
SELECT MIN(id)
FROM `user_attributes`
WHERE u_id = @user_id
AND label = 'expired_pass'
)
另外,感谢@sixtlettervariables的comment和Brock的advice。
关于mysql - mysql,在插入时触发以限制存储的过期密码的数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10642670/