1

MySQLの使用を開始したばかりで、簡単な質問があります。フィールド「SEX」を持つテーブル「My_Table」を作成したいと思います。また、フィールド「CODE」と「VALUE」を持ち、0 =男性、1=女性のテーブル「SEX_Values」を作成したいと思います。このようになります。

  My_Table            SEX_Values
  +--------+          +--------+--------+ 
  |  SEX   |          |  CODE  |  VALUE |
  +--------+          +--------+--------+
  |        |          |   0    |  male  |
  +--------+          +--------+--------+
                      |   1    | female |
                      +--------+--------+

どういうわけか、My_TableのSEXフィールドに制約を設定して、そこに挿入/インポートされるデータがSEX_Valuesテーブルのコードの1つと一致する必要があり、一致しない場合は警告をスローしたいのですが、このような。

  My_Table             SEX_Values
  +--------+           +--------+--------+ 
  |  SEX   |<reference>|  CODE  |  VALUE |
  +--------+           +--------+--------+
  |   1    |  >OK      |   0    |  male  |
  +--------+           +--------+--------+
  |   0    |  >OK      |   1    | female |
  +--------+           +--------+--------+
  |   0    |  >OK
  +--------+
  |   3    |  >Throws Warning
  +--------+

私はこれまでSQLをあまり使用したことがないので、どんな助けでも大歓迎です。

4

4 に答える 4

4

あなたが説明するものは、外部キーとして知られています。

基本的に、参照整合性が保証されます。つまり、参照テーブルに存在しないものを挿入したり、メインテーブルにまだ存在する参照テーブルから何かを削除したりすることはできません。

したがって、あなたの場合、に存在せずに挿入Hermaphroditeすることはできません。また、がまだ存在する場合は、から削除することもできません。My_TableSEX_ValuesmaleSEX_ValuesmaleMy_Table

于 2012-08-09T15:11:59.383 に答える
1
CREATE TABLE SEX_Values
(
    `CODE` INT NOT NULL,
    `VALUES` VARCHAR(10),
    PRIMARY KEY (`CODE`)   -- !!
);

CREATE TABLE My_Table
(
    SEX INT,
    FOREIGN KEY (SEX) REFERENCES SEX_VALUES(`CODE`)   -- !!
);
于 2012-08-09T15:10:50.017 に答える
0

非常に簡単な解決策は、sex列のデータ型をに設定するbitことです。これは、0、1、またはnull値のみを受け入れます(MSDN ref。)。

NOT NULLNULL値も除外するために、フィールド定義に制約も設定します。

于 2012-08-09T15:13:54.423 に答える
0

列挙型を使用してみませんか?

次のコマンドでテーブルを作成できます

CREATE TABLE my_table(
  sex enum("male", "female") NOT NULL
);

そうすれば、次のように挿入できます。

INSERT INTO my_table(`sex`) VALUES("male")

文字列を使用するという構文上の利点があり(これは数値コードを使用するよりもはるかに明確だと思います)、MySQLはコードを使用しているかのようにデータベースを最適化します。

于 2012-08-09T15:09:45.503 に答える