2017-01-01 3 views
1

古いParadoxデータベースをMySqlに移行する必要があります。 Paradoxデータベースには、Null値を持つ複合主キーが含まれています(合成キーは3,4フィールドで構成され、1つまたは2つのフィールドにNull値を持つことができます)。問題はpkのnull値がMySqlで許可されていないことです。パラドックス(いくつかのテーブルでは5百万行)でヌル値を直接置き換えることは不可能です。どうすればできますか?MySqlのnull主キーを置き換える方法

ありがとうございます。

+0

Paradoxテーブルの構造は、NULLを許可しません。他のヌル値と一致しない値。ほとんどのデータベースにNULLがある場合、Paradoxには空白があります。 MySQLには空白がないので、各データ型に対して空白として使用する値を定義する必要があります。 - http://stackoverflow.com/questions/10228123/how-does-paradox-manage-null-and-empty-values/13282514#13282514も参照してください。 –

答えて

0

I(b)はUNIQUE-を使用する(a)にnull値を置き換えるために必要となるPKを、使用/な行に

を無視

、あなたはMySQLのDBに2つの選択肢があると思いますPKの代わりにヌル値を許可する制約オプション(A)については

私は、主キー制約を無効にし、データをインポートすることをお勧めしたいです。必要な修正をすべて行い、主キーを再度アクティブにします。可能なPK列にNULL値を持つ行を削除する場合は、挿入時にPK制約に違反する行をスキップするIGNOREキーワードを使用することもできます(primary key and unique index constraints参照)

オプション(b) 、

は、そのままデータをインポートすることができます。その後、修正を行うか、そのままデータを残すことができます。

0

PKでnullが指定されているとすると、それらは一意である必要はないことを意味し、任意の値である可能性があるため、任意の値をNULLに割り当てます。これを行うには

、次のようにMySQLのテーブルにトリガーを作成します。

delimiter // 
create trigger trig_pk_col_1 before insert on mytable 
for each row 
begin 
    set new.pk_col_1 = coalesce(new.pk_col_1, 999); 
    set new.pk_col_2 = coalesce(new.pk_col_2, 999); 
    -- etc for other 
end;// 
delimiter ; 

私は、任意の非ヌル値として999選ばれましたが、あなたは何を選ぶことができます。

論理を洗練させる必要がある場合は、好きなようにコーディングすることができます。

はまた、私は簡潔にするためcoalesce()を使用しますが、ご希望の場合は、代わりに、より冗長ifを使用することができます。つまり、A、他のほとんどのデータベース設計によって定義されているよう

if new.pk_col_1 is null then 
    set new.pk_col_1 = 999; 
end if; 
-- etc 
関連する問題