테이블의 데이터를 삭제할 때 조건을 추가로 지정하지 않으면 모든 데이터가 삭제됩니다. 이는 매우 위험한 삭제 방법입니다. 실제적으로 모든 데이터를 삭제를 원하는 경우는 별로 없습니다. 데이터를 삭제할 때는 항상 조건을 선택하여 삭제하는 것이 좋습니다.

| 쿼리 문법 |

DELETE FROM 테이블이름 WHERE 컬럼명 = 컬럼 데이터 

또한 조건을 지정하더라도 정확한 데이터의 열을 지정했는지 꼭 확인하는 습관이 필요합니다.

18.2.1 쿼리 실습

테이블의 열을 지정하여 데이터를 삭제해 봅니다. members1 테이블에는 여러 데이터들이 들어 있습니다.

| 콘솔 실습 화면 |

mysql> select * from members1;
+----+----------+-----------+-------------+-------+---------+
| Id | LastName | FirstName | Address     | City  | Country |
+----+----------+-----------+-------------+-------+---------+
|  1 | hojin    | lee       | shinchon    | seoul | korea   |
|  2 | jiny     | NULL      | NULL        | NULL  | korea   |
|  3 | james    | kim       | youngdun-po | seoul | korea   |
|  4 | eric     | jung      | seocho-gu   | seoul | korea   |
+----+----------+-----------+-------------+-------+---------+
4 rows in set (0.00 sec) 

이중에서 Id 값이 4인 데이터만 삭제해 보겠습니다.

| 예제 쿼리 |

DELETE FROM members1 where Id=4; 

| 콘솔 실습 화면 |

mysql> DELETE FROM members1 where Id=4;
Query OK, 1 row affected (0.01 sec)

삭제가 정상적으로 처리되었습니다. 다시 한번 select를 통하여 데이터의 목록을 확인해 봅니다.

| 콘솔 실습 화면 |

mysql> select * from members1;
+----+----------+-----------+-------------+-------+---------+
| Id | LastName | FirstName | Address     | City  | Country |
+----+----------+-----------+-------------+-------+---------+
|  1 | hojin    | lee       | shinchon    | seoul | korea   |
|  2 | jiny     | NULL      | NULL        | NULL  | korea   |
|  3 | james    | kim       | youngdun-po | seoul | korea   |
+----+----------+-----------+-------------+-------+---------+
3 rows in set (0.00 sec)

18.2.2 PHP 실습

PHP 코드를 통하여 선택한 데이터만 삭제해 봅니다.

| PHP 예제 | mysql.class.php 파일에 메서드 예제를 추가합니다.

// 선택한 데이터 Id를 삭제합니다.
public function deleteID($tbname, $Id)
{
            if ($tbname) {
                if($Id){
                    $queryString = "DELETE FROM $tbname where Id = '$Id'";

                    // 쿼리를 전송합니다.
                    if (mysqli_query($this->dbcon, $queryString)=== TRUE) {
                        $this->msgEcho("쿼리성공] ".$queryString);
                        $this->msgEcho(" 데이터 $Id 삭제!");

                        // 객체 반환, 매서드체인
                        return $this; 

                    } else {
                        $this->msgEcho("Error] ".$queryString);
                    }

                } else {
                    $this->msgEcho("Error] 삭제할 Id값이 없습니다."); 
                }

            } else {
                $this->msgEcho("Error] 테이블 이름이 없습니다."); 
            }
}

예제 파일 | delete-02.php

<?php

	include "dbinfo.php";
	include "mysql.class.php";
 
	// ++ Mysqli DB 연결.
	$db = new JinyMysql();

	$tbname = "members2";
	$db->deleteID($tbname, 2);

?>
 

화면 출력

mysql connected!
쿼리성공] DELETE FROM members2 where Id = '2'
데이터 2 삭제!
 

이처럼 항상 데이터를 삭제할 때는 고유 Id 값 또는 조건을 이용하여 삭제하는 것이 안전 합니다. 실수로 전체 데이터를 삭제한다면 복구하기 힘듭니다. 또는 특정 문자열을 검색하여 삭제를 할 수도 있습니다.

| 예제 쿼리 |

DELETE FROM Customers WHERE city='seoul'; 

조건으로 문자열을 지정하는 것은 데이터의 조건 범위를 지정하는 것과 같습니다. 고객 테이블에서 도시가 seoul인 모든 데이터를 삭제합니다.

| PHP 예제 | mysql.class.php 파일에 메서드 예제를 추가합니다.

// 조건에 맞는 데이터를 모두 삭제합니다.
public function deleteWhere($tbname, $where)
{
            if ($tbname){
                if($where){
                    $queryString = "DELETE FROM $tbname where $where";

                    // 쿼리를 전송합니다.
                    if (mysqli_query($this->dbcon, $queryString)=== TRUE){
                        $this->msgEcho("쿼리성공] ".$queryString);
                        $this->msgEcho(" 데이터 조건 삭제!");

                        // 객체 반환, 매서드체인
                        return $this; 

                    } else {
                        $this->msgEcho("Error] ".$queryString);
                    }

                } else {
                    $this->msgEcho("Error] 삭제조건이 없습니다."); 
                }
            } else {
                $this->msgEcho("Error] 테이블 이름이 없습니다."); 
            }
}

예제 파일 | delete-03.php

<?php

	include "dbinfo.php";
	include "mysql.class.php";
 
	// ++ Mysqli DB 연결.
	$db = new JinyMysql();

	$tbname = "members2";
	$db->deleteWhere($tbname, "FirstName = 'jiny'");

?>

화면 출력

mysql connected!
쿼리성공] DELETE FROM members2 where FirstName = 'jiny'
데이터 조건 삭제!