【PHP講座19】SQL編6 -データの更新-

PHP講座

前回は、テーブルに新たなデータを挿入するINSERT文を解説した。

また、ちょっとオマケでオートインクリメントについても軽く触れた。

INSERT文はそこまで難しくなかったと思うが、不安な方はしっかり復習しておこう。

以下がその記事だ。

【PHP講座18】SQL編5 -データの挿入- | Shino’s Mind Archive

さて、今回はまた新たな構文だ。

テーブルのデータを、今度は別の値に変更する更新について解説する。

使うのは、UPDATE文というものだ。

ちょっと気を付けなければならないこともあるので、慎重に進めていこう。

スポンサーリンク

データの更新を行うUPDATE文

さて、これまでやってきたことは、元々あるデータから必要なデータを持ってくるSELECT文、そして新たにデータを追加するINSERT文だった。

そのほか、元々あるデータの、特定の列の値を更新する、といったことも可能だ。

それを行うのが、今回解説するUPDATE文だ。

UPDATE文の構文

先に、構文を見てもらおう。

UPDATE テーブル名 SET 列名 = 新しい値 WHERE 条件;

こんな形になる。

まず、いつものようにテーブル名で対象となるテーブルを指定する。

その次に、どの列に、どんな値で上書きするかを指定してあげる。

最後に、WHEREで値を更新するデータの条件を指定する、という形だ。

WHEREに書けるのは、SELECTで解説したものと基本的に同じだ。

等しい場合のイコール、不等号など、条件に合わせて使い分けよう。

UPDATE文具体例

簡単に具体例を見てみよう。

前回も触った、userテーブルで見ていこう。

まず、今の状態が以下の通りだったとしよう。

ここまでの例通りに進めていれば、この形になっているはず。

user_iduser_namepssword
1user1pass1
2user2pass2
3user3pass3
4user4pass4
5user5pass5
6user6pass6
userテーブル

さて、ここで1行目にある「user1」というユーザーが、ユーザー名を「new_user1」に変更したとしよう。

これを、データベースに反映させるには、以下のSQLを実行すれば大丈夫だ。

UPDATE user SET user_name = 'new_user1' WHERE user_id = 1;

まず、変更する対象のテーブルはuser

そのuser_name列に、新たに「new_user1」というデータをセットする。

そのための条件が、user_id列が1である、ということだ。

テーブルを見ると、user_idが1であるような行は1行目だけだ。

よって、そこのuser_name列が変更され、最終的に以下の形になる。

user_iduser_namepssword
1new_user1pass1
2user2pass2
3user3pass3
4user4pass4
5user5pass5
6user6pass6
userテーブル(UPDATE後)

UPDATE文の注意点

さて、ここで注意点を。

今回、WHERE句で条件を指定し、合致した行のデータを変更すると解説した。

例では1行だけ合致したので、変更された行も1行だけだった。

しかし、もちろん複数合致すれば、その合致した複数行全てで変更が行われる

つまり、条件の指定に失敗すると、不必要な更新までされてしまうので気を付けよう。

また、もう一つ気を付けるべきが、WHERE句丸々忘れてしまうこと。

これをやってしまうと、テーブル内の全ての行に対しての変更になってしまう。

意図的であれば問題ないのだが、条件には常に気を付けよう。

ちょっと、こちらも具体例で試してみよう。

アクセス確認用に作ったaccess_testテーブルで使ってみる。

まず、元の形は以下のようになっているとしよう。

idname
1データ1
2データ2
3データ3
4データ4
5データ5
access_testテーブル

では、まず複数行の変更を。

WHEREで、id <= 3…つまり、id列の値が3以下と指定してみよう。

データは分かりやすく、name列を「変更しました」という文字列に変更してみる。

UPDATE access_test SET name = '変更しました' WHERE id <= 3;

これを実行すると、以下のように変化する。

idname
1変更しました
2変更しました
3変更しました
4データ4
5データ5
access_testテーブル(UPDATE後1)

条件に合致した行全てが変わっていることが分かると思う。

では、最後に全行変更だ。

name列を、今度は「全行変更しました」と変えてみよう。

UPDATE access_test SET name = '全行変更しました';

これを実行すると、今度は…

idname
1全行変更しました
2全行変更しました
3全行変更しました
4全行変更しました
5全行変更しました
access_testテーブル(UPDATE後2)

このように、入っているデータ全てに変更が反映される。

繰り返しになるが、意図的にする場合でない限り、条件は必ずつけるよう気を付けよう

おわりに

今回は、元々テーブルに入っているデータの値を変更するUPDATE文を解説した。

誤った条件を指定しないよう、細心の注意を払いながら使っていこう。

さて、次回はSQL編最後となる。

ラストは、特定の行を削除するDELETE文を解説する。

使い方はSELECT文に似ているが、気を付ける点は今回のUPDATE文に似ている

そこまで解説が終われば、ようやくPHP側に戻って、色々とアクセスしてみよう。

コメント

タイトルとURLをコピーしました