MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

各MySQL列挙にインデックス値があることを示すにはどうすればよいですか?


実際には、ENUM列の仕様にリストされている要素には、1で始まるインデックス番号が割り当てられています。ここで「インデックス」という用語は、列挙値のリスト内の位置を示しており、テーブルインデックスとは関係ありません。次の例を使用して、各MySQL列挙型にインデックス値-

があることを示すことができます。 列挙値の代わりにインデックス番号を挿入する

値を書き込むのではなく、インデックス番号を使用してENUM列に値を挿入できます。たとえば、次の表には、2つのENUM値「pass」と「fail」があります。 「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.
> 列挙値の代わりにNULLを挿入することによって

ENUM列でNOTNULLを指定しないため、列挙値の場所に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> Select Grade+0 As Grade_index from result;
+-------------+
| Grade_index |
+-------------+
| NULL        |
+-------------+
1 row in set (0.00 sec)

  1. MySQL Selectで列の値を2回表示しますか?

    concat()を使用できます。まずテーブルを作成しましょう- mysql> create table DemoTable (    Value int ); Query OK, 0 rows affected (0.73 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mysql> insert into DemoTable values(100); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable values(200); Query OK,

  2. MySQLで特定のフィールド値を交換する方法は?

    まずテーブルを作成しましょう- mysql> create table DemoTable (    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,    Number1 int,    Number2 int ); Query OK, 0 rows affected (0.68 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mysql> insert into DemoTable(Number1,Number2) values(10,30); Qu