2012-04-05 103 views
12

MySQL提供了一個很好的運營商<=>與比較工作,可能包含空如null <=> nullnull <=> 5等回饋直觀的結果是許多編程語言。而普通的equals操作符總是返回null,這會捕獲許多新的MySQL用戶,比如我的錯誤。是否有沒有在mysql中使用<=>(null安全等於運算符)的原因而不是=?

是否有一個原因MySQL有兩個,而不僅僅是功能性<=>?誰真的需要使用內置語言類型進行有效未定義的操作符?

回答

6

MySQL的數據和編程語言之間的空最大的不同是,在MySQL中,null表示未知價值,同時在規劃這意味着未定義值。

在MySQL,空不等於空(未知不等於未知)。在編程語言中,null等於null(undefined equals undefined)。

+3

是的,但有沒有合乎邏輯的理由呢? 這個現實世界的問題會變得更容易嗎? – Jonathon 2013-03-29 19:19:01

2

MySql是否有原因,而不是隻有< => ? 運營商是完全不同的。

<=>執行像=操作者的相等比較,但返回1而非NULL如果兩個操作數都NULL,並0而非NULL如果一個操作數是NULL

誰真的需要在語言類型中使用內置的 進行有效未定義的操作符?

這取決於大小寫,僅僅因爲你沒有遇到過這種情況,並不意味着沒有人需要它。

+0

任何人都可以想到任何情況?因爲我不能回想我在十多年的專業發展過程中使用過<=>的行爲。 – cellige 2012-04-05 23:59:03

+0

我可以看到使用if =提供了不同的行爲,但是當它與NULL一起使用時,它提供了NO行爲,因爲只要null在表達式中,結果總是null .. – cellige 2012-04-06 00:00:15

+2

@cellige它不提供(合理的,有用的)與NULL文字一起使用時的行爲。但是當比較兩個非文字表達式和可以爲空的表達式時,它肯定會做某些人可能會合理需要的東西。 – 2014-09-05 15:57:37

10

誰真正需要的是有效未定義內置了語言類型的運營商?

你問一些真實世界的例子。這是一個虛假的。 假設你有一個住宅青年項目或類似項目,其中一個要求是孩子只和同性別的人共用一個房間。數據庫中有一個可空的M/F字段 - 可爲空,因爲您的數據饋送不完整(您仍在追查一些數據)。 您的房間配對代碼應該與t1.Gender < => t2.Gender的學生絕對不匹配,因爲它最終可能會匹配兩個未知性別的孩子,他們可能是性別相反的。相反,你匹配他們相等的地方,而不是兩個都是空的。

這只是一個例子。我承認,NULL=運營商的行爲多年來引起了很多混淆,但最終的錯誤可能在於大量的在線MySQL教程,它們沒有提及如何與運營商交互,也沒有提到存在運營商<=>

+0

不錯的例子。解釋並可能闡述。當字段的可能值有限時,'null'表達式可能會很有用,但是允許字段在應用程序執行的後期點之前是未定義的? – PdC 2017-06-23 15:24:53

+0

我會更進一步 - 我不明白他們爲什麼只對有限數量的值有用(顯然,所有SQL字段都有有限數量的值,但我假設您的意思是一個_small_有限數字!)在值不知道數據值的任何情況下(無論它們以後是否知道),Null值都可以很好地工作。 – almcnicoll 2017-07-13 15:13:28

4

誰真的需要在語言類型中使用內置的 進行有效未定義的操作符?

你還需要爲你的數據庫中的關係。特別是如果您使用外鍵約束。

例如,如果您有任務表(公司)。那麼你將這些任務分配給員工。所以你有一個從你的任務表到你的員工表的關係。
並且總會有一些未分配的任務。在這種情況下,您用於與employees表的關係的任務表中的字段將包含NULL。 這將確保這個任務是未分配的。這意味着:與僱員表不存在關聯的可能性。

如果NULL = NULL將是true,那麼在我的示例中總是有可能員工表中的外鍵也是NULL。因此該任務將被分配給一個或一些僱員。而且你永遠無法知道某個任務是否分配給某個員工。

相關問題