web-dev-qa-db-ja.com

#1062-キー「PRIMARY」のエントリが重複しています

したがって、私のMySQLデータベースは少しおかしな振る舞いをしています。これは私のテーブルです:

Name shares id  price   indvprc
cat   2     4   81      0
goog  4     4   20      20
fb    4     9   20      20

テーブルに挿入しようとすると、この#1062エラーが発生します。そのため、さらに調べて、名前と共有の値が同じであるテーブルに値を挿入しようとすると、#1062エラーが返されることに気付きました。たとえば、私が挿入した場合:

fb    4      6     20   20 

エラーが返されます。しかし、共有数を6に変更すると、正常に実行されます。それは、一意である可能性のある私の列の1つによるものですか、それともmysqlにあるものですか

14
irosenb

PRIMARY KEYとしてsharesを削除する必要がありますOR UNIQUE_KEY

13
mlishn

つかいます SHOW CREATE TABLE your-table-nameどの列を確認しますis主キー。

7
  1. 確認してください PRIMARY KEYが選択されましたAUTO_INCREMENT
  2. 次の方法で自動インクリメントを有効にします。
    ALTER TABLE [table name] AUTO_INCREMENT = 1
  3. 挿入コマンドを実行するとき、このキーをスキップする必要があります。

「lock」プロパティを「shared」から「exclusive」に変更することで解決しました。

ALTER TABLE `table` 
CHANGE COLUMN `ID` `ID` INT(11) NOT NULL AUTO_INCREMENT COMMENT '' , LOCK = EXCLUSIVE;

正確なエラーメッセージとは何ですか? #1062は、列の主キー制約に違反する重複エントリを意味します。つまり、列に同じ値を2つ持つことはできません。エラーメッセージは、どの列が制約されているかを示しているはずです。「共有」を推測しています。

2
Chris

おそらくこれは最善の解決策ではありませんが、次のことを行うと問題が解決します

ステップ1:次のコマンドを使用してデータベースダンプを取得します

mysqldump -u root -p databaseName > databaseName.db

行を見つける

ENGINE=InnoDB AUTO_INCREMENT="*****" DEFAULT CHARSET=utf8;

ステップ2:*******をmysqlテーブルIDの最大IDに変更します。この値を保存します。

ステップ3:再び使用する

mysql -u root -p databaseName < databaseName.db

私の場合、他のテーブルにデータを入力するために使用する手動エントリを追加すると、このエラーが発生しました。 mysqlコマンドを使用して値AUTO_INCREMENTをmax idに設定する方法

1
Kshitiz

ドメインプロバイダーのcpanelでデータベースを修復します。

または、phpMyAdminで何かをマージしていないかどうかを確認します

0
Guy