第5回 データの更新と削除を覚えよう - MySQL講座

PHP 中級 講座

サカイ先生のMySQL講座

Lecutures on PHP

第5回 データの更新と削除を覚えよう (その1)

 このエントリーをはてなブックマークに追加

はじめに

サカイ先生 みなさん、こんにちは。サカイです。

 前回はデータの「登録・変更・削除・参照」の4つのデータ操作機能のうち、「登録」と「参照」について学びました。特に参照(SELECT)については非常に多岐にわたりますので前回説明したのはほんの入口に過ぎませんが、何事も第一歩から。まずは前回学んだことをしっかり自分のものとして身につけてくださいね。

 それでは今回は残りの2つである「変更」「削除」について説明します。

現在のデータ状態の確認

 今回の学習に入る前に、前回までの作業で登録した現在のデータの状態を確認しておきましょう。今回はこれらのデータを変更したり削除したりしますので、前回の INSERT 文により7件のデータを作成しておいてくださいね。

 では確認してみましょう。まず MySQL サーバに接続後、phpproデータベースに移動(デフォルトデータベースとして指定)して、そこにあるテーブルを確認してみます。 kohaku テーブルがありますね。

mysql> USE phppro; 
Database changed
mysql> SHOW TABLES; 
+------------------+
| Tables_in_phppro |
+------------------+
| kohaku           |
+------------------+
1 row in set (0.00 sec)
※ >の後の USE phppro; と SHOW TABLES; が入力するコマンドです。

 この kohaku テーブルに登録されている全件を表示してみます。SELECT 文を使うのでしたね。

mysql> SELECT * FROM kohaku;
+----+------+------------+------------+--------+
| no | year | aka_tori   | shiro_tori | winner |
+----+------+------------+------------+--------+
| 53 | 2002 | 石川さゆり | 五木ひろし | 紅     |
| 54 | 2003 | 天童よしみ | SMAP       | 白     |
| 55 | 2004 | 小林幸子   | 五木ひろし | 紅     |
| 56 | 2005 | 天童よしみ | SMAP       | 白     |
| 57 | 2006 | 川中美幸   | 北島三郎   | 白     |
| 58 | 2007 | 石川さゆり | 五木ひろし | 白     |
| 59 | 2008 | NULL       | NULL       | NULL   |
+----+------+------------+------------+--------+
7 rows in set (0.00 sec)
※ >の後の SELECT * FROM kohaku; が入力するコマンドです。

 SELECTの結果が上記のようになっていれば、OKです。今回の学習に入りましょう。

データの変更 ~ UPDATE

 すでに登録済みのデータを変更するには UPDATE 文を使います。これもまずマニュアルを見てみましょう。

http://dev.mysql.com/doc/refman/5.0/en/update.html

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
        SET col_name1=expr1 [, col_name2=expr2 ...]
        [WHERE where_condition]
        [ORDER BY ...]
        [LIMIT row_count]

 これももう少し簡単な形で覚えておきましょう。基本は以下の形式です。

おぼえておこう UPDATE この形式で
UPDATE テーブル名
        SET 列名= [, 列名=... ]
        WHERE 条件

サカイ先生 すでにあるデータを変更するのですから、

  • (1) どのテーブルのデータを変更したいのか
  • (2) そのテーブルの、どのレコード(行)を変更したいのか
  • (3) そのレコードの、どの列の値を、どんな値に変更したいのか

をすべて指定すれば、データの変更ができそうだということは分かりますね。

テーブル名は UPDATE の直後に指定します。

変更対象のレコードは、WHERE 句に続けて条件を指定します。SELECT の時にも出てきましたね。主な形式は 列名= です。(NULLに関するものや否定の表現も前回やりました。忘れてしまった方は前回の記事で復習してみてください。)

では実際にやってみましょう。2008年のトリ歌手が空欄(NULL)になっているので、そこに名前を入れてみましょう。もちろん今年のトリは本当はまだ決まっていませんので適当な名前で、紅組は「たべものがかり」、白組は「五島五郎」がトリになったというデータを登録することにします。

UPDATE kohaku
   SET aka_tori="たべものがかり", shiro_tori="五島五郎"
 WHERE year=2008;

 上記のようになります。

 WHERE条件は、上の例では 「year が 2008年のもの」という指定方法をしましたが、レコードを特定できればよいので、今回のデータ例の場合だと no=59 という条件を代わりに使用しても構いません。

 UPDATE実行後のデータは以下のようになります。

mysql> SELECT * FROM kohaku;
+----+------+----------------+------------+--------+
| no | year | aka_tori       | shiro_tori | winner |
+----+------+----------------+------------+--------+
| 53 | 2002 | 石川さゆり     | 五木ひろし | 紅     |
| 54 | 2003 | 天童よしみ     | SMAP       | 白     |
| 55 | 2004 | 小林幸子       | 五木ひろし | 紅     |
| 56 | 2005 | 天童よしみ     | SMAP       | 白     |
| 57 | 2006 | 川中美幸       | 北島三郎   | 白     |
| 58 | 2007 | 石川さゆり     | 五木ひろし | 白     |
| 59 | 2008 | たべものがかり | 五島五郎   | NULL   |
+----+------+----------------+------------+--------+
※ >の後の SELECT * FROM kohaku; が入力するコマンドです。

 確かに、2008年のレコードが更新されていますね。WHERE句を指定しないで UPDATE を実行すると全件が対象になり、その結果として全レコードのデータが書き換わってしまうので、特に WHERE の付け忘れや条件の指定間違いなどには注意しましょう。 (SELECTの時も WHERE を指定しないと全件表示されましたね)

※ WHERE句 を付け忘れて UPDATE してしまった例。たいへん!

mysql> UPDATE kohaku -> SET aka_tori="たべものがかり", shiro_tori="五島五郎"; Query OK, 6 rows affected (0.08 sec) Rows matched: 7 Changed: 6 Warnings: 0 mysql> SELECT * FROM kohaku; +----+------+----------------+------------+--------+ | no | year | aka_tori | shiro_tori | winner | +----+------+----------------+------------+--------+ | 53 | 2002 | たべものがかり | 五島五郎 | 紅 | | 54 | 2003 | たべものがかり | 五島五郎 | 白 | | 55 | 2004 | たべものがかり | 五島五郎 | 紅 | | 56 | 2005 | たべものがかり | 五島五郎 | 白 | | 57 | 2006 | たべものがかり | 五島五郎 | 白 | | 58 | 2007 | たべものがかり | 五島五郎 | 白 | | 59 | 2008 | たべものがかり | 五島五郎 | NULL | +----+------+----------------+------------+--------+ 7 rows in set (0.01 sec)
  • 1
  • 2

  



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)