« データを取得する 【SELECT】 MySQL

データを削除する 【DELETE】 MySQL »

データを変更する 【UPDATE】 MySQL

データを変更する書式

テーブルにあるデータを変更する書式は次のとおりです。

UPDATE 【テーブル名】 SET 【フィールド名1】=【値1】, 【フィールド名2】=【値2】, ・・・ WHERE 【条件文】;

データを変更してみよう

はじめにSELECT文を使って変更前のデータを確認します。

mysql> SELECT * FROM painter;
+----+----------+-------+
| id | name     | birth |
+----+----------+-------+
|  1 | モネ     |  1840 |
|  2 | ゴッホ   |  1853 |
|  3 | ドガ     |  1834 |
|  4 | ピカソ   |  1881 |
|  5 | クリムト |  1862 |
|  6 | ゴヤ     |  1746 |
+----+----------+-------+
6 rows in set (0.00 sec)

idフィールド「4」にあるピカソのデータをダリのデータに変更してみましょう。

UPDATE
mysql> UPDATE painter SET name='ダリ', birth=1904 WHERE id=4;
Query OK, 1 row affected (0.23 sec)
Rows matched: 1  Changed: 1  Warnings: 0

WHEREを忘れると・・・

条件を定義するWHEREを書き忘れると全レコードが変更の対象となり、一瞬ですべてのレコードが同じ内容に書き換えられてしまいます。 特にコマンドプロンプトから作業している時はアラートが出ることもなく、あっさり変更されてしまうので注意が必要です。
※「WHERE」の詳細は「」を参照してください

変更されたことをSELECT文で確認しましょう。idフィールド「4」のピカソがダリに変更されました。

mysql> SELECT * FROM painter;
+----+----------+-------+
| id | name     | birth |
+----+----------+-------+
|  1 | モネ     |  1840 |
|  2 | ゴッホ   |  1853 |
|  3 | ドガ     |  1834 |
|  4 | ダリ     |  1904 |
|  5 | クリムト |  1862 |
|  6 | ゴヤ     |  1746 |
+----+----------+-------+
6 rows in set (0.00 sec)

データを変更してみよう-実験編

変更時に「Warnings」が表示される

idフィールド「2」のゴッホの名前を「フィンセント・ファン・ゴッホ」に変更してみます。すると「Warnings: 1」と表示されています。

mysql> UPDATE painter SET name='フィンセント・ファン・ゴッホ', birth=1904 WHERE id=2;
Query OK, 1 row affected, 1 warning (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 1

変更後のデータがどのようになっているのかSELECT文で確認しましょう。 すると「フィンセント・ファン・ゴッホ」と変更したnameフィールドが「フィンセント・ファン」になっています。なぜでしょうか?

mysql> SELECT * FROM painter;
+----+----------------------+-------+
| id | name                 | birth |
+----+----------------------+-------+
|  1 | モネ                 |  1840 |
|  2 | フィンセント・ファン |  1904 |
|  3 | ドガ                 |  1834 |
|  4 | ダリ                 |  1904 |
|  5 | クリムト             |  1862 |
|  6 | ゴヤ                 |  1746 |
+----+----------------------+-------+
6 rows in set (0.00 sec)

テーブル作成時のフィールド構成を思い出してください。nameフィールドの型は「CHAR(10)」です。 つまり固定長文字列10文字のフィールドに、10文字を越えたデータを入れようとしました。「Warnings: 1」はフィールドに入りきらなかった文字列を切り取って処理したことを警告しています。 こういった警告がでないようテーブル作成時にしっかりとフィールドの型を定義しましょう。

CREATE TABLE painter (
id INT AUTO_INCREMENT PRIMARY KEY,
name CHAR(10),
birth INT
);

文字列の中に「'」がある場合

idフィールド「5」のクリムトの名前を「クリ'ムト」に変更してみましょう。 今回は変更する名前に「'(シングルコーテーション)」が入っているのがポイントです。今までの書式を使うと次のようになります。

UPDATE painter SET name='クリ'ムト', birth=1904 WHERE id=5;

確認してみるとおかしなところが見つかります。この書式では「'」が文字列の開始と終了をあらわす記号として扱われているため、「クリ」が文字列として扱われ「ムト'」が浮いた状態になります。

UPDATE painter SET name='クリ'ムト', birth=1904 WHERE id=5;

こんな時は文字列の開始と終了を「"(ダブルコーテーション)」に変えるか、 「'」が文字列開始・終了記号ではないことをあらわすエスケープ文字「¥」をつけ「¥'」と記述しましょう。 これで問題なく変更することができます。

UPDATE painter SET name="クリ'ムト", birth=1904 WHERE id=5;
UPDATE painter SET name='クリ¥'ムト', birth=1904 WHERE id=5;

Lesson 04

モネを1606年生まれのレンブラントに変更してみましょう。

+----+----------------------+-------+
| id | name                 | birth |
+----+----------------------+-------+
|  1 | レンブラント         |  1606 |
|  2 | フィンセント・ファン |  1904 |
|  3 | ドガ                 |  1834 |
|  4 | ダリ                 |  1904 |
|  5 | クリ'ムト            |  1862 |
|  6 | ゴヤ                 |  1746 |
+----+----------------------+-------+