0

MSSQL DB を MYSQL に移植したいクライアントがいます。ID はすべて負の整数です。-200000000 から始まる負の INT を使用していくつかの MySQL テーブルを作成し、新しいレコードごとに通常のように +1 をインクリメントする必要があります

4

1 に答える 1

0

自動インクリメント フィールドを負の数で使用することはできません。MySQL ドキュメントから:

ユーザーが列に負の値を割り当てた場合、または指定された整数型に格納できる最大整数よりも値が大きくなった場合、自動インクリメント メカニズムの動作は定義されません。

ご希望の ID + 200000000 を MySQL に保存することをお勧めします。しかし、おそらくあなたはすでにそのことを考えていて、負の数を ID として保存したいだけだと思います。クライアントは ID を生成する必要があり、ID 生成が同時実行の問題に対して安全であることを確認する必要があります。解決策の 1 つを次に示します (免責事項: テストしていないため、多くの同時ユーザーにとってはあまり効率的ではない可能性があります)。

LOCK TABLE MyTable READ; -- Make sure no one else can use the table
SELECT MAX(ID) FROM MyTABLE; -- Find out what the current ID is
INSERT INTO MyTable(ID, OtherColumn) VALUES(-100, "x"); -- Derive the ID from the previous value
UNLOCK TABLES; -- Allow others to use table again

MyTable.ID列に署名する必要があります。

于 2013-04-07T02:45:19.593 に答える