我有一个包含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'我发送相同的值,即用户ID' 1'和角色ID' 1'它不应该插入。 任何人都可以指导我这件事。
答案 0 :(得分:2)
在两列上创建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
& DB中存在ROLE_ID
。
使用选择查询&检查是否存在类似的记录。
这只是一个想法,如果需要,请让它为你工作:
$exists = SELECT COUNT(*) no_of_similar_records FROM yourTableName WHERE USER_ID = $USER_ID AND ROLE_ID = $ROLE_ID
如果有值,则不再INSERT
。
所以这里我们不需要对结构进行数据库更新。
这可能对你有帮助..
答案 1 :(得分:0)
处理此问题的几种方法