14

MySQL は、多くのプログラミング言語と同じように直観的な結果を返すorなど<=>の null を含む可能性のある比較で機能する便利な演算子を提供します。一方、通常の equals 演算子は常に null を返すだけなので、私のような多くの新しい MySQL ユーザーが失敗します。null <=> nullnull <=> 5

MySQL が の機能だけではなく両方を備えている理由はあります<=>か? 組み込みの言語型で事実上未定義の演算子を本当に必要とするのは誰ですか?

4

5 に答える 5

10

mySQLとプログラミング言語のnullの大きな違いは、mySQLではnullは不明な値を意味し、プログラミングでは未定義の値を意味することです。

mySQLでは、nullはnullと等しくありません(unknownはunknownと等しくありません)。プログラミング言語では、nullはnullに等しくなります(未定義は未定義に等しい)。

于 2012-04-05T23:19:20.033 に答える
4

組み込みの言語型で事実上未定義の演算子を本当に必要とするのは誰ですか?

データベース内のリレーションにも必要です。特に、外部キー制約を使用している場合。

たとえば、タスク用のテーブルがある場合 (会社内)。次に、これらのタスクを従業員に割り当てます。したがって、タスクテーブルから従業員テーブルへの関係があります。
そして、割り当てられていないタスクが常にいくつかあります。この場合、従業員テーブルとの関係に使用するタスク テーブルのフィールドには が含まれますNULL。これにより、このタスクが割り当てられていないことが確認されます。つまり、employees テーブルに関係がある可能性はありません。

である場合、私の例でNULL = NULLtrue、従業員テーブルの外部キーも である可能性が常にありますNULL。したがって、タスクは 1 人または数人の従業員に割り当てられます。また、タスクが特定の従業員に割り当てられているかどうかを確実に知ることはできません。

于 2015-04-17T09:33:09.793 に答える
3

MySql が <=> の機能だけではなく両方を持っている理由はありますか? オペレーターはお互いに完全に異なります。

<=>=は、演算子のように等値比較を実行しますが、両方のオペランドがである場合や一方のオペランドが である場合では1なく、戻り値を返します。NULLNULL0NULLNULL

組み込みの言語型で事実上未定義の演算子を本当に必要とするのは誰ですか?

これはケースによって異なります。そのようなケースに遭遇したことがないからといって、誰もそれを必要としないわけではありません。

于 2012-04-05T23:28:40.667 に答える