2012-06-14 73 views
1

我在一些PHP代碼中一個接一個地運行這兩個語句。爲什麼mysql插入查詢失敗* only *當表爲空時?

INSERT INTO input (ID) VALUES('1'); 
UPDATE input SET `vendor_name` = 'some name' WHERE ID=1 

如果數據庫表是空的(意思是我剛截斷的表),創建沒有數據,沒有出現警告。就好像我從未執行過查詢。

如果我再運行只是

INSERT INTO input (ID) VALUES('1'); 

在此完全相同的明確的表,創建一個條目沒有問題。 之後,如果我再次運行相同 INSERT/UPDATE querys

INSERT INTO input (ID) VALUES('2'); 
UPDATE input SET `vendor_name` = 'some name' WHERE ID=2 

然後創建所述數據和所述VENDOR_NAME適當設定。這裏發生了什麼??我似乎誤解了將數據插入數據庫的根本原因。我能否在空表上像這樣背對背執行語句?

要像「不列存在嗎?」搶先不可避免的傻問題,這裏有一些額外的注意事項:曾經出現

  • 沒有任何警告。這真讓我感到困惑。 INSERT/UPDATE似乎默默地失敗了。 (是的,是的,我已經設置了錯誤報告和我檢查了日誌)

  • 適當的列/表/數據庫/權限的存在和定義(記住查詢工作正常,如果表中有一個空行)

  • ID是主鍵。我用於身份證的號碼(1,2,不管)似乎都不重要。我也可以逆轉它們,或者使用101和102。創建表看起來像這樣:CREATE TABLE IF NOT EXISTS $ tablename(ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY)。用戶動態添加列。所以現在出現在表的約100列(請記住,這不應該的問題。我只是想更新一個列,如果表中的數據更新工作正常)

  • 在這裏偷偷地點一個Count(*)查詢可以發現行是創建的,但是在Update語句之後會消失。 (也許該行未完成,或什麼的,並有一個「確保插入結束」查詢我是否需要運行?)

+0

drop/create table again給出相同的結果嗎?如果列是數字(不是我所知道的問題) – Sebas

+2

一個註釋:如果'ID'的列類型是INT,則在'1'附近引用引號。 – hannebaumsaway

+0

它是一個Int類型,但爲什麼這麼重要 - 記住,如果數據存在於表中,那麼查詢,引號和全部就可以工作。 –

回答

1

試試這個代碼....我的作品.. ..

INSERT INTO `input` (ID) VALUES('1'); 
UPDATE `input` SET `vendor_name` = 'some name' WHERE ID=1