7

ColumnName 是唯一的 ( UNIQUE KEY ColumnName)。

我只是想让列不唯一(必须很简单,但无法理解如何)。

如果在 phpMyAdmin 中检查列名并在底部单击唯一图标,则获取#1062 - Duplicate entry '' for key 'RegistrationNumber'. 好的,看到它是因为,点击它的图标ADD UNIQUE

行内结构中有唯一图标。但该图标不可点击。

如在 phpMyAdmin 中没有找到如何做,尝试查询。

根据尝试过的建议ALTER TABLE TableName DROP INDEX ColumnName

得到1091 Can't DROP 'ColumnName'; check that column/key exists

在这里https://stackoverflow.com/a/4414694/2465936发现This error means that you are trying to delete a key which is being used by another table.可能 ColumnName 被另一个表使用。

请告知需要做什么才能使列不唯一。

SHOW CREATE TABLE得到

Array
(
[0] => Array
    (
        [Table] => 18_6_TransactionPartners
        [Create Table] => CREATE TABLE `18_6_TransactionPartners` (
       `Number` int(11) NOT NULL AUTO_INCREMENT,
       `CompanyName` char(255) COLLATE utf8_unicode_ci NOT NULL,
       `RegistrationNumber` char(255) COLLATE utf8_unicode_ci NOT NULL,
        .......
        PRIMARY KEY (`Number`),
        UNIQUE KEY `Number_2` (`Number`),
        UNIQUE KEY `CompanyName` (`CompanyName`,`RegistrationNumber`),
        KEY `Number` (`Number`)
        ) ENGINE=InnoDB AUTO_INCREMENT=444 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
    )

 )

更新

根据@Bart Friederichs 的建议,尝试ALTER TABLE 18_6_TransactionPartners DROP INDEX Number并更改了RegistrationNumber并非唯一的列。不明白为什么(可能与唯一键有些混乱)。在任何情况下都可以更改为不唯一。

4

3 回答 3

7

可能你有一个名为INDEX. 通过使用SHOW CREATE TABLE tbl,您可以找出索引的名称。然后按名称删除它们(例如一些测试表):

mysql> SHOW CREATE TABLE test;
CREATE TABLE `test` (
  `entry_id` int(11) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,
  UNIQUE KEY `k` (`entry_id`)
)

要删除索引,请使用以下命令:

ALTER TABLE test DROP INDEX k;

您的密钥名称是RegistrationNumber(如错误消息所示):

ALTER TABLE TableName DROP INDEX RegistrationNumber;
于 2013-08-09T07:44:38.163 回答
2

如果您的列使用 UNIQUE 子句定义为唯一的,那么您可以执行以下操作:

ALTER TABLE mytable DROP INDEX constraint_name

要删除索引,请执行以下操作:-

ALTER TABLE mytable DROP INDEX index_name;
于 2013-08-09T07:39:18.763 回答
0

您必须使用索引名称而不是列名称来删除索引。

于 2013-08-09T07:39:26.450 回答