데이터를 수정하는 UPDATE 쿼리는 테이블 컬럼의 전체를 수정하게 됩니다. 전체의 수 정을 할 필요성도 있겠지만 이런 작업들은 많지 않습니다. 즉, 전체를 수정한다는 것은 다 른 데이터들을 잃게 되는 손실이 발생할 수 있습니다. 수정된 작업은 다시 되돌릴 수 없습니다.
일반적으로 UPDATE 문법은 조건 WHERE문과 함께 사용합니다. 특정 데이터를 조건으 로 찾아서 데이터를 변경합니다.
| 쿼리 문법 |
UPDATE 테이블명 SET 컬럼명=value, 컬럼명=value,... WHERE 조건 컬럼명=조건 값
17.2.1 쿼리 실습
테이블의 데이터를 수정할 때는 선택적으로 데이터 열을 지정해야 합니다. 데이터의 열을 지정할 때 많이 이용하는 것이 테이블의 프라이머리 키입니다. 프라이머리 키는 테이블의 각각의 데이터로 중복되지 않은 고유의 키입니다.
| 예제 쿼리 |
update members set City='busan' where Id=4;
위의 쿼리처럼 Id 프라이머리 키를 이용하면 무난하게 데이터 1개의 열을 지정할 수 있습니다.
| 콘솔 실습 화면 |
mysql> update members set City='busan' where Id=4;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
UPDATE를 통하여 하나하나 데이터를 변경할 때는 Primary Key 값인 Id 를 사용하면 좋습니다. 만일, 다수의 데이터를 변경할 때는 다른 조건 값을 같이 사용하면 편리합니다.
| 콘솔 실습 화면 |
mysql> select * from members;
+----+----------+-----------+-------------+-------+---------+
| 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 | busan | korea |
+----+----------+-----------+-------------+-------+---------+
4 rows in set (0.00 sec)
위의 예제는 Id=4인 회원의 도시를 변경하는 것입니다.
17.2.2 PHP 실습
PHP 코드를 통하여 데이터를 변경하는 실습을 해 봅니다.
| PHP 예제 | mysql.class.php 파일에 메서드 예제를 추가합니다.
// array 배열기반 update 쿼리를 생성합니다.
public function arrQueryUpdate($tbname, $arr)
{
$queryString = "UPDATE $tbname SET ";
$arrKey = array_keys($arr);
for ($i=0;$i<count($arr);$i++) {
// $key = $arr[$i];
echo $arrKey[$i]."<br>";
$key = $arrKey[$i];
$queryString .= "`".$key."`='".$arr[$key]."',";
}
$queryString .= ";";
$queryString = str_replace(",;"," ",$queryString);
return $queryString;
}
public function updateID($tbname,$arr,$Id)
{
if ($tbname) {
$queryString = $this->arrQueryUpdate($tbname, $arr);
$queryString .= "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] 테이블 이름이 없습니다.");
}
}
예제 파일 | update-02.php
<?php
include "dbinfo.php";
include "mysql.class.php";
// ++ Mysqli DB 연결.
$db = new JinyMysql();
$tbname = "members";
$arr = array('FirstName' => 'hojin', 'LastName' => 'lee');
$db->updateID($tbname, $arr, 2);
?>
화면 출력
mysql connected!
FirstName
LastName
쿼리성공] UPDATE members SET `FirstName`='hojin',`LastName`='lee' where Id='2'
데이터 2 업데이트!
| PHP 예제 | mysql.class.php 파일에 메서드 예제를 추가합니다.
// 조건 업데이트
public function updateWhere($tbname,$arr,$where){
if ($tbname) {
$queryString = $this->arrQueryUpdate($tbname, $arr);
$queryString .= "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] 테이블 이름이 없습니다.");
}
}
예제 파일 | update-03.php
<?php
include "dbinfo.php";
include "mysql.class.php";
// ++ Mysqli DB 연결.
$db = new JinyMysql();
$tbname = "members";
$arr = array('Country' => 'Korea');
$db->updateWhere($tbname, $arr, "Id>='2'");
?>
화면 출력
mysql connected!
Country
쿼리성공] UPDATE members SET `Country`='Korea' where Id>='2'
데이터 업데이트!