【发布时间】:2015-09-20 11:18:11
【问题描述】:
我刚开始使用 mysql。我正在尝试设计一个表,该表的列包含一个自动递增的 id、一个唯一的用户名 (userid) 和一个密码。
最初我认为id应该是主键,这样我就可以轻松地更新引用数字的数据,就像在一些论坛软件中所做的那样。
所以我创建了表格:
CREATE TABLE IF NOT EXISTS auth (
-> id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-> userid VARCHAR(30) NOT NULL,
-> password VARCHAR(30) NOT NULL,
-> role VARCHAR(20) NOT NULL,
-> email VARCHAR(50)
-> );
但是我发现如果我执行替换命令,它会重复行。
mysql> SELECT * FROM `auth`;
+----+--------+-----------------+---------------+-------+
| id | userid | password | role | email |
+----+--------+-----------------+---------------+-------+
| 1 | jody | pw | administrator | NULL |
+----+--------+-----------------+---------------+-------+
1 row in set (0.00 sec)
mysql> REPLACE INTO `auth` SET `userid` = "jody", `password` = "pw", `role` = "administrator";
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM `auth`;
+----+--------+-----------------+---------------+-------+
| id | userid | password | role | email |
+----+--------+-----------------+---------------+-------+
| 1 | jody | pw | administrator | NULL |
| 2 | jody | pw | administrator | NULL |
+----+--------+-----------------+---------------+-------+
2 rows in set (0.00 sec)
然后我尝试将主键更改为用户名,但遇到了这个:
mysql> alter table `auth` drop primary key, add primary key (`userid`);
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
所以我对主键的理解似乎有些问题。这里有什么问题?
【问题讨论】:
-
主键必须是唯一的。让我们从那里开始
-
ALTER TABLE auth ADD UNIQUE uid (userid)删除重复行后。
标签: mysql primary-key