我正在編寫同時使用SQLite和的MySQL應用程序MySQL使用JDBC。SQL中的MySQL和SQLite差異
對於這些數據庫,SQL有什麼區別嗎?我是否可以對SQLite和MySQL使用相同的查詢,或者是否有任何數據庫特定的內容,這對另一個不起作用?
據我已經與MySQL的僅工作,所以我真的不知道很多關於SQLite的。
我正在編寫同時使用SQLite和的MySQL應用程序MySQL使用JDBC。SQL中的MySQL和SQLite差異
對於這些數據庫,SQL有什麼區別嗎?我是否可以對SQLite和MySQL使用相同的查詢,或者是否有任何數據庫特定的內容,這對另一個不起作用?
據我已經與MySQL的僅工作,所以我真的不知道很多關於SQLite的。
如果你堅持ANSI SQL92,你應該沒問題。
MySQL和SQLite都缺少一些SQL92功能(例如FULL OUTER JOIN)。 MySQL有兩個RIGHT JOIN和LEFT JOIN,SQLite只有LEFT JOIN。 SQLite不支持FOREIGN KEY約束,MySQL和MyISAM表都不支持。 SQLite當然沒有GRANT/REVOKE,因爲權限系統是基於底層操作系統的文件權限。
最大的區別是type system。 SQLite允許你在任何列中放置任何類型的數據。但是,如果可能的話,它會將數據轉換爲列的聲明類型。
我正在做類似的事情。還有,除了提到的那些,我遇到了一些區別:在sqlite3的與Xerial JDBC驅動程序的新版本
,外鍵確實支持。 SQLite支持內聯外鍵約束定義:
CREATE TABLE Blah(foreignId Integer REFERENCES OtherTable(id));
的MySQL(和InnoDB的)將接受相同的語法,但實際上不會強制約束,除非你使用一個單獨的FOREIGN KEY條款,明確指定外部表和鍵列(S):
CREATE TABLE布拉赫(foreignId INTEGER,FOREIGN KEY foreignId REFERENCES OtherTable(id));
舊版本的SQLite JDBC驅動程序不支持Statement.RETURN_GENERATED_KEYS;固定在較新的Xerial驅動程序中。
自動遞增鍵的語法不同; SQLite:(id INTEGER PRIMARY KEY ASC,...); MySQL的:(ID INTEGER PRIMARY KEY AUTO_INCREMENT,...)
SQLite的接受n路逗號分隔的聯接:
SELECT * FROM A,B,C ON(A.x = B.y AND B.y = C.z);
MySQL不;在以下兩個作品中:
SELECT * FROM A INNER JOIN B ON A.x = B.y INNER JOIN C ON B.y = C.z;
對於類型差異,SQLite JDBC驅動程序的相關煩惱是同一列可以通過ResultSet.getObject(。)生成不同的類型;例如,整數或長整數,取決於包含的數字的大小。
SQLite中的自動遞增鍵必須聲明爲INTEGER;在MySQL中任何數字整數類型的作品。
你可以驗證你正在使用哪個版本的sqlite jdbc驅動程序,它似乎支持RETURN_GENERATED_KEYS?我嘗試了許多不同的版本,但沒有運氣 – Amit 2010-11-28 18:26:29
從版本3.6.19開始,SQLite支持FOREIGN KEY約束,請參閱http://www.sqlite.org/foreignkeys.html。 – 2010-05-12 14:36:43