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

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

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

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

Q&A

解決済

3回答

8263閲覧

後から複数のカラムにUNIQUEを追加する

Anon_tmr

総合スコア23

MySQL

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

0グッド

0クリップ

投稿2017/09/05 00:52

こんにちは。

タイトルの通りなのですが、今回SQL文について質問があり投稿させていただきました。

今回の処理でSQL文の「on duplicate key update」というものを使えれば便利だなと思う
処理があり、カラムにUNIQUEを追加しようと思ったのですが

「ALTER TABLE main_group_to_site ADD UNIQUE (group_id,site_id);」

とすると '1-32' は索引 'group_id' で重複しています。というエラーになってしまいます。

個人的にsite_idgroup_idもすでに重複した値が登録されてしまっていますのでそれが
原因かと思っています。

このUNIQUEキー初めて使用を試みたのですがこのキーは後程追加したいカラムの値に、すでに
重複する値が設定されている場合は追加することができないのでしょうか?

エラーの原因で私が考えている事と違うことが原因であったり、SQL文が間違っているということもあればそれもご指摘していただきたいと思っております。
よろしくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ご想像の通りです。

前処理としてデータの重複を解消してからUNIQUEを追加するか、「on duplicate key update」の用途を精査して別の方法を考えるべきかと思います。

重複する値を含む項に、突然「重複無し!」と宣言するのは乱暴です。
男女両方の乗客が乗り合わせている列車の車両に、「女性専用車」の札をつけただけで、男性乗客が乗っていない事にするようなものですから。(先に男性乗客全員に別の車両へ移ってもらってから、「女性専用車」の札をつけるのが正しい手順ですよね)

投稿2017/09/05 01:17

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Anon_tmr

2017/09/05 07:37

ご回答ありがとうございました! 重複していた値を修正して解決しました。車両の例え、とてもわかりやすいです!
guest

0

ベストアンサー

ADD UNIQUE (group_id,site_id)

site_idもgroup_idもすでに重複した値が登録されてしまっています

若干認識が違うように見えますが、site_idやgroup_idについて
それぞれが重複した値をもっていても問題はありません
site_idとgroup_idの組み合わせが重複するとunique属性はつけられません

すでに重複する値が設定されている場合は追加することができないのでしょうか?

むしろ重複させないために属性をつけようとしているのですから
設定がされたら矛盾しますよね?
まずは重複しないように調整をした上で条件を追加してください

投稿2017/09/05 01:16

yambejp

総合スコア114585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Anon_tmr

2017/09/05 07:34

ご回答ありがとうございました。 重複していた値を修正して解決しました。個々のカラムでは違っていても大丈夫なんですね、ありがとうございます!
guest

0

今回の処理でSQL文の「on duplicate key update」というものを使えれば便利だなと思う
処理があり、カラムにUNIQUEを追加しようと思ったのですが

upsertですね。
unique制約を利用するものなので、既に登録されているデータが重複している場合はエラーになり、unique制約を設定できないので、設定しようとした制約によるupsertは利用できないことになります。

ただ、通常はプライマリーキーを設定しているはずなので、そちらが利用できないでしょうか?

また、複数の制約がある場合(プライマリーを含む)、いずれかの制約で重複があれば、その制約での更新となりますので、意図するものかどうか確認が必要かと。

投稿2017/09/05 01:15

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Anon_tmr

2017/09/05 07:33

ご回答ありがとうございました! 重複しているデータを修正しなおすことで解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問