【问题标题】:MySql; proper way to update fields of a tablemysql;更新表字段的正确方法
【发布时间】:2019-02-09 17:32:55
【问题描述】:

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

【问题讨论】:

    标签: mysql sql field


    【解决方案1】:

    我发现两张表之间存在以下差异:

    • 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 NULLconfig_id 没有意义:因为它是主键,所以您的 RDBMS 绝不允许将其设置为 NULL

    请注意,此答案仅基于您提供的信息。运行此语句不一定会使表结构严格等效,因为在您提供的表示中可能存在其他差异。您可以使用SHOW CREATE TABLE mytable 语法获得描述该表的完整 DDL 语句。

    【讨论】:

    • 嗨;感谢您的意见; config_id 的默认值应为 NULL;也可以包含在查询中吗?
    • @Eduardo : DEFAULT NULL 实际上对于主键没有意义,因为它永远不会允许 NULL 值...
    猜你喜欢
    • 1970-01-01
    • 2013-01-14
    • 2011-12-21
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多