2021-12-15 13:32 작성

My SQL basic 메모

Table of contents

MySQL DELETE 구문 소개

임의의 table에서 데이터를 삭제하기 위해 MySQL의 DELETE 구문을 사용한다. 다음은 DELETE 구문의 기본 문법이다:

DELETE FROM table_name
WHERE condition;

이 구문에서:

  • 첫째, 데이터를 삭제할 table을 명시한다.
  • 둘째, WHERE 절에서 조건을 사용해 삭제할 rows를 명시한다. DELETE 구문은 조건에 맞는 rows를 삭제할 것이다.

WHERE 절은 선택적이라는 점에 주목하라. 만약 WHERE 절을 제외하면, DELETE 구문은 특정 table의 모든 rows를 삭제할 것이다.

임의의 table에서 데이터를 삭제하는 것 뿐만 아니라, DELETE 구문은 삭제된 rows의 수를 반환한다.

DELETE 구문을 사용해 복수의 tables의 데이터를 삭제하기 위해서는 DELETE JOIN 구문을 사용한다.

임의의 table에서 모든 rows를 삭제할 때 삭제되는 rows의 수를 알 필요가 없다면 TRUNCATE TABLE 구문을 사용해 퍼포먼스를 향상시킬 수 있다.

Foreign key 제한을 가진 table에서 ON DELETE CASCADE 옵션을 사용하게 되면 parent table의 rows를 삭제하려고 할 때 child table의 rows도 자동적으로 삭제된다.



MySQL DELETE 예시

증명을 위해 샘플 데이터베이스employees table을 사용할 것이다.


데이터는 한 번 삭제하면 끝이다. 그러나 transactionDELETE 구문을 넣으면 되돌릴 수 있다.

officeNumber가 4인 employees를 삭제하고 싶다고 가정하자, WHERE 절을 포함한 DELETE 구문을 사용해 다음과 같이 구현할 수 있을 것이다:

DELETE FROM employees
WHERE officeCode = 4;

employees table에서 모든 rows를 삭제하려면 WHERE 절 없이 DELETE 구문을 사용한다.

DELETE FROM employees;

employees table의 모든 rows는 삭제된다.



MySQL DELETE와 LIMIT

만약 삭제할 rows의 수를 제한하고 싶다면 LIMIT 절을 다음과 같이 사용한다:

DELETE FROM table_name
LIMIT row_count;

임의의 table에서 rows의 순서는 명확하지 않기에 LIMIT 절을 사용할 때는 항상 ORDER BY 절을 함께 사용해야 한다.

DELETE FROM  table_name
ORDER BY c1, c2, ...
LIMIT row_count;

다음의 customers table이 있다고 가정하자:


예를 들어, 다음의 구문은 customer names를 알파벳 순으로 정렬한 뒤 10명을 삭제한다.

DELETE FROM customers
ORDER BY customerName
LIMIT 10;

마찬가지로 다음의 DELETE 구문은 France에 있는 customers를 선택한다. credit limit 오름차순으로 정렬하고 최초 5명의 customers를 삭제한다.

DELETE FROM customers
WHERE country = 'France'
ORDER BY creditLimit
LIMIT 5;