MySQL自动ID列

3

我想知道如何让MySQL自动添加一列,使每行都增加1(第1行将有ID 1,第2行将获得ID 2等)。

例如:
每当新用户在网站上注册时,他们会被分配一个ID号。从1开始,然后是2,等等。

ID|用户名|密码
1 |Bob |drowssaP
2 |Jill |cats

1个回答

4
尝试使用AUTO_INCREMENT。这里有文档
如果在创建表时添加 AUTO_INCREMENT,它将为您执行魔法 :)。
mysql> CREATE TABLE Users (
    -> ID int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Username varchar(255) NOT NULL,
    -> Password varchar(255) NOT NULL
    -> );
    Query OK, 0 rows affected (0.52 sec)

mysql> INSERT INTO Users(Username, Password) VALUES('vladimir', 'ilich_lenin');
    Query OK, 1 row affected (0.12 sec)

mysql> INSERT INTO Users(Username, Password) VALUES('friedrich', 'engels');
    Query OK, 1 row affected (0.04 sec)

mysql> SELECT * FROM Users;
+----+-----------+-------------+
| ID | Username  | Password    |
+----+-----------+-------------+
|  1 | vladimir  | ilich_lenin |
|  2 | friedrich | engels      |
+----+-----------+-------------+
2 rows in set (0.02 sec)

编辑

mysql> CREATE TABLE Persons ( ID int NOT NULL PRIMARY KEY, Username varchar(255) NOT NULL, Password varchar(255) NOT NULL);
Query OK, 0 rows affected (0.25 sec)

mysql> SHOW CREATE TABLE 

  CREATE TABLE `Persons` (
  `ID` int(11) NOT NULL,
  `Username` varchar(255) NOT NULL,
  `Password` varchar(255) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

1 row in set (0.00 sec)

mysql> ALTER TABLE Persons MODIFY ID INTEGER NOT NULL AUTO_INCREMENT;
Query OK, 0 rows affected (0.50 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE Persons;
CREATE TABLE `Persons` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Username` varchar(255) NOT NULL,
  `Password` varchar(255) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

1 row in set (0.00 sec)

mysql> INSERT INTO Persons(Username, Password) VALUES('friedrich', 'engels');
Query OK, 1 row affected (0.06 sec)

mysql> INSERT INTO Persons(Username, Password) VALUES('karl', 'marx');
Query OK, 1 row affected (0.08 sec)

mysql> SELECT * FROM Persons
    -> ;
+----+-----------+----------+
| ID | Username  | Password |
+----+-----------+----------+
|  1 | friedrich | engels   |
|  2 | karl      | marx     |
+----+-----------+----------+
2 rows in set (0.00 sec)

谢谢,我已经有一个名为“requests”的现有表,它有更多的行,并且我已经有一个ID列,我已经将其分配为索引角色。你有什么建议吗? - Edward Nevard
展示一下你的数据库结构,如果不是机密的话。只需执行 SHOW CREATE TABLE 你的表名; 并将结果粘贴在这里。 - marmeladze
SHOW CREATE TABLE table_name 只会显示表结构,而不是内容。我正在给我的答案添加一些行。等一下。 - marmeladze
这是我从PHPMYADMIN中提取的结构。 - Edward Nevard
1
确实是这样! 修改表请求,将ID更改为整数类型,不允许为空,并自动递增。 完成任务! - Edward Nevard
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接