35

ID、タイプ、所有者、説明の4つの列を持つテーブルがあります。ID は AUTO_INCREMENT PRIMARY KEY であり、次のことを行います。

ALTER IGNORE TABLE `my_table`
    ADD UNIQUE (`type`, `owner`);

もちろん、type = 'Apple' で owner = 'Apple CO' のレコードはほとんどありません。だから私の質問は、どのレコードがその ALTER TABLE の後に残る特別なレコードになるか、ID が最も小さいレコード、または最後に挿入されたものとして最大のレコードでしょうか?

4

2 に答える 2

50

最初のレコードが保持され、残りは削除されます§§ :

IGNORE標準 SQL に対する MySQL 拡張です。新しいテーブルの一意のキーに重複がある場合、または厳密モードが有効になっているときに警告が発生した場合に、ALTER TABLE がどのように機能するかを制御します。が指定されていない場合IGNORE、重複キー エラーが発生すると、コピーは中止され、ロールバックされます。IGNORE が指定されている場合、一意のキーに重複がある行の最初の行のみが使用され、他の競合する行は削除されます。正しくない値は、最も近い一致する許容値に切り捨てられます

ここで「最初」とは、ID が主キーであると仮定して、最小の ID を持つものを意味すると推測しています。

また、次の点に注意してください。

MySQL 5.7.4 の時点で、IGNOREfor 節ALTER TABLE削除され、その使用はエラーを生成します。

于 2011-03-28T08:49:51.577 に答える