【问题标题】:Alter a live table to make a key non-unique更改实时表以使键不唯一
【发布时间】:2010-11-10 01:16:56
【问题描述】:

我看到了一些与此相关的其他问题,但它们不是 MySQL。

数据库是实时数据库,所以我不想删除并重新创建表。我只是想让一个列不再是唯一的,这本质上是不那么宽松的,所以它不应该引起任何问题。

【问题讨论】:

    标签: mysql unique alter-table


    【解决方案1】:

    如果您的列使用UNIQUE 子句定义为唯一的,则使用:

    ALTER TABLE mytable DROP INDEX constraint_name
    

    ,或者,如果您的约束是隐式命名的,则

    ALTER TABLE mytable DROP INDEX column_name
    

    如果使用PRIMARY KEY 子句定义它是唯一的,请使用:

    ALTER TABLE mytable DROP PRIMARY KEY
    

    但是请注意,如果您的表是 InnoDB,删除 PRIMARY KEY 将导致您的表隐式重新创建并重建所有索引,这将锁定该表并可能使其在很长一段时间内无法访问。

    【讨论】:

    • 我试图删除唯一键,但它给出了错误。是否可以这样做,或者我需要重新创建表。
    • @Ranbir:请将其作为另一个问题发布
    • 不是关于如何使密钥非唯一的问题,而不是如何删除它吗?如果唯一的方法是删除密钥并在没有unique 约束的情况下重新创建它,那么很高兴看到答案中提到...
    【解决方案2】:

    这些是 phpmyadmin 应用程序的说明(如果您使用的是 phpMyAdmin)::

    在某些情况下,开发者(您)可能不想放弃它,而只是将“唯一性”修改为“非唯一性”。

    步骤:

    1. 在上下文中转到要进行修改的表

    2. 点击“结构”选项卡(主要在浏览旁边)

    3. 在列的下方寻找“+Indexes”链接。是的...现在点击它
    4. 现在您可以看到所有“索引”,您现在可以单击“DROP”按钮或链接进行修改。

    在这里找到答案: 来源:https://forums.phpfreaks.com/topic/164827-phpmyadmin-how-to-make-not-unique/

    【讨论】:

      【解决方案3】:

      只有DROP 唯一索引。 不应该它是一个实时数据库这一事实。如果它是一个非常大的表,您可能会在删除索引时暂时阻止一些查询。但这应该只有在您添加索引时才会发生。

      ALTER TABLE table_name DROP INDEX index_name;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-20
        • 2018-06-04
        相关资源
        最近更新 更多