2016-10-24 8 views
-2

今日私は、私のデータベースを更新する方法を改善するための提案を他の人が私に与えることができるかどうかを知りました。データベースの更新を制御する

ここに問題があります。変更する必要があるたびに新しいスクリプトを保存するファイルが1つあります。たとえば、テーブルに新しい列を追加する必要があるとします。私は更新されたアプリケーションをクライアントに送信しようと思って、それをやった後

alter table CLIENTS 
add AGE integer 

を、そして彼のデータベース上でscript1.sqlを実行するために彼に尋ねる:私はscript1.sqlと呼ばれる私のファイルに次の行を追加します。それは私のためにうまく動作します。

このファイルが大きくなり始め、クライアントが新しいアップデートを受け取る必要があるときに問題が発生します。

クライアントはscript1.sqlファイルを再度実行しますが、今度は更なる更新が行われます。彼は、データベースにすでにAGEという名前の列が存在することを示すエラーを受け取ります。

最も大きな問題は、アプリケーションのバージョンを変更したときです。アプリケーションをApplication1からApplication2に更新する場合、スクリプトをscript1.sqlからscript2.sqlに変更します。

私のクライアントは、競合することなく正しいバージョンに到達するために、両方を実行する必要があります。 script1.sqlのほとんどすべてが彼のデータベースですでに処理されているので、彼はまた多くのエラーを取得します。

私が欲しいのは、葛藤に直面する機会をなくすことです。このプロセスは私のために働いていますが、いつも何らかの問題を引き起こしています。だから、誰かがどのようにしてよりうまくいくか考えているなら、私を助けてください。それがすでに作成されていない場合にのみ、ユーザーテーブルを作成します

CREATE TABLE IF NOT EXISTS users ... 

+0

ためEXISTSを使用する方法の詳細については、グーグルにする必要があります。 github.io/)を実行して、大規模なスクリプトを実行可能な小さなスクリプトに分割し、その実行をプロトコル化することで、2回目と3回目の新しいスクリプトのみを実行します –

答えて

0

通常SQLは、次のような文を書くことができますので、例えばIF EXISTS(もIF NOT EXISTS)と呼ばれるものを提供します。

通常、すべてのステートメント(列の名前の変更などの更新を含む)に追加することができるこのバリアントがあります。

テーブルがすでに追加されている(または列が更新されたなど)場合、そのSQLコマンドを再度実行しようとしません。つまり、同じファイルを好きなだけ何度も何度も実行できます。

(注:これは冪等と呼ばれている)://関数dbup

あなたは[関数dbup](httpsのようなものが必要SQLサーバ

関連する問題