2015-08-26 105 views
0

鑑於表和查詢(SQLite的):錯誤使用SQLite空的INSERT語句

CREATE TABLE project (id INTEGER PRIMARY KEY, name INTEGER DEFAULT 3) 
Query 1: INSERT INTO project() VALUES() 
Query 2: INSERT INTO project (name) VALUES (1) 
Query 3: INSERT INTO project (id) VALUES (5) 

執行第一個查詢導致錯誤(SQLSTATE[HY000]: General error: 1 near ")": syntax error在php),而另外兩個執行就好了 - 看到http://sqlfiddle.com/#!5/8567a。爲什麼會發生此錯誤,爲什麼它對MySQL(http://sqlfiddle.com/#!9/1ae7f/1)正常工作?

回答

2

SQLite's implementation of INSERT grammar不同於MySQL implementation

SQLite的:

enter image description here

column-name列表不能爲空。

的MySQL:

如果列清單和VALUES清單均爲空時,INSERT會創建設置爲默認值,每一列的行

閱讀的SQL標準的各種版本有利於MySQL的解釋。 1992年版的例子,最近的版本似乎可以用或多或少相同的語法和措詞:

<insert columns and source> ::= 
      [ <left paren> <insert column list> <right paren> ] 
      <query expression> 
      | DEFAULT VALUES 

...

如果 <insert column list>被省略,那麼<insert column list> 該標識T中的所有T列在 的升序序列中都是隱含的。

要獲得期望的結果上的SQLite,使用

INSERT INTO tablename DEFAULT VALUES 
+0

謝謝,這是有趣的是知道,也許你可以添加一個'INSERT INTO項目DEFAULT VALUES'會解決這個問題(獲得預期的效果) ? – Samuel