【问题标题】:mysql changing unique key to primary (mariadb)mysql将唯一键更改为主(mariadb)
【发布时间】:2018-06-04 15:26:42
【问题描述】:

我有我的表用户:

+--------------------+--------------+------+-----+---------+-------+
| Field              | Type         | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| userid             | varchar(30)  | YES  |     | NULL    |       |
| lname              | varchar(40)  | YES  |     | NULL    |       |
| fname              | varchar(20)  | YES  |     | NULL    |       |
| system_id          | varchar(12)  | YES  |     | NULL    |       |
+--------------------+--------------+------+-----+---------+-------+

我想将system_iduserid 更改为唯一键。

如果我通过ALTER TABLE users MODIFY userid varchar(30) NOT NULL UNIQUE KEY; 更改它们,我会得到:

+--------------------+--------------+------+-----+---------+-------+
| Field              | Type         | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| userid             | varchar(30)  | NO   | PRI | NULL    |       |
| lname              | varchar(40)  | YES  |     | NULL    |       |
| fname              | varchar(20)  | YES  |     | NULL    |       |
| system_id          | varchar(12)  | YES  |     | NULL    |       |
+--------------------+--------------+------+-----+---------+-------+

然后如果我更改 system_id ALTER TABLE users MODIFY system_id varchar(30) NOT NULL UNIQUE KEY;

+--------------------+--------------+------+-----+---------+-------+
| Field              | Type         | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| userid             | varchar(30)  | NO   | PRI | NULL    |       |
| lname              | varchar(40)  | YES  |     | NULL    |       |
| fname              | varchar(20)  | YES  |     | NULL    |       |
| system_id          | varchar(12)  | NO   | UNI | NULL    |       |
+--------------------+--------------+------+-----+---------+-------+

为什么 MySQL 将我的 UNIQUE 密钥更改为 PRI,而我从未指定它?

【问题讨论】:

  • 我怀疑第一个唯一键默认自动设为主键。

标签: mysql mariadb primary-key myisam unique-key


【解决方案1】:

"如果一个 UNIQUE 索引不能包含 NULL 值并且表中没有 PRIMARY KEY,则它可能显示为 PRI。如果多个列形成一个复合 UNIQUE 索引,则一个 UNIQUE 索引可能显示为 MUL;尽管列的组合是唯一的,每列仍然可以包含多次出现的给定值。”

https://dev.mysql.com/doc/refman/5.7/en/show-columns.html

找到我的答案。

【讨论】:

  • 最好明确指定PRIMARY KEY。一个表中很少有两个 UNIQUE 键。
  • 您可以(并且应该)接受您自己的答案,以便在搜索时更容易找到。
猜你喜欢
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多