1
사용자의 현재 비밀번호가 최근 사용한 비밀번호 5 개와 일치하지 않아야합니다. 만료 된 암호는 이와 비슷한 테이블에 저장됩니다. 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'가있는 경우 왜'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