ID、タイプ、所有者、説明の4つの列を持つテーブルがあります。 IDはAUTO_INCREMENT PRIMARY KEYであり、次の操作を行います。
ALTER IGNORE TABLE `my_table`
ADD UNIQUE (`type`, `owner`);
もちろん、type = 'Apple'およびowner = 'Apple CO'のレコードはほとんどありません。だから私の質問は、そのALTER TABLEの後に残る特別なレコード、つまり最小のIDを持つレコード、または最新の挿入として最大のレコードになるでしょうか?
最初のレコードは保持され、残りは削除されます §§ :
IGNORE
は、標準SQLのMySQL拡張です。新しいテーブルの一意のキーに重複がある場合、または厳密モードが有効になっているときに警告が発生した場合、ALTER TABLEの動作を制御します。IGNORE
が指定されていない場合、重複キーエラーが発生するとコピーが中止され、ロールバックされます。IGNORE
が指定されている場合、一意のキーに重複がある行のfirst行のみが使用され、他の競合する行はdeleted。不正な値は、最も近い一致する許容値に切り捨てられます
ここで「最初」とは、IDが主キーであると想定して、最小のIDを持つものを意味すると思います。
また注意してください:
MySQL 5.7.4以降、
ALTER TABLE
のIGNORE
句はremovedであり、これを使用するとエラー。
あなたの問題は、ALTER IGNOREが廃止されたまさにその理由の1つであるようです。
これは、ALTER IGNOREの非推奨に関する MySQLノート からのものです。
"この機能は正しく定義されていません(最初の行は何ですか?)。レプリケーションで問題が発生し、一意のインデックス作成のオンライン変更が無効になり、外部キーで問題が発生しました(親テーブルで行が削除されました) 。 "