插入前如何检查?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入前如何检查?相关的知识,希望对你有一定的参考价值。
我有一个有6列的表。
1.ID (number)(PK)
2.USER_ID (number)
3.ROLE_ID (number)
4.CREATED_TS (date)
5.CREATED_BY (VARCHAR2)
6.ACTIVE_IND (VARCHAR2)
我通过该表中的POST REST API调用插入数据。我在Java Repository中发出一个查询。
public UserRoles save(final UserRoles u) {
final String insertQuery = "INSERT INTO VEB_USER_ROLES(ID, USER_ID, ROLE_ID, CREATED_TS, CREATED_BY, ACTIVE_IND) " +
"VALUES(VEB_USER_ROLES_SEQ.NEXTVAL, ?, ?, ?, 'PROD_MASTER', 'Y')";
GeneratedKeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement ps = con.prepareStatement(insertQuery, new String[]{"ID"});
ps.setLong(1, u.getUserId());
ps.setLong(2, u.getRoleId());
ps.setDate(3, new java.sql.Date(System.currentTimeMillis()));
return ps;
}
}, keyHolder);
return u;
}
查询工作正常,数据已插入。我只想添加一个检查,如果存在相同的UserID和RoleID,则不应插入。例如在DB中,我有Userid'1'和roleId'1',我发送相同的值,即userid'1'和角色id'1',它不应该被插入。任何人都可以指导我这件事。
答案
在两列上创建UNIQUE
约束:USER_ID
和ROLE_ID
ALTER TABLE yourtablename ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);
示例:插入状态 -
- 成功:
INSERT yourtablename(USER_ID, ROLE_ID) VALUES(1, 22);
- 成功:
INSERT yourtablename(USER_ID, ROLE_ID) VALUES(2, 23);
- 失败:
INSERT yourtablename(USER_ID, ROLE_ID) VALUES(1, 23);
如果不能使用ALTER
数据库结构,你也可以通过代码检查: - 在插入新记录之前检查USER_ID
和ROLE_ID
是否存在于DB中。使用选择查询并检查是否存在类似记录。
它只是一个想法,如果需要,请让它为你工作:
$exists = SELECT COUNT(*) no_of_similar_records FROM yourTableName WHERE USER_ID = $USER_ID AND ROLE_ID = $ROLE_ID
如果它有一个值,请不要再次使用INSERT
。所以这里我们不需要对结构进行DB更新。
这可能对你有帮助..
另一答案
几种方法来处理这个问题
- 在Userid,Roleid或列上的表上添加唯一约束
- 在尝试插入之前执行SELECT以检查它们是否已存在,或者
- 不匹配时使用merge into插入
以上是关于插入前如何检查?的主要内容,如果未能解决你的问题,请参考以下文章