前回は、テーブルに新たなデータを挿入する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_id | user_name | pssword |
---|---|---|
1 | user1 | pass1 |
2 | user2 | pass2 |
3 | user3 | pass3 |
4 | user4 | pass4 |
5 | user5 | pass5 |
6 | user6 | pass6 |
さて、ここで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_id | user_name | pssword |
---|---|---|
1 | new_user1 | pass1 |
2 | user2 | pass2 |
3 | user3 | pass3 |
4 | user4 | pass4 |
5 | user5 | pass5 |
6 | user6 | pass6 |
UPDATE文の注意点
さて、ここで注意点を。
今回、WHERE句で条件を指定し、合致した行のデータを変更すると解説した。
例では1行だけ合致したので、変更された行も1行だけだった。
しかし、もちろん複数合致すれば、その合致した複数行全てで変更が行われる。
つまり、条件の指定に失敗すると、不必要な更新までされてしまうので気を付けよう。
また、もう一つ気を付けるべきが、WHERE句丸々忘れてしまうこと。
これをやってしまうと、テーブル内の全ての行に対しての変更になってしまう。
意図的であれば問題ないのだが、条件には常に気を付けよう。
ちょっと、こちらも具体例で試してみよう。
アクセス確認用に作ったaccess_testテーブルで使ってみる。
まず、元の形は以下のようになっているとしよう。
id | name |
---|---|
1 | データ1 |
2 | データ2 |
3 | データ3 |
4 | データ4 |
5 | データ5 |
では、まず複数行の変更を。
WHEREで、id <= 3
…つまり、id列の値が3以下と指定してみよう。
データは分かりやすく、name列を「変更しました」という文字列に変更してみる。
UPDATE access_test SET name = '変更しました' WHERE id <= 3;
これを実行すると、以下のように変化する。
id | name |
---|---|
1 | 変更しました |
2 | 変更しました |
3 | 変更しました |
4 | データ4 |
5 | データ5 |
条件に合致した行全てが変わっていることが分かると思う。
では、最後に全行変更だ。
name列を、今度は「全行変更しました」と変えてみよう。
UPDATE access_test SET name = '全行変更しました';
これを実行すると、今度は…
id | name |
---|---|
1 | 全行変更しました |
2 | 全行変更しました |
3 | 全行変更しました |
4 | 全行変更しました |
5 | 全行変更しました |
このように、入っているデータ全てに変更が反映される。
繰り返しになるが、意図的にする場合でない限り、条件は必ずつけるよう気を付けよう。
おわりに
今回は、元々テーブルに入っているデータの値を変更するUPDATE文を解説した。
誤った条件を指定しないよう、細心の注意を払いながら使っていこう。
さて、次回はSQL編最後となる。
ラストは、特定の行を削除するDELETE文を解説する。
使い方はSELECT文に似ているが、気を付ける点は今回のUPDATE文に似ている。
そこまで解説が終われば、ようやくPHP側に戻って、色々とアクセスしてみよう。
コメント