ホームページ >データベース >mysql チュートリアル >各 MySQL 列挙にインデックス値があることを示すにはどうすればよいでしょうか?
実際、ENUM 列仕様にリストされている要素には、1 から始まるインデックス番号が割り当てられます。ここでの「インデックス」という用語は、列挙値のリスト内の位置を指し、テーブルのインデックスとは何の関係もありません。次の例では、各 MySQL 列挙にインデックス値があることを示します。
列挙値の代わりにインデックス番号を挿入することで、それを示すことができます。書き込み ENUM 列に値を挿入するには、値を入力します。たとえば、以下の表には、「pass」と「fail」という 2 つの ENUM 値があります。 「pass」は列挙リストの最初に記述されるため、インデックス番号は「1」となり、「fail」のインデックス番号は「2」になります。ここで、以下に示すようにインデックス番号を挿入して値を挿入することもできます。
mysql> Insert into marks(id,name,result)values(103,'Daksh','1'); Query OK, 1 row affected (0.06 sec) mysql> Insert into marks(id,name,result)values(104,'Shayra','2'); Query OK, 1 row affected (0.07 sec) mysql> Select * from marks; +-----+---------+--------+ | id | Name | Result | +-----+---------+--------+ | 101 | Aarav | Pass | | 102 | Yashraj | Fail | | 103 | Daksh | Pass | | 104 | Shayra | Fail | +-----+---------+--------+ 4 rows in set (0.00 sec)
上記のクエリでは、インデックス番号 1 と 2 を使用して、それぞれ列挙値の合格と失敗を表しています。
空の文字列のインデックス値は 0 です。空の文字列を挿入する前に、SQL モードを TRADITIONAL、STRICT_TRANS_TABLES、または STRICT_ALL_TABLES にすることはできません。次の例でそれを理解できます。-
mysql> SET SESSION sql_mode = ''; Query OK, 0 rows affected (0.00 sec) mysql> Insert into marks(id, name, result) values(105,'Yashraj',''); Query OK, 1 row affected, 1 warning (0.06 sec)
上記のクエリは、列挙値の位置に空の文字列を挿入します。 MySQL は空の文字列を挿入し、次の警告を表示します。
mysql> Show warnings; +---------+------+---------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------+ | Warning | 1265 | Data truncated for column 'Result' at row 1 | +---------+------+---------------------------------------------+ 1 row in set (0.00 sec)
テーブルを調べると、ENUM フィールドに空の文字列があることがわかります。
mysql> Select * from marks; +-----+---------+--------+ | id | Name | Result | +-----+---------+--------+ | 101 | Aarav | Pass | | 102 | Yashraj | Fail | | 103 | Daksh | Pass | | 104 | Shayra | Fail | | 105 | Yash | | +-----+---------+--------+ 5 rows in set (0.00 sec) mysql> Select result+0 As result_index from marks; +--------------+ | result_index | +--------------+ | 1 | | 2 | | 1 | | 2 | | 0 | +--------------+ 5 rows in set (0.01 sec) From the output of above query, it is clear that the index value of the empty string is 0.
ENUM 列に NOT NULL を指定していないため、列挙値の代わりに NULL を挿入できます。 NULL のインデックス値は NULL です。たとえば、次のクエリを使用すると、テーブル「result」の列挙型列に NULL を挿入し、そのインデックス値を確認できます。
mysql> Create table result(Id INT PRIMARY KEY NOT NULL, Name Varchar(10), GradeENUM('POOR','GOOD')); Query OK, 0 rows affected (0.25 sec) mysql> Insert into result(id, name, grade) values(100, 'Rahul', NULL); Query OK, 1 row affected (0.06 sec)
上記のクエリでは、列挙値の位置に NULL 値が挿入されています。次のヘルプ クエリを使用して確認できます。 -
mysql> Select * from result; +-----+-------+-------+ | Id | Name | Grade | +-----+-------+-------+ | 100 | Rahul | NULL | +-----+-------+-------+ 1 row in set (0.00 sec)
次に、次のクエリを使用して、次のことができます。 NULL を観察します。インデックス値は NULL です。
えええええ以上が各 MySQL 列挙にインデックス値があることを示すにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。