web-dev-qa-db-ja.com

MySql-デフォルトで主キーは一意ですか?

列をMySqlの主キーとして定義する場合、デフォルトで一意のキーでもありますか、それとも一意のキーとして定義する必要がありますか(一意にする場合)?

私はこの質問を見ました 主キーと一意キーの違いは何ですか 2つの違いを説明しますが、私の質問には正確に答えていません。 PKはデフォルトでUKですか、それとも明示的に定義する必要がありますか。

29
Roee Gavirel

主キーは常に一意です すべてのSQLで。明示的にUNIQUEとして定義する必要はありません。

補足説明:テーブルにはプライマリキーを1つだけ持つことができ、null値は許可されません。また、テーブルには主キー制約を1つだけ持つことができます(主キーを作成するポイントはテーブル内の行を一意に識別することです)が、テーブルには複数の一意キー制約を指定できます。

例:

主キーとしてEmpIDを持ち、一意のキーとしてEmpPhoneNoを持つ従業員詳細テーブル。

37
Rahul Tripathi

主キーは、定義により常に一意です。 MySQLだけではありません。したがって、追加の一意のキーは必要ありません。

4
Jakub Matczak

複合キーは混乱を招く可能性があることに注意してください。実際、主キーは複合キーになる可能性があり、DESCRIBEはすべての複合キーコンポーネントを主キーとして表示します:

> DESCRIBE foobar;
+----------------------+------------------+------+-----+---------+-------+
| Field                | Type             | Null | Key | Default | Extra |
+----------------------+------------------+------+-----+---------+-------+
| column_A             | int(10) unsigned | NO   | PRI | NULL    |       |
| column_B             | int(10) unsigned | NO   | PRI | NULL    |       |
+----------------------+------------------+------+-----+---------+-------+

しかしながら SHOW CREATE TABLEは現実を示します:

> SHOW CREATE TABLE foobar;
+--------+---------------------------…+
| Table  | Create Table              …|
+--------+---------------------------…+
| foobar | CREATE TABLE `foobar` (
  `column_A` int(10) unsigned NOT NULL,
  `column_B` int(10) unsigned NOT NULL,
  PRIMARY KEY (`column_A`,`column_B`),
  KEY `column_B` (`column_B`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+---------------------------…+