[JDBC] MySQL Error Code 1175 발생시 해결법

2021. 3. 13. 14:34문제들

문제

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.  To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.
  • mysql workbench에서 테스트 할 때 발생한다.

원인

  • 단순히 풀어서 보면 where key column이외 다른 column을 가지고 update를 하기 때문인 것으로 보인다.
mysql> SHOW VARIABLES LIKE 'sql_safe_updates';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| sql_safe_updates | ON    |
+------------------+-------+
  • 이 때 값을 확인해보면 sql_safe_update 는 on으로 되어있다.
mysql> select @@sql_safe_updates;
+--------------------+
| @@sql_safe_updates |
+--------------------+
|                  1 |
+--------------------+
1 row in set (0.00 sec)
  • 하지만 값은 0 / 1로 되어있다. 변수 이용시 주의

해결

mysql> set sql_safe_updates=0;
  • 안전모드를 해제하면 key column 이외의 column을 where 절에서 사용할 수 있다.

주의할 점

variable의 설정은 현재 mysql db session에서만 유효하다.

Java 환경(JDBC - mysql)에서의 적용

Connection conn = null ;
PreparedStatement pstmt = null;
String sql = null;

        try {
            conn = getConnection();
            // 변경사항은 mysql 해당 DB세션에서만 유지된다.
            sql =  "set sql_safe_updates=0;";
            pstmt = conn.prepareStatement(sql);
            pstmt.executeQuery();    
            pstmt.close();

            //------------------------------
            //---- UPDATE query 문 준비 및 실행
            //------------------------------

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
        }

  • 설정의 변경은 현재 db 세션에서만 유지되기 때문에 다시 재설정하지 않아도 된다.

 

happy 하다.