TIL
[BadSqlGrammarException] StatementCallback; bad SQL grammar [TRUNCATE TABLE members]
coding-orange
2024. 5. 21. 17:20
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