回答

收藏

如何在SQLite中添加默认值?

技术问答 技术问答 338 人阅读 | 0 人回复 | 2023-09-14

我修改了一个表格,以这种方式向其中添加状态列
/ i: g( q+ K2 fALTER TABLE ITEM ADD COLUMN STATUS VARCHAR DEFAULT 'N';
& V2 s% \& [3 r. Z但是,对于创建的任何新ITEM,SQLite似乎都不会将N添加到该列中。语法是否错误,或者SQLite及其对默认值的支持是否存在任何问题。) ~1 p* R* c1 ~4 M
我正在使用SQLite 3.6.22
1 [1 ?+ j. A0 o$ ]: B/ c               
# ~1 u2 g, z+ }4 F7 Q5 G3 B' }解决方案:& ]: K  K$ t' V2 b9 s3 B0 D
                ' g' K% U+ H, S- L+ f5 y9 b2 t, P

: O7 o$ ?- {' }" i
9 W  U' t1 y& O! I8 s7 n                对我来说看上去很好。 这是文档。
3 f. P$ {% m' ^, b8 jsqlite> create table t1 (id INTEGER PRIMARY KEY, name TEXT, created DATE);( j$ q  |' |( D
sqlite> .table
4 |8 e$ m5 U4 |( `5 Bt1# ~/ r* J: a- ~. Z" U# ~
sqlite> .dump- I5 M  b) A4 |* H; C' ^: n# ~. M
PRAGMA foreign_keys=OFF;
: P7 B* S/ F6 ~9 NBEGIN TRANSACTION;4 d' m7 u/ A% c. {
CREATE TABLE t1 (id INTEGER PRIMARY KEY, name TEXT, created DATE);( M  C% u7 V3 K( U0 U
COMMIT;" \1 p3 z9 Y! d
sqlite> alter table t1 add column status varchar default 'N';
/ z) r. ]: Q& h5 D# F% M- Lsqlite> .dump1 g, E# g" w, i4 \( S' Y
PRAGMA foreign_keys=OFF;% }9 E+ t. E% s0 ?; I& L, l
BEGIN TRANSACTION;( h7 \# X2 m! Y* x4 z' u& ?; ~" l
CREATE TABLE t1 (id INTEGER PRIMARY KEY, name TEXT, created DATE, status varchar default 'N');: J; }0 A8 w$ X( b8 f
COMMIT;9 T6 Z. i  ]  p
sqlite> insert into t1 (name) values ("test");# q$ F  \4 e/ G; M" S! ^! @* X% U
sqlite> select * from t1;) D8 l8 u' R: Q/ y
1|test||N
. k" b' ]9 D. l3 r. m) i- U. n转储您的模式,并 在调用ALTER TABLE之后但在INSERT之前 验证 表结构是否存在。如果它在事务中,请 确保 在插入之前% R& G. w5 U3 Y* B
提交事务
: l4 y; n% p7 E% g4 k$ sqlite3 test.db ".dump"
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则