古いParadoxデータベースをMySqlに移行する必要があります。 Paradoxデータベースには、Null値を持つ複合主キーが含まれています(合成キーは3,4フィールドで構成され、1つまたは2つのフィールドにNull値を持つことができます)。問題はpkのnull値がMySqlで許可されていないことです。パラドックス(いくつかのテーブルでは5百万行)でヌル値を直接置き換えることは不可能です。どうすればできますか?MySqlのnull主キーを置き換える方法
ありがとうございます。
古いParadoxデータベースをMySqlに移行する必要があります。 Paradoxデータベースには、Null値を持つ複合主キーが含まれています(合成キーは3,4フィールドで構成され、1つまたは2つのフィールドにNull値を持つことができます)。問題はpkのnull値がMySqlで許可されていないことです。パラドックス(いくつかのテーブルでは5百万行)でヌル値を直接置き換えることは不可能です。どうすればできますか?MySqlのnull主キーを置き換える方法
ありがとうございます。
I(b)はUNIQUE-を使用する(a)にnull値を置き換えるために必要となるPKを、使用/な行に
を無視
、あなたはMySQLのDBに2つの選択肢があると思いますPKの代わりにヌル値を許可する制約オプション(A)については、
私は、主キー制約を無効にし、データをインポートすることをお勧めしたいです。必要な修正をすべて行い、主キーを再度アクティブにします。可能なPK列にNULL値を持つ行を削除する場合は、挿入時にPK制約に違反する行をスキップするIGNORE
キーワードを使用することもできます(primary key and unique index constraints参照)
オプション(b) 、
は、そのままデータをインポートすることができます。その後、修正を行うか、そのままデータを残すことができます。
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
Paradoxテーブルの構造は、NULLを許可しません。他のヌル値と一致しない値。ほとんどのデータベースにNULLがある場合、Paradoxには空白があります。 MySQLには空白がないので、各データ型に対して空白として使用する値を定義する必要があります。 - http://stackoverflow.com/questions/10228123/how-does-paradox-manage-null-and-empty-values/13282514#13282514も参照してください。 –