質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.34%

  • MySQL

    4387questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • データベース

    541questions

    データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

  • phpMyAdmin

    482questions

    phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

  • MAMP

    148questions

    Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

phpmyadminのsqlで#1062のエラーが発生しました。解決方法を教えてください

解決済

回答 1

投稿 2017/11/24 17:12 ・編集 2017/11/24 17:13

  • 評価
  • クリップ 0
  • VIEW 46

syoma

score 7

MAMP,phpMyAdminのsqlでレコードの修正をしようと
「UPDATE tb SET pr=pr*2;」を入力し、
実行するとエラーが発生しました。解決する方法はありますでしょうか?

tbテーブルのレコードは
cd       nm           pr
SH001 鉛筆         100
SH002 消しゴム    50
SH003 ボールペン 200
SH004 ノート      250
SH005 定規         150
となります。

エラーは
SQL クエリ:
UPDATE tb SET pr=pr*2
MySQL のメッセージ: 
1062-'200'は索引'pr'で重複しています。
となります。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

prがユニーク指定なんじゃないですか?
そのために 100 を2倍して 200 にしたいけど既に200があるから200をセットできないよ、と拒否られてるんじゃないかと推察します

投稿 2017/11/24 17:23

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/24 17:27

    おっしゃる通りでした。
    構造のインデックスからユニークのレコードを消すとユニークが解除され
    無事、UPDATEコードを実行することができました。
    ありがとうございます。

    キャンセル

  • 2017/11/24 17:32

    ちなみに
    update tb set pr=pr*2 order by pr desc;
    だとどうでしょう?
    prを降順にソートしてprを2倍するので100を2倍する前に200の2倍が済んでるのでユニークでも回避できそうな…

    キャンセル

  • 2017/11/24 17:52 編集

    確かに、一度ユニークを解除し、UPDATE tb SET pr=pr*2;を実行した後
    ユニック状態に戻し、update tb set pr=pr*2 order by pr desc;を実行すると実行できました。
    これはなぜでしょうか?

    他のUPDATE文もユニークを解除した状態で実行したコードはorder by pr descを後付けすると
    ユニーク状態でもエラーが起こらず実行することができるのでしょうか?

    例えば、値を戻すために
    update tb set pr=pr/2 order by pr desc;を実行しても
    1062-'200'は索引'pr'で重複しています。
    というような同じようなエラーが発生します。
    なので、ユニークを解除し、実行すると実行できます。
    試験的にユニーク解除状態で一度実行したコードなので
    ユニーク状態で実行したのですが、実行されず
    同じように1062-'200'は索引'pr'で重複しています。
    というエラーが発生しました。

    できるならユニーク状態でも更新文を実行できるようになりたいのですが
    方法はございますでしょうか?

    キャンセル

  • 2017/11/27 11:23

    2倍するときは desc で降順に、半分にするなら asc で昇順にしてください。
    降順にすることで大きい方から処理され、2倍した結果が処理前の何かの値とおなじになるのをさけ、
    昇順にすることで小さい方から処理され、半分にしたけっかが処理前の何かと同じになるのを避ける、
    という理屈です。
    処理前にユニークを外して、処理後にユニーク再設定というような作業は不要です。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.34%

関連した質問

同じタグがついた質問を見る

  • MySQL

    4387questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • データベース

    541questions

    データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

  • phpMyAdmin

    482questions

    phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

  • MAMP

    148questions

    Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト