1

MySQL を使用して、(たとえば) 3 つのキー (1 つのプライマリ、自動インクリメント、および列に 2 つの一意、たとえば「コード」と「名前」) を持つテーブルがある場合、どの一意性を (効率的に) 知ることができますか?挿入時に制約に違反しましたか?

エラー#1062 - Duplicate entry 'Value' for key 2が表示されますが、キー 2 が「名前」列ではなく「コード」列のキーであることをどのように確認できますか?

このアプリケーションを複数の開発者で開発していますが、同じ順序で制約をテーブルに追加しない日を防ぎたいので、私のマシンの 2 番目のキーは別のマシンの 3 番目のキーになり、その逆も同様です。

関連する正確な列名へのマッピングは実際には必要ありません。キー名へのマッピングだけで十分です。

4

2 に答える 2

1

ボビーが示唆しているように、SHOWインデックスは、関連するキーインデックスを含む結果セットを返します。その他の例については、このページを確認してください。

SHOW INDEXES FROM products_to_categories
WHERE Key_name = "PRIMARY"
AND Seq_in_index = '2';

+------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table                  | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| products_to_categories |          0 | PRIMARY  |            2 | category_id | A         |           0 |     NULL | NULL   |      | BTREE      |         |
+------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

ただし、これには、次の回避策を超えない場合でも、おそらく同じ量のコードが必要になります。

挿入した値がテーブルの既存の行と衝突することを確認してください。

SELECT code FROM myTable WHERE code = 'the_value_you_tried_to_insert';

また

SELECT name FROM myTable WHERE name = 'the_value_you_tried_to_insert';

あまりエレガントなソリューションではありませんが。

于 2009-09-28T09:04:03.407 に答える
0

たぶんこれが役立ちます:

SHOW INDEX FROM arbeit

ボビー

于 2009-09-28T09:14:07.863 に答える