mysql - 如果某个项目出现超过 10 次,请将其删除并存储新的

标签 mysql database hibernate

我想存储用户 10 个以前的密码,以便他/她不会使用旧密码。为此,我创建了一个包含 3 列的表格:

  • id
  • 密码
  • 用户 ID

现在,如果有人第十一次忘记密码并更新密码,那么它应该删除第一个旧密码,从而存储新密码。 sql 查询是什么?

我首先检查了 useridentitycount,它运行良好:

SELECT userIdentity, COUNT(userIdentity) FROM passwordhistory;

现在,如果 count >10 那么我想使用与其关联的最小 id 删除行。

DELETE FROM passwordhistory 
 WHERE id = (SELECT MIN(id) 
               FROM passwordhistory where userIdentity in
                       (SELECT userIdentity, COUNT(userIdentity) 
                          FROM passwordhistory
                       )
            )

但这对于如何删除 count>10userIdentity 来说并不完整。

密码历史记录.java

package com.tcs.webrtc.model;

 import java.io.Serializable; 
 @Entity
 @Table(name="passwordhistory")
 public class PasswordHistory implements Serializable{
/**
 * 
 */
private static final long serialVersionUID = 2621325802545502360L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;

public Integer getId() {
    return id;
}
public void setId(Integer id) {
    this.id = id;
}
@NotNull    
private String userIdentity;
@NotNull
private String password;
public String getUserIdentity() {
    return userIdentity;
}
public void setUserIdentity(String userIdentity) {
    this.userIdentity = userIdentity;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
}

最佳答案

既然你使用mysql,你应该创建一个要删除的id列表,然后删除它们:

创建列表:

Session session=sessionFactory.getCurrentSession(); 
String queryToCheckPassword="
SELECT MIN(id) 
       FROM passwordhistory where userIdentity in
               (SELECT userIdentity 
                  FROM passwordhistory 
                 group by userIdentity 
                having COUNT(userIdentity) >10
               )
"; 
List listToDel = session.createSQLQuery(queryToCheckPassword).list();
return listToDel .size()>0?true:false;

按 id 删除(这是 java 人来的地方);

<for each item in listToDel >
     delete from passwordhistory where id = :id

关于mysql - 如果某个项目出现超过 10 次,请将其删除并存储新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37959817/

相关文章:

php - 保护 PHP 应用程序的安全

java - HibernateTransactionManager @Transactional(propagation=REQUIRES_NEW) 无法打开 2 个 session

hibernate - RESTORE_VIEW 中的 LazyInitializationException(PersistentSet 实例化不正确)

php - 在数据库中保存多行字段,在 View 中显示为一行

mysql - cfquery 结果让我发疯

php - mysql查询问题

java - ORDER BY 与 GROUP BY 查询,使用 JPA 和 Hibernate

MySQL AES_ENCRYPT() 长度 - 公式解释

database - 删除所有序列 SqlAlchemy

android - 如何正确初始化游标?