CLOSE

みなさん、こんにちは!

このブログは、「PowerBuilder ってなに?」「PowerBuilder って何ができるの?」という疑問に、IT 用語の解説もしつつ、簡単に分かりやすくお答えすることをモットーにしています。
気になる方はぜひ続きを見てみてくださいね。

登場キャラクター紹介

ねこぴ
PowerBuilder レクチャーのキャラクター。
(猫に見えるが)PowerBuilder の先生。
ゆる~く楽しく!がモットー。

ちまき
PowerBuilder をこれから学びたい開発初心者。
ITの知識はちょっとあるようなないようなレベル。

動画でも PowerBuilder について学習できます!

YouTube では、この PowerBuilder 入門シリーズの動画版を公開しています!

動画版では、実際の PowerBuilder の画面操作をしているところを確認しながら進められるので、より理解力が深まります。
あわせてぜひご視聴ください!

入門シリーズ再生リストはこちらから!

最近、食後のデザートで氷菓にドハマり中だにゃ。
アイスを何本食べたかもう分かんないにゃ。

食後のアイスは格別ですよね。
私は変わり種アイスを食べましたよ!ほやアイスに焼きナスアイス・・・
あ、なんかねこぴ先生って焼きナス似合いますね!

どゆこと・・・?
ではここはスルーさせてもらって今日の授業だにゃ。

さっそく PowerBuilder の勉強を始めましょうか!
前回は 「基礎的なアプリを作ってみよう(3)」 でしたよね。

更新特性の指定の「Update/Delete キーの Where 句」について説明したにゃ。
今回は更新特性の指定の「キーカラムの更新」について解説していくにゃ。

さて、第 4 弾のアプリ作成 4 回目です^^

どんなアプリだったかというと、人の名前や所属番号をデータベースから取得し、それを編集し、最後は更新ボタンをクリックしてデータベースに反映させるというものです。
Update / Delete キーの Where 句まで終わっている方は下の画像まで進んでいるはずです。

特に前回から画面周りに変化はないですね\(^o^)/

さっそくですが、更新特性の指定の解説の続きを・・・(^^)
今回のテーマは「キーカラムの更新」です。
この赤枠線部分ですね。

そもそもキーカラムというのは、そのテーブルで一意になるカラムです。
一意というのはその値は不変であり、それだけで値を特定できるという意味で、例えば学籍番号とかですね。
2 年 2 組 1 番というと誰か分かるようになっていますよね。
またその番号に該当する人は 1 人しかいません。
つまり一意のカラムというのは、そのカラムさえあればどのデータか特定できるカラムということですね。
こういったカラムを『キーカラム』、もしくは『主キー』と呼んだりもします。

ちなみに一意のカラムは、1 つの場合もありますが複数カラムの組み合わせの場合もあります。
例えば、クラスと番号だけで生徒が特定できる場合、2 組 (クラス) 2 番 (番号) と 2 つのカラムの組み合わせが一意であるということになります。
これを『複合キー』といいます。

「キーカラムの更新」は一意のカラムが更新された場合、どのようにデータを更新するかを設定します。
なぜこういった設定が必要なのか?
上記内容を踏まえた上で「Delete 文の後 Insert 文を使用」と「Update 文を使用」について説明したいと思います。「Delete 文の後 Insert 文を使用」に関しては以下の例を考えてみましょう。

たとえば右のような生徒テーブル (A : 学年、B : クラス、C : 名前、D : 成績) があります。
事前にお伝えしますが、このテーブルにおける主キーは『 A の学年と B のクラス』になります。 
A と B がどちらも分かることで、C の名前が誰か特定できるからです。
こちらが先ほど説明した複合キーというやつです(^^)/

それでは、ここで・・・この学校で 1 組 3 番のねこぴくんが 2 組に編入するとします。

やだー!

誰や今いやー!いうたやつ!!!!焼きナスやないか!

「番号」が五十音順に採番されている場合、2 組内の「番号」の振り直しが必要になりますよね。
このような想定です。

このケースで振り直しをするには、2 つの UPDATE 文が必要ですね。

[ねこぴを 2 組に]
UPDATE 生徒テーブル SET A = 2 WHERE A = 1 AND B = 3;

[やたべを 4 番に]
UPDATE 生徒テーブル SET B = 4 WHERE A = 2 AND B = 3;

ここで上記の SQL の解説です!(^^)
「UPDATE 生徒テーブル」というのは、生徒テーブルというテーブルに対して更新をします、ということですね。
次にねこぴとやたべのそれぞれで「SET」という文字が見えますが、これはそれぞれ「A を 2」、「B を 4」に値を変更してください、という意味です。
最後は条件の WHERE 句ですね。
例えば、ねこぴの場合は「A が 1」かつ「B が 3」という値 (行) の部分、という意味合いになります。

つまり [ねこぴを 2 組に] する場合の SQL は、生徒テーブルの A = 1 かつ B = 3 のねこぴの [番号] A に 2 をセットする、という意味になります。

すると困った事態が発生します。
一時的に「A が 2、B が 3」となるデータが 2 件できてしまうのです。
先ほど説明した通り、A、B の組み合わせが主キーに設定されているため、[ねこぴを 2 組に] の処理の時点で 「キー重複エラー」 になります。
更新の順番を変えればいいのですが、自動でそこまでできる機能もなく、また今回は 2 件のみの更新ですが、大量のデータになってくると順番を気にして更新するのは面倒です。

そこで活躍するのが「Delete 文の後 Insert 文を使用」です。
その名の通り、データを「更新」するのではなく、一度データを削除してから改めてデータを追加します。

[ねこぴを削除]
DELETE FROM 生徒テーブル WHERE A = 1 AND B = 3;

[やたべを削除]
DELETE FROM 生徒テーブル WHERE A = 2 AND B = 3;

[ねこぴを追加]
INSERT INTO 生徒テーブル VALUES (2, 3, ‘ねこぴ’, 1);

[やたべを追加]
INSERT INTO 生徒テーブル VALUES (2, 4, ‘やたべ’, 5);

このように SQL 文を内部的に発行してくれるのです。
これならデータを追加するときに 2 組 3 番のデータは削除されているため重複は起こりません。
キーを更新できる処理では上記のようなことが起こり得るので、「Delete 文の後 Insert 文を使用」に設定しておけば安心です。

これは便利だにゃ!

ただし!注意点があります。
発行される INSERT 文はデータウィンドウに取得されているデータから作成されます。
つまり、データソースで選択していない項目については NULL 値となり、もし、その項目が NULL 値を許容していない場合は更新時にエラーが発生します。
このため、こちらのオプションを利用してデータウィンドウの更新を行う場合は、データソースでテーブルのすべての項目を選択することをお勧めします。

お次は「Update 文を使用」ですね(^^)/
もう察している方もおられるかな?と思いますが・・・
こちらに関しては、上記で説明したような「一時的にキーが重複する場合」を考慮せずに Update 文でデータを更新する、といった動作になります。
一度データを削除するのではなく、変更された値でそのまま更新するイメージですね。

これで更新特性の指定の解説に関しては終了です^^

よく理解できました!
更新 1 つでも状況に応じて方法を変えていくのですね。

そうにゃね。
更新特性の指定はこれである程度理解できたかにゃ?

それでは、最後におさらい!

Delete 文の後 Insert 文を使用・・・複数データの更新中に主キーが重複してしまう場合を考慮し、重複が起きないように対象のデータを一度削除してから追加する

Update 文を使用・・・データを削除することなく、 Update 文でデータを更新する


こちらのブログシリーズ次回の記事はこちら↓↓

入門シリーズ全記事のまとめ

PowerBuilder 入門シリーズの全記事を、まとめページからもご覧いただけます!

PowerBuilder入門シリーズまとめ

いかがでしたでしょうか?
より詳しく PowerBuilder に関してお知りになりたい方は、Appeon 社の製品サイトをチェック!

x instagram facebook youtube