MySQL에서 데이터를 삭제(DELETE)하거나 갱신(UPDATE)하는 작업은 매우 자주 사용되지만, 이로 인해 의도치 않은 데이터 손실이 발생할 수 있습니다. 특히 실무에서는 WHERE 절을 누락하거나 조건이 잘못된 쿼리로 인해 전체 테이블이 변경되는 사고가 빈번하게 일어납니다.
MySQL에서 데이터를 삭제하거나 갱신할 때 반드시 알아야 할 주의사항을 정리해보았습니다.
WHERE 절을 반드시 명시
다음 쿼리는 users 테이블의 모든 데이터를 삭제합니다. 실무에서 가장 흔한 실수입니다.
DELETE FROM users;
-> 항상 조건을 명확히 지정해야 합니다.
DELETE FROM users WHERE id = 101;
UPDATE도 마찬가지입니다:
UPDATE users SET email = 'test@example.com';
-> 위 쿼리는 모든 유저의 이메일을 변경합니다.
반드시 조건 추가:
UPDATE users SET email = 'test@example.com' WHERE id = 101;
트랜잭션(Transaction)을 활용
중요한 데이터를 수정하거나 삭제할 경우, BEGIN
, ROLLBACK
, COMMIT
을 사용하면 변경사항을 되돌릴 수 있어 안전합니다.
START TRANSACTION;
DELETE FROM orders WHERE order_date < '2022-01-01';
-- 검토 후 문제가 없으면
COMMIT;
-- 문제가 있다면
ROLLBACK;
-> 실무에서는 꼭 트랜잭션을 습관화하시는 것이 좋습니다.
DELETE와 TRUNCATE의 차이
DELETE
: WHERE 조건으로 일부만 삭제 가능, 트리거 실행됨TRUNCATE
: 테이블 전체 삭제, 트리거 미작동, 빠르지만 위험
TIP: TRUNCATE는 복구가 어렵기 때문에 DROP TABLE
수준의 위험성을 갖습니다.
갱신 시 논리 오류 방지
다음과 같은 실수는 종종 발생합니다:
UPDATE products SET stock = stock - 1 WHERE id = 10;
-> stock이 음수가 될 가능성 있음. 조건을 추가하세요:
UPDATE products SET stock = stock - 1 WHERE id = 10 AND stock > 0;
-> 데이터 무결성을 유지하려면 검증 로직도 함께 고려해야 합니다.
백업 후 실행하는 습관
UPDATE나 DELETE는 되돌릴 수 없기 때문에 중요 테이블은 백업 후 작업하는 것이 좋습니다.
mysqldump -u root -p mydb users > users_backup.sql
-> 특히 운영 환경에서는 백업 없이 직접 작업하지 마세요.
항상 안전하게 쿼리 실행
- WHERE 절 빠짐 여부 항상 재확인
- 가능하면 트랜잭션 사용
- 데이터 백업은 필수
- TRUNCATE, REPLACE 같은 위험한 명령어는 신중히
- 수정 시 무결성과 논리적 조건을 함께 고려
실무에서 위 사항만 철저히 지켜도 데이터 손실 위험을 크게 줄일 수 있습니다.
'개발 > DB' 카테고리의 다른 글
MySQL에서 사용자 관리 및 권한 부여 (0) | 2025.08.24 |
---|---|
MySQL에서 데이터베이스 복제와 고가용성 구성하기 (0) | 2025.08.23 |
MySQL에서 데이터를 삽입하고 수정하는 방법 (0) | 2025.08.21 |
MySQL에서 날짜와 시간 관련 함수 사용법 (0) | 2025.08.20 |
MySQL에서 문자열 함수 활용법 (0) | 2025.08.19 |