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