1
我要求用戶的當前密碼不能與最近五次使用的密碼匹配。過期的密碼將存儲在類似於此的表格中。mysql,插入時觸發以限制存儲的過期密碼的數量
################################################################
# 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 ;
如果你有'id's,爲什麼要用'attr_datetime'?也許做'WHERE id =(SELECT MAX(id)FROM user_attributes WHERE u_id = @user_id AND label ='expired_pass''?在'ORDER BY'子句中也有'DESC'會刪除最新的密碼,不會它? –
我沒有想過以這種方式使用id,謝謝你解決了我的問題。 –
'MIN(id)'可能更正確。 – user7116