2016-03-28 5 views
0

私は一意のキーハッシュタグとauto_incrementのIDを持っています。一意のキーを持つauto_incrementのIDですか?

1人のユーザーが重複するハッシュタグを送信すると、挿入されませんが、IDは増加します。

例:1人のユーザーがcoolを送信し、他はそれの後にcoolを送って、私はID 2.なぜ持っていないことを

5 amazing 
1 cool 
8 do 
3 nice 

予告?

CREATE TABLE IF NOT EXISTS `hashtags` (
    `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `hashtag` varchar(100) NOT NULL, 
    UNIQUE KEY `hashtag` (`hashtag`), 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ; 
+1

変更をコミットする前にデータベースエンジンが識別子を予約しているように見えます。新しいレコードは無効であるため(ユニーク制約に違反している)、コミットされません。これは、その列に一意でない値をコミットしたくないため、正しい動作のようです。 – David

+1

InnoDBはこれを実行しますが、MyISAMはこれを行いません。 – Barmar

+0

お友達に感謝!ジャンプすることなく順番に番号を入れて挿入することはできません。 –

答えて

0

これは、InnoDBエンジンに組み込まれている実行順序に起因する「通常の」動作です。このようにして、実行のスピードアップを図ることができます。自動インクリメントを使用すると、テーブルの次に利用可能なインデックス(ID)を格納する何らかの種類のモデルがあります。したがって、insert clauseの項目を挿入すると、エンジンはそのモデルから次の利用可能なインデックス(id)を尋ねます。そのインデックスは次のIDを望む次の人のために値をインクリメントします。したがって、この方法で実装された場合、モデルは挿入節の実行が成功したかどうかは気にしません。

+0

明示的なトランザクションはこの動作を変更しません。 –

+0

これは単なる私の考えだった考えです。 – Ance

関連する問題