PRAGMA writable_schema = 1;
UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE BOOKS ( title TEXT NOT NULL, publication_date TEXT)' WHERE NAME = 'BOOKS';
PRAGMA writable_schema = 0;
您需要关闭并重新打开连接,或者清空数据库以将更改重新加载到模式中。 举例来说:
Y:\> **sqlite3 booktest**
SQLite version 3.7.4
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> **create table BOOKS ( title TEXT NOT NULL, publication_date TEXT NOT
NULL);**
sqlite> **insert into BOOKS VALUES ("NULLTEST",null);**
Error: BOOKS.publication_date may not be NULL
sqlite> **PRAGMA writable_schema = 1;**
sqlite> **UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE BOOKS ( title TEXT NOT
NULL, publication_date TEXT)' WHERE NAME = 'BOOKS';**
sqlite> **PRAGMA writable_schema = 0;**
sqlite> **.q**
Y:\> **sqlite3 booktest**
SQLite version 3.7.4
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> **insert into BOOKS VALUES ("NULLTEST",null);**
sqlite> **.q**
我建议你使用DB Browser for SQLite。您可以轻松地更改约束。例如,在DB Browser for SQLite中,您可以转到Database Structure -> Right Click your table -> Click Modify Table ->并取消选中NN(Not Rank)列,然后单击OK。
7条答案
按热度按时间g9icjywg1#
在sqlite中没有ALTER COLUMN。
我相信你唯一的选择就是:
另一个Stackoverflow答案详细解释了这个过程
j8yoct9x2#
虽然没有ALTER COLUMN,但如果您只想重命名列,删除NOT NULL约束或更改数据类型,则可以使用以下一组危险命令:
您需要关闭并重新打开连接,或者清空数据库以将更改重新加载到模式中。
举例来说:
参考资料如下:
杂注可写模式
当此杂注为on时,可以使用普通的UPDATE、INSERT和DELETE语句更改SQLITE_MASTER表中的数据库。警告:误用此杂注很容易导致数据库文件损坏。
[alter table](来自http://www.sqlite.org/lang_altertable.html)
SQLite支持ALTER TABLE的有限子集。SQLite中的ALTER TABLE命令允许用户重命名表或向现有表添加新列。不能重命名列、删除列,也不能在表中添加或删除约束。
wkyowqbh3#
SQLite支持ALTER TABLE的有限子集。SQLite中的ALTER TABLE命令允许用户重命名表或向现有表添加新列。不能重命名列、删除列,也不能在表中添加或删除约束。但是你可以通过下面的步骤改变表列的数据类型或其他属性。
1.开始交易;
1.创建临时表t1_backup(a,b);
1.返回到t1_backup SELECT a,b FROM t1;
1.删除表t1;
1.从t1_备份中选择a,B;
1.承诺
有关更多详细信息,请参阅link。
xmjla07d4#
1.修改表的名字;
谢谢你帮我找到一个好方法!
8qgya5xd5#
ALTER COLUMN
在SQLite
中不存在。仅支持alter操作:
Alex Jasmin's answer shows possible way
参考文件:
brgchamk6#
我建议你使用DB Browser for SQLite。您可以轻松地更改约束。例如,在DB Browser for SQLite中,您可以转到Database Structure -> Right Click your table -> Click Modify Table ->并取消选中NN(Not Rank)列,然后单击OK。
7xzttuei7#
如果您所做的只是更改列的类型,那么您通常不需要更改列,因为SQLite是动态类型的,您可以放入列类型以外的数据;列类型更多的是一种建议,而不是其他任何东西。列的类型(强制规则)有一些怪癖,您可能需要解决这些问题,但是数据库将很乐意接受“错误”类型的数据。
实际上,您通常不会彻底更改列的类型(在典型的数据库中,您通常只更改类型的大小-例如
VARCHAR(16)
->VARCHAR(32)
-而不是类型的类别),因此,唯一需要努力解决的问题是NOT NULL约束-在这种情况下,你可以使用这里的其他有用的答案之一,以实现你正在寻找的。