このページについて
このページではMySQLのUPDATE構文を使ってテーブルを更新する方法を解説しています。複数/単一の更新どちらも解説していきます。
UPDATE構文
まずはUPDATE構文の簡単な解説から。UPDATEは指定テーブル内の指定データ(もしくは全カラムの全データ)を更新する機能を持っています。単体を指定してピンポイントに更新することも、カラムを指定して一括で更新することもできます。
基本的な構文は以下の通りです。
update テーブル名 set カラム1=カラム1の内容,カラム2=カラム2の内容;
テーブル名はそのままですね。更新したいテーブル名を指定します。そしてカラム1とカラム1の内容について。ここもそのまま見たまんまなんですが、カラム1は必須です。そしてそれ以降のカラムは省略可能です。
insert構文との違い
指定したテーブルに対してデータを挿入するinsertは「常に新しいレコード(行)を作る」んですが、updateは「すでにあるレコードに対して操作をする」という違いがあります。それぞれ使い分けましょう。
一括更新とエラー
このUPDATEは基本的には複数のカラムを更新する機能があるんですが少々厄介な使い分けが必要です。
- 「全てのレコード」に対する「複数カラムの更新」は機能します。
- 「特定の複数レコード」に対する「複数カラムの更新」は機能しません。
どういうことかというと、以下に例を挙げます。まずは「複数カラムを全てのレコードに対して更新する」方からです。
次に、「id2のtype2をひこうに修正し、id4のtype2をドラゴンに修正」をやるとこうなります。
このようにエラーが出ます。実際、phpMyAdminで複数レコードの複数カラムに対して操作を行った場合、表示されるものはupdateを個別で行ったものになります。
特定カラムのみUPDATE
例えば行(レコード)が3つ、そしてカラム1/2/3とあるテーブルで、レコード2のカラム2のみを更新したい場合はこの書き方をします。
update テーブル名 set カラム2=カラム2の内容 where レコード2;
テーブル名・カラム2などはそのままですね。次に出てきたのがwhereです。これは他でも使うんですが、場所を指定する時に使います。その後に場所を特定する要素を書くんですが、これは「カラム名」でも「カラムの中身」でもOKです。もう少しwhereのみ詳しい書き方をすると、こういうテーブルがあったとします。
このテーブルに対して、「ギャラドスのatkを100に修正したい」とします。その場合idを指定しても良いんですが、数多く登録していくとidなんてわからなくなることが多々あります。なので「ギャラドス」を検索ワードとして設定します。その場合の書き方は以下の通りです。今回はlistというテーブル名に対してギャラドスを含むnameを検索するとします。
update list set atk=100 where name='ギャラドス';
これを実際に実行すると以下の通り。
上の変更前のテーブルと見比べて分かる通り、ギャラドスのatkのみが90から100に修正されました。whereを省略すると上のカメックスのatkまで100になるので、こういうピンポイントな修正がしたい時はwhereを使用しましょう。
特殊な更新
ここからは通常の更新での使い方をベースに、ちょっと工夫した使い方を紹介していきます。
数値を増やす
カラム内にある既存の数値を増やしたり減らしたり、割ったりすることもできます。単純な足し算で紹介すると以下の通りです。
このテーブルに対して、以下のupdateを行います。
update num set c1=c1+100,c2=c2+1;
実行したものがこちら。
値の大小を取得する
既存カラム内の数値を測定し、条件に一致した場合のみ更新という書き方をしてみます。今回は「c1が99以上なら値を0にする」というものを実行してみます。使うテーブルは以下。
使うupdateは以下。
update num set c1=0 where c1>99;
c1が100から0に変更されました。c1>99という書き方でc1が99より大きいという条件を与えています。>は「以上」なので、99は含まれません。
複数条件
ここまでいろんな条件を与えてきましたが、最後に複数の条件を与えてみます。使うテーブルは以下。
このテーブルに対して、①カメックスとギャラドスにメガ進化を付与する。②フリーザーとパルキアに伝説を付与する。この二点を実行したいと思います。どちらもetcカラムに付与します。なお他にもメガ進化するポケモンとか伝説のポケモン等は居ますが、今回は名前を検索ワードとして使います。その方が分かりやすいかなと思うので。使う文は以下の通りです。
update list set etc='メガ進化' name ='カメックス' or name='ギャラドス';
まずはこれでnameにカメックスが含まれているレコードのetcカラムと、nameにギャラドスが含まれているレコードのetcカラムにメガ進化を入れます。
次に伝説を付与するんですが、これも同じような感じです。
update list set etc='伝説' where name='フリーザー' or name='パルキア';
ここからはおまけですが、whereを使えば「特定の〇〇を含むカラム」を一気に探し出すことができます。例えばetcカラムにすでに伝説が付与されているカラムを探し出したい場合、selectで以下のように実行します。
where orを使えばtype1かtype2に「みず」タイプを持つポケモンのみ抽出することも簡単です。この辺りはwhereの使い方やselectの使い方を参照してください。
まとめ
update構文は何も指定しなければ全てのカラムを、更新場所を指定すれば特定のカラムのみをピンポイントに更新することができます。insertとは「新しいレコードを作るか、元あるレコードを操作するか」の違いがあるので、それぞれ用途に応じて使い分けましょう。
- MySQLの用語集
- MySQLでよく使う・よく見る用語集です。知っておくと検索とかも便利になります。
- ローカル環境の整え方
- MAMPを使ってローカル環境を整える方法を紹介。
- MySQLデータベースに接続する方法
- MAMPのデータベースと、レンタルサーバーのデータベースに接続する方法
- MySQLの基本コマンド
- MySQLへ接続してまず使う基本コマンドの一覧です。
- データベースの作成
- ターミナル・phpMyAdminでのデータベースの作成方法をそれぞれ解説。
- テーブルの作成
- ターミナル・phpMyAdminのそれぞれでテーブルを作成する方法と、作成と同時にPRIMARYやUNIQUEの付与などの方法を紹介。
- キーの種類と機能
- カラムに設定出来るキーの種類と機能を解説。
- 正規化
- リレーショナルデータベースを使う上で必須となる正規化について。データの追加や更新などで手間を省く方法としても使えます。
- ALTER TABLE
- ALTER TABLE構文を使って作成済みのテーブルに対して操作を行う。PRIMARYの付与やカラムの移動・名前変更・追加・削除なども行えます。
- INSERT構文
- INSERT構文を使って指定テーブルにデータ(行)を挿入する方法の解説です。
- UPDATE構文
- UPDATE構文を使って指定テーブルのカラムを一括更新、もしくは指定レコードの指定カラムのみを更新する方法の解説です。
- SELECT構文
- SELECT構文を使って指定したテーブルからデータを取得する方法の解説です。
- JOIN
- JOINを使ってテーブル同士を結合する方法の解説です。