- PR -

MySQL のUNIQUEについて

1
投稿者投稿内容
omopurike
常連さん
会議室デビュー日: 2008/04/03
投稿数: 38
投稿日時: 2008-09-26 10:08
こんにちは、SQL初心者です。

今回テーブルを作る際UNIQUEでDATE_AとDATE_Bがお互い一緒のときのみエラーを表示というのテーブルを作成したいのですがどうしてもなりません。

作成してみたテーブル
CREATE TABLE SAM(
DATE_A INT(1),
DATE_B INT(1),
UNIQUE KEY (DATE_A,DATE_B)
);

しかしこの作りだと当たり前のようにDATE_A or DATE_Bのときにエラーが発生します。
このorをandにしたいのですが、どう作成をしたら良いでしょうか。。。

説明が下手で大変もうしわけないです。^^;

忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2008-09-26 10:29
引用:

DATE_AとDATE_Bがお互い一緒のときのみエラー

DATE_A or DATE_Bのときにエラーが発生します。
このorをandにしたい



日本語だけで説明されては、かなり曖昧です。
具体的に「格納したいデータ」、「エラーとしたいデータ」の例を示してください。
また、MySQLの場合、バージョン4.0以前、4.1、5.0以降で、多くの機能拡張や一部の仕様変更があります。バージョンを明記してください。
omopurike
常連さん
会議室デビュー日: 2008/04/03
投稿数: 38
投稿日時: 2008-09-26 10:55
はい。

バージョンは4.1です。

今回作ろうとしているのは有給を取得するプログラムです。

存在するのデータ
ID | DAY
1 |2008-09-01
2 |2008-09-05
3 |2008-09-12
4 |2008-09-01
5 |2008-09-05

このようなデータがあった場合で新しいIDを入れる場合同じIDの人が同じデータを入れる場合エラーを表示させなくてはいけません。

Ex) 入力データ(ID:1 DAY:2008-09-01) エラーを表示

しかし先ほど書いたテーブルでは入力データが 
        (ID:1 DAY:2008-09-02)でも
        (ID:9 DAY:2008-09-01)でもエラーが発生してしまいます。

そのため、IDとDAYの入力データが以前のデータとどちらも重複しているときのみエラーを表示するという風にしたいのです。


       
忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2008-09-26 12:21
引用:

作成してみたテーブル
CREATE TABLE SAM(
DATE_A INT(1),
DATE_B INT(1),
UNIQUE KEY (DATE_A,DATE_B)
);



日付を格納するのに、データ型がINTになっていますが、間違いですよね?

引用:

存在するのデータ
ID | DAY
1 |2008-09-01



列名が最初に提示されたDDLと違っていますが?

2列の複合キーで重複禁止にするのは、

コード:
unique(列名1,列名2)


で問題ないです。
1

スキルアップ/キャリアアップ(JOB@IT)