• ベストアンサー

ユニークキーについて

複数のカラムからユニークキーにすることはできますか? MySQL バージョン4.0を使っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.1

UNIQUEの項にカッコで複数のカラムを指定すれば、複数のカラムの組合せにユニーク制約を設定することが出来ます。 http://210.224.163.248/Manual/mysql-4.00.12/manual.ja_Reference.html#CREATE_TABLE http://dev.mysql.com/doc/mysql/ja/create-table.html 例 ---------------------------------------------- CREATE TABLE test_uniq ( pr_key INTEGER PRIMARY KEY, u_key1 INTEGER, u_key2 INTEGER, UNIQUE (u_key1, u_key2) ) -------------------------------------------------

nanasi
質問者

お礼

ありごとうございます。 無事にできました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • すでにあるテーブルのフィールドにユニークキーを設定できますか?

    はじめまして。 私のレンタルサーバーには最初からMYSQLというデータベースが付いています。 テーブルを設定して、すでにいくつかのデータを入力しています。 最近、重複して同じIDが入力できることに気づきました。 重複できないようにしたいと思い、調べたところ、ユニークキーというものを設定すれば重複しないらしいと言うことを知りました。 そちらのレンタルサーバーにはすでにPHPMYADMINが使えるようになっています。 PHPMYADMINをつかってIDのフィールドにユニークキーを設定しようとしました。 すると下記のようなエラーがでて、ユニークキーの設定に失敗しました。 > エラー > 実行した SQL 照会: > > ALTER TABLE `テーブルの名前` ADD UNIQUE ( > > `フィールドの名前` > ); > すでにデータが入力されているテーブルのフィールドにはユニークキーは設定できないのでしょうか? もし、すでにデータが入力されているテーブルのフィールドにユニークキーを設定する方法があったら教えてください。 もしくは私が勘違いをしている部分があったら教えて頂ければ幸いです。

    • ベストアンサー
    • MySQL
  • and条件のようなプライマリ制約

    現在データベースの設計をしておりますが、insertの際、プライマリキー、ユニークキーではAというカラムが同じだとできないとなりますが、 A,Bが両方同じでエラーをかえすということはできませんでしょうか。 卒論の最終段階へきて、つまづいております。どなたかご教授いただけませんでしょうか。 使用データベースはMySqlです。

    • ベストアンサー
    • MySQL
  • 「SELECTして取得できない場合、INSERT」の不完全さの改善

    はじめまして。 ユニークキー設定しているカラムに、 SELECTして取得できない場合、INSERTの処理をすると 違うセッションでタイミングによってINSERTがエラーになってしまうと思います。(以下参照) -------------------------------------- 時間  SESSION1     SESSION2 ↓    SELECT→× ↓                SELECT→× ↓    INSERT→○ ↓                INSERT→× -------------------------------------- この様な場合、SESSION2を生かすには、その後SELECTを再度実行すればよいと思うのですが、他によい方法はないのでしょうか? 何かございましたら、ご教授お願いいたします。 各バージョン MySQL5.0 (PHP5.1)

  • ユニークキーの設定を消す

    syainテーブルのユニーク属性を消すPHPのソースを教えて下さい。 例えば mysql_query('alter table syain UNIQUE KEY()'); このような文になると思います。

  • MySQLのTIMEDIFFのバグの解決方法

    MySQLのTIMEDIFFのバグについて教えて下さい。 環境:MySQL 5.0.77 MySQLのテーブルにdateというtimedate型のカラムを作ります。 カラムには 2011-01-01 00:00:00 とう形でデータが登録してあります。 現在の時刻と登録してあるdateの差を出したいと思い、 TIMEDIFF(NOW(), date) を使うと 「838:59:59」という値が返ってきてしまいます」 下記のホームページに MmySQLのバージョンが4.1のバグと記載されていました。 http://onlineconsultant.jp/pukiwiki/?MySQL%204.1%20TIMEDIFF%E3%81%8C%E3%81%8A%E3%81%8B%E3%81%97%E3%81%84 バージョン5でも同じような症状が出るのでしょうか? 解決策はどのようにすればよいのでしょうか? 複数のサーバーで実験できる環境があるのですが、MySQL5.0.77でちゃんと計算される場合と、上記のような変な数字になってしまう場合があります。

    • ベストアンサー
    • MySQL
  • 長さ1の空文字列?

    タイトルの通り、長さ1の空文字列で困っています。 現在、Linux、Apache、MySQL、PHPを使って3階層アプリケーションを作っています。 予めMySQLでテーブルの形を決めておいて、CSVからデータを読み込ませておき、 PHPでSQL文を実行してレコードを取得することで、それらをユーザに表示という感じです。 複数あるカラムのうち、空文字列(CSV上でブランクだったもの)は表示させたくないので、 PHPで「 if(カラム=="")~ 」のように比較することで、空文字列だけ避けるつもりでした。 しかし上手くいかなかったので、strlen()で調べて見たところ、返り値が1でした。 本来は空文字列に対してstrlen()は0或いはfalseの返り値を返しますよね。 is_empty()でも空データ扱いにならず、当然NULLの扱いでもありません。 そのため、実データとの区別が出来ずに困っています。 何故、空文字列のカラムを除外したいかというと、 DB上のユニークなレコードを検索したいからです。 select * from where カラム='データ' and カラム='データ'… という風に。 「カラム=''」としてしまうと検索に引っかからなくなってしまいます。 どうすればよいでしょうか。 以下はそれぞれのバージョンです。 MySQL:5.0.95 PHP:5.1.6 Linux:RHEL5 Apache:2.2.3

    • ベストアンサー
    • PHP
  • テーブルの統合

    現在、似たようなデータを複数テーブルで管理しています。 違いはcharのindexのキーが10byteや12byteで長さがそれぞれ違うだけです。 1つのテーブルのデータ件数が10万件で10テーブルあります。 年に1回の更新で、その度にテーブルが増えていきます。 indexのcharのカラムを大きめにとってすべて1つのテーブルにしたいのですが、特に問題は無いでしょうか? MySQLのバージョンは 4.1.10です。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • HTMLをそのままinsertしたい

    MySQLバージョン4.1.16を使っています。 <html><head><head/><body>本文</body></html> のようなHTMLを1つのカラムとしてinsertしたいのですが、 この場合に何か注意する点などはあるのでしょうか? あまりこういう使い方を見たことがないので、 間違っていることなのかが分かりません。

    • ベストアンサー
    • MySQL
  • いったいどのバージョンがいいの?

    今、MySQLとPHPを使ったシステムを構築中なのですがMySQLのバージョンで悩まされています。 当初は4.0.25で構築していたのですが、あとになってサブクエリの実行ができないことがわかって急遽4.1.20をインストール。がしかし、文字セットで悩まされとりあえず「SET NAMES」にて対応しました。 そのあと、あいまい検索ができないことが判明。 カラム名 LIKE ’123%’とするとエラーが出てしまいます。 みなさんはどのバージョンを使っているのでしょうか? 参考までに教えてください。

  • Mysql DATE型のDEFAULT値

    初心者ですが、よろしくお願いします。 Mysqlでテーブルを作成して、カラムにDATE型を指定するとDEFAULT値が設定できません、、、。 これはMysqlの仕様なのでしょうか? ちなみに、TIMESTAMP型だと、'DEFAULT CURRENT_TIMESTAMP'でDEFAULT設定できます、、。 -- クエリ CREATE TABLE test ( column_name DATE NOT NULL DEFAULT CURRENT_DATE ); >> エラー ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_DATE)' at line 1 Mysql::ABも調べたのですが、よく分かりませんでした。 よろしくお願いします。 MySQLバージョン 5.0.41

このQ&Aのポイント
  • Ipadで印刷したいのに、TS3530を認識しない問題に困っています。どうすれば解決できるでしょうか?
  • ワイヤレス印刷に対応しているTS3530が、なぜIpadで認識されないのか不明です。対処法を教えてください。
  • IpadとTS3530を接続して印刷したいのに、どうしても認識されません。設定や接続方法に問題があるのでしょうか?
回答を見る