列をMySqlの主キーとして定義する場合、デフォルトで一意のキーでもありますか、それとも一意のキーとして定義する必要がありますか(一意にする場合)?
私はこの質問を見ました 主キーと一意キーの違いは何ですか 2つの違いを説明しますが、私の質問には正確に答えていません。 PKはデフォルトでUKですか、それとも明示的に定義する必要がありますか。
主キーは常に一意です すべてのSQLで。明示的にUNIQUEとして定義する必要はありません。
補足説明:テーブルにはプライマリキーを1つだけ持つことができ、null値は許可されません。また、テーブルには主キー制約を1つだけ持つことができます(主キーを作成するポイントはテーブル内の行を一意に識別することです)が、テーブルには複数の一意キー制約を指定できます。
例:
主キーとしてEmpIDを持ち、一意のキーとしてEmpPhoneNoを持つ従業員詳細テーブル。
主キーは、定義により常に一意です。 MySQLだけではありません。したがって、追加の一意のキーは必要ありません。
複合キーは混乱を招く可能性があることに注意してください。実際、主キーは複合キーになる可能性があり、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 |
+--------+---------------------------…+