null以外の制約を追加したり、デフォルトの制約を削除したりできないようです。テーブルに日時列を追加し、すべての値を任意に設定したいのですが(おそらく、1970年または2000年)、デフォルトなしではnullを使用できず、追加するとデフォルトを削除できないようです。この列を追加できますか?(もう一度、nullではない単なる日時)
6590 次
1 に答える
15
を使用する代わりにALTER TABLE ADD COLUMN
、余分な列を持つ新しいテーブルを作成し、古いデータをコピーします。これにより、の制限から解放され、デフォルト値なしで制約を設定できるようにALTER TABLE
なります。NOT NULL
ALTER TABLE YourTable RENAME TO OldTable;
CREATE TABLE YourTable (/* old cols */, NewColumn DATETIME NOT NULL);
INSERT INTO YourTable SELECT *, '2000-01-01 00:00:00' FROM OldTable;
DROP TABLE OldTable;
編集:ALTER TABLEの公式SQLiteドキュメントは、「トリガー、ビュー、および外部キー制約でそのテーブルへの参照が破損する可能性がある」ため、上記の手順に対して警告するようになりました。安全な代替手段は、次のように、新しいテーブルに一時的な名前を使用することです。
CREATE TABLE NewTable (/* old cols */, NewColumn DATETIME NOT NULL);
INSERT INTO NewTable SELECT *, '2000-01-01 00:00:00' FROM YourTable;
DROP TABLE YourTable;
ALTER TABLE NewTable RENAME TO YourTable;
于 2010-06-12T04:13:35.977 に答える