麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > SQLite > 正文

SQLite中的空處理與其它數據庫引擎的比較

2024-09-07 00:10:04
字體:
來源:轉載
供稿:網友

我的目標是使SQLite用一種標準和順從的方法來處理空值。但是在SQL標準中關于如何處理空值的描述似乎不太明確。從標準文檔中,我們不太容易弄清楚空值在所有場合下是如何被處理的。

所以標準文檔被取代,各種流行的SQL引擎被用來測試,看它們是如何處理空值的。我的目的是想SQLite像其他引擎一樣工作。志愿者們開發了 SQL的測試腳本并使之在SQL RDBMSes上運行,運用測試的結果來推論空值在各種引擎上是如何被處理的。最初的測試是在2002年5月運行的。測試腳本的副本在這篇文檔的最后。

SQLite最初是這樣編譯的,對于下面表格中的所有問題,它的答案都是"Yes"。 但是在其它SQL引擎上的測試表明沒有一個引擎是這樣工作的。所以SQLite被改進了,改進后它像Oracle, PostgreSQL, and DB2一樣工作。改進后,對于SELECT DISTINCT 語句和SELECT中的UNIQUE操作符,空值是模糊的。在UNIQUE列中空值仍然是清晰的。這看起來有些獨裁的意思,但是使SQLite和其它數據 庫引擎兼容似乎比這個缺陷更重要。

為了SELECT DISTINCT和UNION,使SQLite認為空值是清晰的是有可能的。但是你需要在sqliteInt.h原文件中改變NULL_ALWAYS_DISTINCT #define的值,并重新編譯。

更新于2003-07-13: 這篇文檔寫的很早,一些被測試的數據庫引擎已經被更新,忠實地使用者也發送了一些關于下面表格的修正意見。原始數據顯示了各種不同的狀態,但是隨著時間的 變化,數據的狀態已經逐漸向PostgreSQL/Oracle模式匯合。唯一的突出的不同是Informix and MS-SQL在UNIQUE列中都認為空值是模糊的。

令人迷惑的一點是,NULLs對于UNIQUE列是清晰的,但對于 SELECT DISTINCT和UNION是模糊的。空值應該是清晰或模糊都可以。但SQL標準文檔建議空值在所有地方都是清晰的。 但在這篇作品中,被測試的SQL引擎認為在SELECT DISTINCT或在UNION中,空值是清晰的。

下面的表格顯示了空處理實驗的結果。

  SQLite PostgreSQL Oracle Informix DB2 MS-SQL OCELOT
Adding anything to null gives null Yes Yes Yes Yes Yes Yes Yes
Multiplying null by zero gives null Yes Yes Yes Yes Yes Yes Yes
nulls are distinct in a UNIQUE column Yes Yes Yes No (Note 4) No Yes
nulls are distinct in SELECT DISTINCT No No No No No No No
nulls are distinct in a UNION No No No No No No No
"CASE WHEN null THEN 1 ELSE 0 END" is 0? Yes Yes Yes Yes Yes Yes Yes
"null OR true" is true Yes Yes Yes Yes Yes Yes Yes
"not (null AND false)" is true Yes Yes Yes Yes Yes Yes Yes

 

  MySQL
3.23.41
MySQL
4.0.16
Firebird SQL
Anywhere
Borland
Interbase
Adding anything to null gives null Yes Yes Yes Yes Yes
Multiplying null by zero gives null Yes Yes Yes Yes Yes
nulls are distinct in a UNIQUE column Yes Yes Yes (Note 4) (Note 4)
nulls are distinct in SELECT DISTINCT No No No (Note 1) No No
nulls are distinct in a UNION (Note 3) No No (Note 1) No No
"CASE WHEN null THEN 1 ELSE 0 END" is 0? Yes Yes Yes Yes (Note 5)
"null OR true" is true Yes Yes Yes Yes Yes
"not (null AND false)" is true No Yes Yes Yes Yes
Notes: 1. Older versions of firebird omits all NULLs from SELECT DISTINCT and from UNION.
2. Test data unavailable.
3. MySQL version 3.23.41 does not support UNION.
4. DB2, SQL Anywhere, and Borland Interbase do not allow NULLs in a UNIQUE column.
5. Borland Interbase does not support CASE expressions.

 

下面的腳本被用來收集關于上面表格的信息。

-- 我認為SQL關于空值的處理是不定的,所以不能靠邏輯來推斷,必須同過實驗來發現結果。為了實現這個目標,我已經準備了下列的腳本來測試不同的SQL數據庫如何處理空值。      
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲网站免费观看 | 日本成人在线免费 | 国产精品区一区二区三区 | 久久精品4| 欧美日韩专区国产精品 | 日本中文不卡视频 | 日日草夜夜草 | 性日本xxx | 色播视频网站 | 亚洲网站免费看 | 国内精品伊人久久久久网站 | 日韩午夜一区二区三区 | 亚洲精品 欧美 | 免费香蕉成视频成人网 | 国产69精品99久久久久久宅男 | 精品国产乱码久久久久久久久 | 人人舔人人舔 | 久久久无码精品亚洲日韩按摩 | 久久91精品视频 | av在线免费观看播放 | 草久免费 | 亚洲成人中文字幕在线 | 亚洲视频观看 | 神马视频我不卡 | 国产一区二区三区四区在线 | vidz 98hd | 黄色片网站免费看 | 亚洲第五色综合网 | 免费h片| 黄色片网站在线免费观看 | 欧洲成人一区二区 | 中文字幕一二区 | 激情小说区 | 毛片在线免费视频 | 精品一区二区电影 | 91九色视频观看 | 香蕉视频1024 | 91精品国产九九九久久久亚洲 | 欧美特一级 | 毛片电影网址 | 欧美毛片 |