長話短說,我有一個SQL文件,我想導入爲skel
樣式文件,因此這將通過編程方式重複執行。但是我可以編輯SQL文件,但我寧願不觸摸應用程序本身。如何強制MySQL將0作爲有效的自動增量值
此應用程序使用userid = 0
來表示匿名用戶。它還在數據庫中有一個相關(空白)條目來表示這個'用戶'。因此,在我skel.sql
行看起來是這樣的:
INSERT INTO `{{TABLE_PREFIX}}users` VALUES (0, '', '', '', 0, 0, 0, '', '', 0, 0, 0, 0, 0, NULL, '', '', '', NULL);
這樣做的問題是,uid
是auto_increment
領域,從技術上講,0
是無效值。或者至少,如果將其設置爲0,則基本上告訴MySQL:「請將下一個ID插入此字段中。」
現在,我想我可以把一個INSERT
那麼UPDATE
查詢到我的SQL文件,但有沒有告訴MySQL的一般,是的,其實我是想插入0
到這個領域的一種方式?
有一點你必須小心:`sql_mode`是一個逗號分隔的標誌列表。如果你做`sql_mode ='NO_AUTO_VALUE_ON_ZERO'`,你可能會無意中禁用其他標誌 – Kip 2014-05-14 14:55:25
這個解決方案基本上爲我工作,但是我的轉儲還包括一些地方,它在SQL文件的中間覆蓋`sql_mode`,然後重置爲設置爲恢復到腳本末尾的變量OLD_SQL_MODE。這在我的腳本的中間覆蓋了我的`NO_AUTO_VALUE_ON_ZERO`,這使得這不起作用。我的解決方案是創建一個新的`INIT_OLD_SQL_MODE`變量,我用來重置到最後,並且在將`sql_mode`設置爲`NO_AUTO_VALUE_ON_ZERO`後,我設置了一個新變量'OLD_SQL_MODE`,這些臨時覆蓋可以重置爲 – 2016-06-03 21:36:44