回答

收藏

如何在SQLite中添加默认值?

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

我修改了一个表格,以这种方式向其中添加状态列
# I: H3 w* ^$ A6 V. iALTER TABLE ITEM ADD COLUMN STATUS VARCHAR DEFAULT 'N';
, U( P% @. g1 e3 D% C2 }但是,对于创建的任何新ITEM,SQLite似乎都不会将N添加到该列中。语法是否错误,或者SQLite及其对默认值的支持是否存在任何问题。
1 l4 A: z1 C4 X- E2 k: i( s我正在使用SQLite 3.6.22' [3 V; t/ x; Q* h5 a
                " A* J& ~- a  ^6 i
解决方案:
7 a( d4 U# a$ J5 g, ~                3 E- C. {( q2 t9 t5 R! t
, ]: @6 f! V1 |/ I' g
- B5 `& ~8 d7 L
                对我来说看上去很好。 这是文档。
5 S$ j' O' b( |sqlite> create table t1 (id INTEGER PRIMARY KEY, name TEXT, created DATE);
' H6 s) G2 R  a! esqlite> .table( i. U1 o9 @" }" v( S
t18 W" B% c6 p! J8 i
sqlite> .dump
7 a& @- \' N. u( n( mPRAGMA foreign_keys=OFF;1 [1 _6 O, ]+ P, }" Y0 H
BEGIN TRANSACTION;
" R# m1 O9 I+ [3 i& cCREATE TABLE t1 (id INTEGER PRIMARY KEY, name TEXT, created DATE);
4 P8 I& m$ G1 R/ hCOMMIT;
2 E9 l5 L) h! o. w1 rsqlite> alter table t1 add column status varchar default 'N';
! b, d2 }7 Q* a6 p9 c  ksqlite> .dump4 S( Q, M1 }2 k7 t& t% M
PRAGMA foreign_keys=OFF;
# s1 Q; P7 B; J' `) g7 j, oBEGIN TRANSACTION;
: Q3 n5 g* ?7 x) s+ h* g3 MCREATE TABLE t1 (id INTEGER PRIMARY KEY, name TEXT, created DATE, status varchar default 'N');2 l# m3 C- \/ C' i% h
COMMIT;4 O5 ?) Z3 o8 {: n' ]8 Y
sqlite> insert into t1 (name) values ("test");
4 N6 C' {2 N2 Y& Z. g3 Gsqlite> select * from t1;1 U3 t3 v  I( T1 z+ M! P: d
1|test||N2 @2 D4 l% i; f4 q; V
转储您的模式,并 在调用ALTER TABLE之后但在INSERT之前 验证 表结构是否存在。如果它在事务中,请 确保 在插入之前
* {$ B5 i8 T) w$ n提交事务  r2 x( K, f# |. |5 ]) b/ I
$ sqlite3 test.db ".dump"
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则