我需要修改SQLite數據庫中的列,但是我必須以編程方式執行,因爲數據庫已在生產中。從我的研究中,我發現爲了做到這一點,我必須做到以下幾點。SQLite修改列
- 新模式創建一個新的表從舊錶到新表
- 複製數據
- 刪除舊錶
- 重命名新表,舊錶命名
這似乎是一個對於那些應該相對容易的事情來說,可笑的工作量是很可觀的。有沒有更簡單的方法?我需要做的就是改變現有列的約束並給它一個默認值。
我需要修改SQLite數據庫中的列,但是我必須以編程方式執行,因爲數據庫已在生產中。從我的研究中,我發現爲了做到這一點,我必須做到以下幾點。SQLite修改列
這似乎是一個對於那些應該相對容易的事情來說,可笑的工作量是很可觀的。有沒有更簡單的方法?我需要做的就是改變現有列的約束並給它一個默認值。
這是SQLite的(在ALTER TABLE
沒有MODIFY COLUMN
支持)的較知名的缺點之一,但它的在list of SQL features that SQLite does not implement。
編輯:即提到,可能在將來的版本所支持的頁面進行了更新,以表明刪除位不再的情況下
當我跑了「CREATE TABLE tmp_table的AS SELECT ID,名字從src_table」 ,我失去了所有的列類型格式(例如,時間字段變成了一個整數字段
正如最初所述似乎應該更容易,但這是我做了什麼來解決。我有這個問題B/C我想要更改列中的非空字段,並且Sqlite不會真的有幫助。
使用'SQLite管理器' Firefox插件瀏覽器(使用你喜歡的)。我通過複製舊的create語句創建了新表,進行了修改並執行了它。然後爲了獲取複製的數據,我只突出顯示了行,然後單擊「將行復製爲SQL」,用我的表名替換「someTable」,然後執行SQL。
如果修改不是太大(例如,改變一個varchar的長度),你可以轉儲數據庫,手動編輯數據庫定義,然後再返回導入:
echo '.dump' | sqlite3 test.db > test.dump
然後打開該文件一個文本編輯器,搜索要修改,然後定義:
cat test.dump | sqlite3 new-test.db
在我的3BG homeserver.db中有很多大表,這需要100個小時來轉儲shema。是不是有辦法從我的數據庫中只轉儲一個表,在數據庫中刪除它,然後再次插入已更改的表? – rubo77 2017-01-10 19:08:07
的[修改列在sqlite3的類型]可能的複製(http://stackoverflow.com/questions/2083543/modify-a-columns -type-in-sqlite3) – rubo77 2017-01-10 20:01:39
我在這裏創建了一個腳本來重命名錶中的一個字段。 http://stackoverflow.com/a/41577393/1069083 – rubo77 2017-01-10 20:04:28