はじめまして。
私のレンタルサーバーには最初からMYSQLというデータベースが付いています。
テーブルを設定して、すでにいくつかのデータを入力しています。
最近、重複して同じIDが入力できることに気づきました。
重複できないようにしたいと思い、調べたところ、ユニークキーというものを設定すれば重複しないらしいと言うことを知りました。
そちらのレンタルサーバーにはすでにPHPMYADMINが使えるようになっています。
PHPMYADMINをつかってIDのフィールドにユニークキーを設定しようとしました。
すると下記のようなエラーがでて、ユニークキーの設定に失敗しました。
> エラー
> 実行した SQL 照会:
>
> ALTER TABLE `テーブルの名前` ADD UNIQUE (
>
> `フィールドの名前`
> );
>
すでにデータが入力されているテーブルのフィールドにはユニークキーは設定できないのでしょうか?
もし、すでにデータが入力されているテーブルのフィールドにユニークキーを設定する方法があったら教えてください。
もしくは私が勘違いをしている部分があったら教えて頂ければ幸いです。
No.1ベストアンサー
- 回答日時:
>すでにデータが入力されているテーブルのフィールドにはユニークキーは
>設定できないのでしょうか?
できますね
ただし、ユニークな状態になっていないといけません。
(※ユニーク設定しようとしているのですから当然ですよね)
ダブっているデータを
SELECT `フィールドの名前`,count(*) AS `要素数`
FROM `テーブルの名前`
GROUP BY `フィールドの名前`
having `要素数`>1
などとして探し、
手動もしくはSQLでユニークな状態にもっていかないと
ユニーク設定はできません。
この回答への補足
> 手動もしくはSQLでユニークな状態にもっていかないと
> ユニーク設定はできません。
回答ありがとうございます。
phpmyadminで確認したのですが、重複しているデータはありません。
なのにエラーが出るので困っています。
No.3
- 回答日時:
#2回答者です。
> #1170 - BLOB column 'no' used in key specification without a key length
返されたメッセージの通りなのですが?
対象としている列のデータ型は、BLOBですよね?その場合、インデクスを付ける(ユニークにする)には、「列名(キー長)」という形式で指定する必要があります。
つまり、今回の例では、
「alter table `表名` add unique(`列名`(キー長))」
といった指定をする必要があります。
BLOBは非常に長い(大きい)データを格納できる一方で、キーとして扱う部分は長さを指定して限定する必要があるほか、操作も制限されます。
ところで、BLOBに対してユニーク設定をするというのは、非常に珍しい使い方だと思います。BLOBの列は、画像などのバイナリデータを格納することが想定されていますが、列のデータ型の選定は適切に行われているでしょうか?
ユニーク指定が必要な列なら、varchar等が適切だと思いますけど?
ありがとうございました。
データ型を「varchar」に変更したところ、ユニークキーが設定できました。
データ型は使い分けの基準がよく分からないので最初、txtに設定してありました。
「大は小を兼ねる」と思っていました。
お手数をおかけしました。
No.2
- 回答日時:
データを格納済の状態で、ユニークキーの設定は可能です。
ただし、格納データ中に既に重複が存在する状態では、当然、行えません。>PHPMYADMINをつかってIDのフィールドにユニークキーを設定しよう~
すると下記のようなエラーがでて
具体的には、どんなエラーですか?
「重複している」というエラーではないでしょうか?
以下のような手順で作業する必要があります。
(1)重複データを調査
(2)重複データを削除する等の対策を行う
(3)ユニークキーを設定
(1)重複データの調査
表t1の列c1で、重複している値を調べる場合は、以下のようなSQLで調べられます。
select c1 from t1
group by c1 having count(*)>1;
MySQLのバージョンが示されていませんが、今後も質問する場合は、バージョンを明記してください。バージョンは例えば、以下のSQLで知ることができます。
select version();
この回答への補足
phpmyadminで重複していたデータは削除した後で、ユニークキーを設定しようとしたところエラーが出ました。
再度、確認したのですが重複しているデータはありません。
> 具体的には、どんなエラーですか?
> 「重複している」というエラーではないでしょうか?
>
下記のようなエラーが出ました。
> エラー
> 実行した SQL 照会:
>
> ALTER TABLE `テーブルの名前` ADD UNIQUE (
>
> `フィールドの名前`
> );
>
すいません。
あらためて試してみたのですが、上記のメッセージの下に下記のようなメッセージも出ていました。
> MySQLのメッセージ -->
>
> #1170 - BLOB column 'no' used in key specification without a key length
>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブルの最後(最新)のレコー...
-
MySQLでの近似値順での値の取得...
-
SQLローダーCSV取込で、囲み文...
-
並べ替えについて
-
ファイルの漢数字の順番につい...
-
上から何番目か。
-
select文の実行結果に空白行を...
-
where句中のtrim関数について
-
時間帯テーブルから直近空き時...
-
アクセスのレポートでレコード...
-
SQL*Loader Append
-
データ
-
【PL/SQL】FROM区に変数を使う方法
-
1の行を固定した上でVBAを用い...
-
osqleditについて
-
Accessのテーブルの変化を自動...
-
FileMaker Pro 9 同一レコード...
-
group byの並び順を変えるだけ...
-
PL/SQL内の共通関数の引数にフ...
-
INNER JOINについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLローダーCSV取込で、囲み文...
-
テーブルの最後(最新)のレコー...
-
int型フィールドにnullを登録で...
-
BLOBやCLOBのパフォーマンスを...
-
配列に指定した値が含まれてい...
-
SELECTした合計値をそのまま割...
-
2回実行のSQL文を1回にしたい
-
ACCESSのクエリで空白以降を別...
-
固定長データのテキストファイ...
-
【MySQL】 DECIMAL(2,1) に 13...
-
テーブルのフィールドの一番長...
-
Null値件数をカウントする式に...
-
MySQLでの近似値順での値の取得...
-
一つのフィールドに複数の情報...
-
ファイルメーカー10で重複デー...
-
CSVからNULL値をインポート
-
重複しないデータのみを抽出
-
複数フィールド対してLIKE '% ...
-
Datetime型とTimestamp型の使い...
-
phpmyadminで条件付きの検索置...
おすすめ情報