3

重要な場所でテーブルが重複しないようにするための標準的な方法を考え出したいと思います。ほとんどの場合、重複は 1 つではなく変数の組み合わせです。主キーは各フィールドの一意の ID であるため、使用できません。私がやっていることは、最初にテーブルをクエリし、次に問題の組み合わせの行数が0の場合、挿入を行うことです. ただし、一意性を強制するために複数のフィールドに一意のキーを設定できるはずだと読みました。INSERT IGNORE は良い可能性に思えますが、複数の列で無視する必要があります。

例として、フィールド follower および followed を使用すると、複数の followers および followed をテーブルに含めることができますが、両方の組み合わせは 1 つのみにする必要があります。

最初に複数のフィールドに対して一意のキーを作成し、次に重複を防ぐ SQL 挿入クエリを実行する構文を提案できる人はいますか? どうもありがとう。

4

2 に答える 2

17

これらの列に複数列のインデックスを作成し、一意性を強制するだけです。MySQL のマニュアル ( http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html ) を参照してください。

たとえば、列id(一意の主キー)colAとを含むテーブルでは、次colBのように実行します。

ALTER TABLE table ADD UNIQUE KEY (colA,colB)

これがそれです: これら 2 つの列を組み合わせた重複するエントリにつながる INSERT は、通過する代わりに MySQL エラーを返すようになりました。を使用するINSERT IGNOREと、実行がこの一意の制約に違反する場合でも MySQL エラーはスローされず、INSERTステートメントは静かに無視されます。

于 2012-04-30T20:03:10.917 に答える
3

使用できるテキストタイプの一意のインデックスを作成するには

CREATE UNIQUE INDEX indexname ON `tablename` (columnname (100));

(100) ここで、columnname が最初の 100 バイトのみを一意としてチェックするように mysql に指示した後、(4) を長さとして指定した場合、両方

hello
hello world

インデックスと同じであり (両方とも実際hellにはインデックス ツリーにあります)、mysql はそれらをテーブルに挿入することを許可しません。

ここを参照してくださいhttp://dev.mysql.com/doc/refman/5.0/en/create-index.html

于 2012-04-30T20:11:57.880 に答える