当试图描述一个表时,我得到一个缺少信息的表(见第一个表);以类似于第二张表的方式更新该表的最佳方法是什么?我的SQL背景不是很强,所以我很想听听有关如何执行此操作的想法
第一个表格(实际情况如何)
+-----------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| config_id | int(10) unsigned | NO | | 0 | |
| scope | varchar(8) | NO | | default | |
| scope_id | int(11) | NO | | 0 | |
| path | varchar(255) | NO | | general | |
| value | text | YES | | NULL | |
+-----------+------------------+------+-----+---------+-------+
第二张桌子(应该是)
+-----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+----------------+
| config_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| scope | varchar(8) | NO | MUL | default | |
| scope_id | int(11) | NO | | 0 | |
| path | varchar(255) | NO | | general | |
| value | text | YES | | NULL | |
+-----------+------------------+------+-----+---------+----------------+
答案 0 :(得分:2)
我看到两个表之间存在以下差异:
config_id
应该是表的auto_increment
,也应该是表的primary key
scope
列上缺少(非唯一)索引以下语句应根据需要更改表:
ALTER TABLE mytable
MODIFY COLUMN config_id INT auto_increment,
ADD PRIMARY KEY (config_id),
ADD INDEX idx_scope(scope)
;
PS:DEFAULT NULL
对于config_id
没有意义:由于它是主键,因此您的RDBMS将永远不允许将其设置为NULL
。
请注意,此答案仅基于您提供的信息。运行此语句不一定会使表结构严格相等,因为在您提供的表示形式中可能还看不到其他差异。您可以使用SHOW CREATE TABLE mytable
语法获得描述表的完整DDL语句。