现在我有了一个表,其中Auto_increment id作为Pri键,exchange_id作为键,如何将主键更改为字段滴答器..?

发布于 2014-07-13 01:32:49
auto_increment字段必须是索引,或者是索引的第一列。如果您试图删除主键,MySQL会发出抱怨。在移动auto_increment属性之前,必须删除它:
mysql> ALTER TABLE mytable MODIFY id int, DROP PRIMARY KEY, ADD PRIMARY KEY (ticker);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc mytable;
+-------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| exchange_id | int(11) | YES | MUL | NULL | |
| ticker | varchar(32) | NO | PRI | NULL | |
| instrument | varchar(64) | NO | | NULL | |
| name | varchar(255) | YES | | NULL | |
| sector | varchar(255) | YES | | NULL | |
| currency | varchar(32) | YES | | NULL | |
| created_date | datetime | NO | | NULL | |
| last_updated_date | datetime | NO | | NULL | |
+-------------------+--------------+------+-----+---------+-------+
9 rows in set (0.00 sec)如果您希望id继续成为auto_increment,您还必须这样做:
mysql> ALTER TABLE mytable ADD INDEX `id` (id), MODIFY id int auto_increment;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc mytable;
+-------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | MUL | NULL | auto_increment |
| exchange_id | int(11) | YES | MUL | NULL | |
| ticker | varchar(32) | NO | PRI | NULL | |
| instrument | varchar(64) | NO | | NULL | |
| name | varchar(255) | YES | | NULL | |
| sector | varchar(255) | YES | | NULL | |
| currency | varchar(32) | YES | | NULL | |
| created_date | datetime | NO | | NULL | |
| last_updated_date | datetime | NO | | NULL | |
+-------------------+--------------+------+-----+---------+----------------+
9 rows in set (0.00 sec)请确保使用正确的索引(多重、唯一)和空值(null,null)创建if。
还请注意,根据所使用的引擎和/或要执行的查询,主键的字符字段可能不太理想。
https://dba.stackexchange.com/questions/71353
复制相似问题