MySql;更新表字段的正确方法

时间:2019-02-09 17:32:55

标签: mysql sql field

当试图描述一个表时,我得到一个缺少信息的表(见第一个表);以类似于第二张表的方式更新该表的最佳方法是什么?我的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    |                |
+-----------+------------------+------+-----+---------+----------------+

1 个答案:

答案 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语句。