不是null +唯一键=主键?

问题描述

我有一张桌子:

desc d;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| u1    | int(11) | NO   | PRI | NULL    |       |
| u2    | int(11) | NO   | PRI | NULL    |       |
| u3    | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+

代码

show create table d;
| d     | CREATE TABLE `d` (
  `u1` int(11) NOT NULL,`u2` int(11) NOT NULL,`u3` int(11) DEFAULT NULL,UNIQUE KEY `u1` (`u1`,`u2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

在这里,我使用了唯一性约束而不是空约束。它会自动转换为主键。你能解释为什么会这样吗?

即使在列约束中,

desc h;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| a1    | int(11) | NO   | PRI | NULL    |       |
| a2    | int(11) | NO   | UNI | NULL    |       |
+-------+---------+------+-----+---------+-------+

代码

show create table h;

| h     | CREATE TABLE `h` (
  `a1` int(11) NOT NULL,`a2` int(11) NOT NULL,UNIQUE KEY `a1` (`a1`),UNIQUE KEY `a2` (`a2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

在这里,a1自动转换为主键。

接受任何帮助

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)