728x90

 

 

 

하고자 하는 동작은 테이블이 있다면 해당 테이블의 모든 데이터를 삭제하는 것이다.

아래와 같이 코틀린으로 테스트 코드를 작성했다.

private fun resetDatabase() {
val tables = jdbcTemplate.queryForList("SHOW TABLES", String::class.java)
tables.forEach { table ->
jdbcTemplate.execute("TRUNCATE TABLE $table")
}
}

 

 

아래와 같은 오류가 발생했다.

 

 

구글링을 해보니 테이블 간 연관관계가 맺어져 있어서 오류가 나는 것이였다. 내 프로젝트에서 연관관계는 다음과 같이 작성되어 있다.

  • Member 와 Note : 일대다
  • Member 와 Quiz : 일대다
  • Note 와 NotePage : 일대다
  • Quiz 와 QuizPage : 일대다

 

각 테이블의 Foreign Key 제약조건을 비활성화 테이블 내의 데이터 삭제 후 다시 테이블의 Foreign Key 제약조건을 활성화 해주면 된다.

jdbcTemplate.execute("SET FOREIGN_KEY_CHECKS = 0") // FK Constraint 비활성화
jdbcTemplate.execute("SET FOREIGN_KEY_CHECKS = 0") // FK Constraint 활성화

 

 

최종 코드는 다음과 같다.

private fun resetDatabase() {
jdbcTemplate.execute("SET FOREIGN_KEY_CHECKS = 0")
val tables = jdbcTemplate.queryForList("SHOW TABLES", String::class.java)
tables.forEach { table ->
jdbcTemplate.execute("TRUNCATE TABLE $table")
}
jdbcTemplate.execute("SET FOREIGN_KEY_CHECKS = 1")
}

 

728x90