现在我有一个 Auto_increment id 作为 Pri 键,exchange_id 作为键的表,如何将主键更改为字段 [ticker] ..?
该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)
Run Code Online (Sandbox Code Playgroud)
如果你想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)
Run Code Online (Sandbox Code Playgroud)
请确保使用正确的索引(多个,唯一)和可空性(空,非空)创建 if。
另请注意,根据所使用的引擎和/或要执行的查询,主键的字符字段可能不是最理想的。
归档时间: |
|
查看次数: |
24110 次 |
最近记录: |