MySQLのインデックスキーを設定するとプライマリーキーが設定されてしまいます。
phpMyAdminを使用しています。
localhostページの一番下には、下記2つの注意が発せられています。
■phpMyAdmin の新しいバージョンが提供されています。アップグレードの検討をお奨めします。最新バージョンは 3.5.1 で、2012-05-03 にリリースされています。
■phpMyAdmin 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。理由についてはこちらをご覧ください。
localhostページの右側にあるバージョン情報は、
<データベースサーバ>
ソフトウェア: MySQL
ソフトウェアバージョン: 5.0.96-community-nt - MySQL Community Edition (GPL)
プロトコルバージョン: 10
サーバの文字セット: UTF-8 Unicode (utf8)
<ウェブサーバ>
Apache/2.4.1 (Win32) PHP/5.2.17
データベースクライアントのバージョン: libmysql - 5.0.51a
PHP 拡張: mysqli
<phpMyAdmin>
バージョン情報: 3.5.0, 最終安定バージョン: 3.5.1
現段階は、下記のようなテーブル構造になっています。
下記は質問用にデータをコピーするためにMySQL monitorを使いました。
フィールドの追加やキーの追加と削除はphpMyAdminで行っています。
(1)テーブルの構造
mysql> SHOW FIELDS FROM `infotable`;
+----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | text | NO | | NULL | |
| kudamono | text | NO | | NULL | |
| coment | text | NO | | NULL | |
| tes | int(11) | NO | | NULL | |
+----------+---------+------+-----+---------+-------+
(2)`tes`にインデックスキーを設定
phpMyAdminの「構造」画面でtesフィールドの「操作」欄の「その他」ドロップダウンから「インデックスを追加する」をクリック
phpMyAdminの画面に
ALTER TABLE `infotable` ADD INDEX ( `tes` )
と表示され`tes`にインデックスキーを設定しました。
(3)インデックスキー設定後のテーブルの構造
mysql> SHOW FIELDS FROM `infotable`;
+----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | text | NO | | NULL | |
| kudamono | text | NO | | NULL | |
| coment | text | NO | | NULL | |
| tes | int(11) | NO | MUL | NULL | |
+----------+---------+------+-----+---------+-------+
ここでMULという文字が出てきて調べてみると、
プライマリーキーの重複を表す文字で、
インデックスを設定したはずなのに
プライマリーキーが設定されてしまいました。
(4)text型のnameフィールドにもやってみます。
text型の場合は、tesフィールドと同じ方法ではできなかったので、
「SQL」画面で
ALTER TABLE `infotable` ADD INDEX (`name`(10))
を実行しました。
mysql> SHOW FIELDS FROM `infotable`;
+----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | text | NO | MUL | NULL | |
| kudamono | text | NO | | NULL | |
| coment | text | NO | | NULL | |
| tes | int(11) | NO | MUL | NULL | |
+----------+---------+------+-----+---------+-------+
text型も同じ状態になってしまいます。
なぜMULになってしまうのでしょうか。
インデックスを追加するにはどうしたらよいでしょうか。
ちなみに
ALTER TABLE `infotable` DROP INDEX `tes`
を実行後はtesのMULは消えます。
No.1ベストアンサー
- 回答日時:
> ここでMULという文字が出てきて調べてみると、
> プライマリーキーの重複を表す文字で、
> インデックスを設定したはずなのに
> プライマリーキーが設定されてしまいました。
これはたぶん勘違いです。MULTI VALUE(多値)の意味でユニークインデックスではないという意味ではないでしょうか。
通常のINDEXは重複値を許すので「MUL」が表示されるのが正常な状態だと思います。
ありがとうございます。
そうだったのですか、私の読み間違いだったかもしれません。
余談ですが、
http://ieurikai.com/%E9%95%B7%E9%87%8E%E7%9C%8C/ …
こちらのサイトに「詳細条件を開閉する」というボタンがあり、
押すといっぱい選択肢がありますが、これらは1つ1つに対してフィールドを作って
インデックスキーを設定して検索させているのでしょうか。
No.2
- 回答日時:
>いっぱい選択肢がありますが、これらは1つ1つに対してフィールドを作って
>インデックスキーを設定して検索させているのでしょうか。
普通に設計するなら、方法は2つ
ひとつは、一つ一つをフィールドとして管理する
メリットは一覧にしやすいので視認性が高く、構造が簡単なのでメンテナンス性も高い
デメリットは拡張性が低く、検索条件のクエリーも複雑になりがち
もうひとつは、これらの条件をまとめて条件フィールドとして
別テーブルで管理する
メリット・デメリットは上記の逆
プログラムなどで結果を表示するなら後者の方が楽、SQLにあまりくわしくないなら
前者でも仕方ないかな・・・のレベル
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL あと、MySQLの文字コードはutf8 気になりますね 1 2022/12/01 07:22
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- MySQL MySQLのテーブル作成で 自信がありません。 2 2022/08/28 05:35
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- PostgreSQL PostgressからMySQL(MariaDB)へ構造を変更する際のTimestamp等について 2 2023/04/04 12:09
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DBの定義のサイズを大きくし過...
-
mySQL プライマリーキーのカラ...
-
インデックスとは?オートナン...
-
私は相手の言葉と行動が一致し...
-
テーブルの列数を調べたい
-
INDIRECT関数の代替方法は?
-
一部のカラムでdistinctし全て...
-
group byで最後のレコードを抽...
-
MYSQLで全てのカラムから検索す...
-
LIKEの右側にカラムを指定でき...
-
whereで全てを検索する方法
-
SELECT文で、指定カラム以外の...
-
GREATESTで NULLをスルーする方...
-
DBエラーの意味
-
SQLでカラムを追加し、条件に合...
-
Accessの「IIF」に相当するSQL...
-
日付を一括UPDATE
-
UPDATEつてインデックス貼って...
-
カラムをコピーして、新規カラ...
-
mysqlで50音順にorder byしたい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DBの定義のサイズを大きくし過...
-
mySQL プライマリーキーのカラ...
-
SQL、oracleにて文字列操作(連...
-
(phpMyadminの)インデックスサ...
-
'PRIMARY KEY'と'UNIQUE()'の違...
-
インデックスキーを設定するとK...
-
連番を振る インデックス 付...
-
パフォーマンスとIN句とAND、実...
-
PHPのforeachでSQL文を処理して...
-
インデックスとは?オートナン...
-
データベースのインデックスに...
-
mysqlのインデックス
-
インデックスの一意な値の数に...
-
SQL Serverのntext型で一意イン...
-
INDIRECT関数の代替方法は?
-
テーブルの列数を調べたい
-
一部のカラムでdistinctし全て...
-
SELECT文で、指定カラム以外の...
-
LIKEの右側にカラムを指定でき...
-
SQLServerでNULLを挿入したいです
おすすめ情報