宜しくお願い致します。
先程気付いたのですが、MySQLのKey属性に「MUL」という指定が入っていました。こんな指定をした覚えが全く無いので、消そうと思い、alter table modify でカラムの属性を変更させてもやっぱり消えないのですが、これはなんなんでしょう?

A 回答 (2件)

> 重複キーを変更したい場合はどうすればよいのでしょう?



ALTER TABLE テーブル名 DROP INDEX `現在のインデックス名`,ADD UNIQUE `新しいインデックス名` (`hoge`,`huge`)

一旦、DROP INDEXで消してADDでまた加えます。
    • good
    • 0
この回答へのお礼

ありがとうございます!
早速やってみます。
助かりました!!

お礼日時:2005/04/17 10:39

Multiple(重複キー)でキーの設定をすると勝手に入ります。

この回答への補足

ありがとうございます。
ちなみに、重複キーを変更したい場合はどうすればよいのでしょう?

補足日時:2005/04/16 07:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QリモートのMacで動いているMySQLサーバーのデータベースをローカルのWin上のファイルにdumpしたい

win上のMySQL Administratorというソフトでも
同じことはできるんですが、
それだとdump時の文字コードの指定ができません。

「--default-character-set=binary 」などのオプションを加えて
コマンドで実行するといいらしいのですが、

ネットワーク越しのローカルマシン上のファイルに出力するには、パスをどう指定したらいいのかわかりません。

また、普段GUIのソフトでMySQLサーバーをいじっているため、
win上から、どのソフト(コマンドプロンプトとかでできる?)を使って、まず、どう接続するのか?から分かりません。(普通のSQL文以外は、コマンドになれていません。)

いろいろ調べたんですが、見当がつきません。
低レベルの質問かもしれませんが、よろしくお願いします。

Aベストアンサー

ODBC経由でマイクロソフトのアクセスでよいかと。

QSELECT文で、指定カラム以外の全カラムを一括指定って可能でしょうか

SELECT文で、指定カラム以外の全カラムを一括指定って可能でしょうか?
MYSQLサーバのバージョンは5.0.77です。

下記のように「*」を使用して指定テーブルの全カラムを表示する方法がありますが、
SELECT TableName.* FROM TableName

上記の逆で、指定テーブルの指定カラム以外の全カラムを一括指定って可能でしょうか?
例えば下記のような「^」みたいな、又は同等な書き方があれば良いなと思ってまして。
SELECT TableName.^ColumnName1 FROM TableName

ちなみに、下記のように一つ一つ表示したいカラムを指定する方法以外です。
SELECT TableName.ColumnName2 , TableName.ColumnName3 FROM TableName

よろしくお願いします。

Aベストアンサー

ない。
SQL文でそんなことをするより、メソッドとして作ればいいんじゃないですか。
だいたい、それ以外のカラムの数がわからないし、並びも不明だし。

#1に方と同じで
SELECT * from xxxx
なんてのは正気の人間は書きません。
カラムの数も位置も属性もわからないSQL文の結果をどうやって扱うのか。

Qvar_dumpの使い方について

よくわからない点がございますので、お知恵をお貸し頂ければ幸いでございます。

よくあるvar_dumpの使い方の例には、

<?php
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);
?>

や、session_start();
var_dump($_SESSION);
if (isset($_SESSION['expire'])){
など色々ありますが、

下記スクリプトで「$_POST」「$_COOKIE」「$sql」「$record」を調べるには、var_dumpをどこに配置すれば、画面上にスクリプトが反映されるのでしょうか。
皆様お忙しいところ恐れ入りますが、ご助力頂ければ幸いです。

■スクリプト
<?php
require_once('dbwin')
session_start();

if (isset($_COOKIE['mail1']) !== TRUE)
{ $_COOKIE['mail1'] = NULL; }
if ($_COOKIE['mail1'] != ''){
$_POST['mail1'] = $_COOKIE['mail1'];
$_POST['password'] = $_COOKIE['password'];
$_POST['save'] = 'on';
}

if (!empty($_POST)) {
// ログインの処理
if ($_POST['mail1'] != '' && $_POST['password'] != '') {
$sql = sprintf('SELECT * FROM ○○ WHERE mail1="%s" AND password="%s"',
mysql_real_escape_string($_POST['mail1']),
sha1(mysql_real_escape_string($_POST['password']))
);


$record = mysql_query($sql) or die(mysql_error());
if ($table = mysql_fetch_assoc($record)) {
// ログイン成功
$_SESSION['id'] = $table['id'];
$_SESSION['time'] = time();
                                      ........省略

以上なのですが、上記スクリプトの
「$_POST」「$_COOKIE」「$sql」「$record」を、var_dumpを使って調べたいのですが、
その手法を具体的にご教授願えますでしょうか。

例えば、「$record」であれば、
$record = mysql_query($sql) or die(mysql_error());
$var_dump($record); とすべき。  ⇒という形でお知恵をお貸し頂ければ幸いでございます。
(この場合実際には、画面にvar_dumpで得られた値は表示されませんでした。)

みなさまお忙しいとは存じますが、何卒よろしくお願い申し上げます。

よくわからない点がございますので、お知恵をお貸し頂ければ幸いでございます。

よくあるvar_dumpの使い方の例には、

<?php
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);
?>

や、session_start();
var_dump($_SESSION);
if (isset($_SESSION['expire'])){
など色々ありますが、

下記スクリプトで「$_POST」「$_COOKIE」「$sql」「$record」を調べるには、var_dumpをどこに配置すれば、画面上にスクリプトが反映されるのでしょうか。
皆様お忙しいところ恐れ入りますが、ご助力頂ければ幸いです。

...続きを読む

Aベストアンサー

見たいところで入れるだけなので、ルールめいたものは考えたこともないです。

> 例えば、「$record」であれば、
> $record = mysql_query($sql) or die(mysql_error());
> $var_dump($record); とすべき。  ⇒という形でお知恵をお貸し頂ければ幸いでございます。

という結果が得られたら、「なぜ出ないのか?」を考えるべきなのではないでしょうか?

この場合は die(mysql_error()); に移ったら、そこでプログラムは終わってしまうので、出ませんよね?

var_dump は NULL でもFALSEでも空文字''でも、判別できるように表示してくれますが、デザインによっては見つけづらい事もあるので、

echo '==================<br/>';
var_dump($record);
echo '==================<br/>';

の様に、印を付けて表示し、ブラウザからHTMLソースを表示させて印を検索して確認したりと、工夫してます。

見たいところで入れるだけなので、ルールめいたものは考えたこともないです。

> 例えば、「$record」であれば、
> $record = mysql_query($sql) or die(mysql_error());
> $var_dump($record); とすべき。  ⇒という形でお知恵をお貸し頂ければ幸いでございます。

という結果が得られたら、「なぜ出ないのか?」を考えるべきなのではないでしょうか?

この場合は die(mysql_error()); に移ったら、そこでプログラムは終わってしまうので、出ませんよね?

var_dump は NULL でもFALSEでも空文字''でも、判別で...続きを読む

Qインデックスキーを設定するとKeyがMULに。

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は消えます。

MySQLのインデックスキーを設定するとプライマリーキーが設定されてしまいます。

phpMyAdminを使用しています。
localhostページの一番下には、下記2つの注意が発せられています。
■phpMyAdmin の新しいバージョンが提供されています。アップグレードの検討をお奨めします。最新バージョンは 3.5.1 で、2012-05-03 にリリースされています。
■phpMyAdmin 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。理由についてはこちらをご覧ください。

localhostページの右側にあ...続きを読む

Aベストアンサー

> ここでMULという文字が出てきて調べてみると、
> プライマリーキーの重複を表す文字で、
> インデックスを設定したはずなのに
> プライマリーキーが設定されてしまいました。

これはたぶん勘違いです。MULTI VALUE(多値)の意味でユニークインデックスではないという意味ではないでしょうか。
通常のINDEXは重複値を許すので「MUL」が表示されるのが正常な状態だと思います。

QMySQLの実データはどのフォールダーにありますか?

現在MySQLのDUMPはphpMyadminを利用して、xport&importを実行しております。
質問は実際に存在するMySQLデータは
MySQL/DB名/
テーブル名.frm
テーブル名.MYD
テーブル名.MYI
でしょうか。これをDUMPしているということでしょうか。
また、EXPORTをせずに上記の3種類のファイルをコピーしても同様な結果が得られるのでしょうか。
ご教授をお願いいたします。

Aベストアンサー

hpMyAdminを使用していて容量だけの問題であればエディタなどで
適当なところでファイルを分割して取り込めばよろしいかと。

単純にファイルをアップロードする容量を増やしたいのであれば
httpサーバー(apache?)の設定を変更し、ファイルのアップロード
制限およびPOSTデータの制限を大きくしてあげてください

Qalter table で text が midiumtext になってしまう

当初作ったテーブル(テーブル名=test)では
col1 char(10) unique not null,
col2 text not null,
col3 text not null,
col4 text not null
だったのですが、col1だけをchar→varcharに変えたくて
alter table test modify col1 varchar(10) unique not null
としたところ、他のtext型項目が全てmidiumtextになってしまいました。

ひとつずつtextに直そうと
alter table test modify col2 text not null
を実行し次に
alter table test modify col3 text not null
とするとcol3はtextになるがcol2がまたmidiumtextになってしまいます。

midiumtextほどの容量は必要ないのでcol2~col4をtextに戻したいのですが、
どのようにすればよいのでしょうか。
ご教示願います。

宜しくお願い致します。

当初作ったテーブル(テーブル名=test)では
col1 char(10) unique not null,
col2 text not null,
col3 text not null,
col4 text not null
だったのですが、col1だけをchar→varcharに変えたくて
alter table test modify col1 varchar(10) unique not null
としたところ、他のtext型項目が全てmidiumtextになってしまいました。

ひとつずつtextに直そうと
alter table test modify col2 text not null
を実行し次に
alter table test modify col3 text not null
とするとcol3はtextになるがcol2...続きを読む

Aベストアンサー

UNIQUEは引き継がれるはずなので、changeをつかって
以下のようにしてみてはいかがでしょうか?

ALTER TABLE `test`
CHANGE `col1` `col1` VARCHAR(10) NOT NULL
,CHANGE `col2` `col2` TEXT NOT NULL
,CHANGE `col3` `col3` TEXT NOT NULL
,CHANGE `col4` `col4` TEXT NOT NULL

ただしMySQLのバージョンにもよるでしょうけど、
暗黙のフィールド定義変更がはたらいて手動による
型変更は意味がないかもしれません

参考URL:http://www.mysql.gr.jp/Manual/mysql-4.00.12/manual.ja_Reference.html#Silent_column_changes

QMySQLにてテキストの読込

はじめまして、MySqlで拡張子.sqlや.txtなどを読み込ませることは
できるのでしょうか?調べたらMySqlのdumpをとったものはできるみたいなのですが、自分で作成したものは読み込むことはできないのでしょうか?あと、作り方なども教えていただけるとありがたいです。

Aベストアンサー

日本語を使うのでしたら文字コードが合っていない
といけません。
phpMyAdmin等のツールを使うとより感覚的に
できると思います。

Qorder byでカラムが空の場合は、別カラム指定

order byで複数カラム指定(?)したいのですが、どうすればよいでしょうか?
具体的には、カラムが空の場合は別カラム指定したいのですが、可能でしょうか?

■前提
・titleカラム、yomiカラム

■最終的にやりたいこと
・titleカラムを五十音で並べ替えたい

■運用例(案)
・titleカラムが「漢字」の場合は、yomiカラムにひらがな、を入力
・titleカラムが「ひらがな」の場合は、yomiカラムは空
・titleカラムが「英字」の場合は、yomiカラムは空
・titleカラムが「先頭数語がひらがなもしくは英字で、最後が漢字」の場合は、yomiカラムは空?

■分からないこと
・漢字対策として、「yomiカラム」作成したけど、すべてのレコードに対して、「yomiカラム」を埋める必要があるでしょうか?
・「ひらがなだけ」、「英字だけ」、あるいは、「先頭数語が英字で最後の方だけ漢字」なタイトルは、わざわざ「yomiカラム」を埋めなくてもよい?

■知りたいこと
・全ての「yomiカラム」を埋めなくても、「titleカラム」を五十音で並べ替える方法があれば、教えてください
※件数が多くてちょっと面倒なため、何かいい方法があればと思い、質問しました。「yomiカラム」全部埋めた方がいい、のであれば、その方向で検討しようと思います

order byで複数カラム指定(?)したいのですが、どうすればよいでしょうか?
具体的には、カラムが空の場合は別カラム指定したいのですが、可能でしょうか?

■前提
・titleカラム、yomiカラム

■最終的にやりたいこと
・titleカラムを五十音で並べ替えたい

■運用例(案)
・titleカラムが「漢字」の場合は、yomiカラムにひらがな、を入力
・titleカラムが「ひらがな」の場合は、yomiカラムは空
・titleカラムが「英字」の場合は、yomiカラムは空
・titleカラムが「先頭数語がひらがなもしくは英字で、最後が漢字」の...続きを読む

Aベストアンサー

order by binary coalesce(yomi,title)
です。

QmySQLの文字コード

mySQLで、
--with--charset=ujis や、
--default-character-set=ujis
など、
文字コードを指定するものがありますが、
これらは実際どのような事なのでしょうか?
dumpファイルからmySQLにデータを流し込むとき、
上記の場合だとdumpファイルの文字コードはEUCに
しないといけないのでしょうか?
仮に上記の場合でdumpファイルをSHIFT_JISで流し込んだとき、
そのデータをブラウザで表示する場合の
文字コードもSHIFT_JISにすれば
文字化けせずに表示したのですが。
mySQLのデフォルト文字コード(?)とinsertするデータの
文字コードは一致させなければいけないのでしょうか?
よろしくお願いします。

Aベストアンサー

自信無かったんで見てたんですが誰も書かないようなので・・・
そのキャラセットはコマンド登録の場合のデフォルトでファイルから流した場合はそのファイルの文字コードで保管されたと思います。
よって、そのままコマンド上でそのままselectかけると文字化けするはずです。

ただ「予定」とか「本能」とか「マイケルジャクソン」って送ってみてください。
charasetをS_JISにしないと上記のような言葉は文字化けするかもしれません。
しなければ特に変える必要は無いと思います。

Qカラムで指定したカラム名をwhere句で使うことはできないですか?

例えば、以下のような感じ。

SELECT avg(weight) as avg from data where weight > avg;

上記の実例はわかりやすくするために平均値より大きいものを抽出していますが、実際にやりたいことは別でもっと複雑なことをしたいです。カラムでcaseで条件ごとに出した値をwhere句で使いたかったり。

Aベストアンサー

「Where句 別名」で検索すると「できない」ということがわかります。
代案として、サブクエリ等を使って、「そういうテーブル」にしてしまえば、Whereでも使えます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報