I can't reproduce your problem on version 3.07 using the interactive shell. Here's a transcript, after pasting the create statements from your post into the shell:
sqlite> insert into data (key_ref,value) values (1, 'abcd'); sqlite> select * from data; ref key_ref value reason user timestamp ---------- ---------- ---------- --------------- ---------- ---------- 1 1 abcd Initial version unknown none sqlite> select * from data_history; sqlite> insert into data (key_ref,value) values (2, 'efgh'); sqlite> select * from data; ref key_ref value reason user timestamp ---------- ---------- ---------- --------------- ---------- ---------- 1 1 abcd Initial version unknown none 2 2 efgh Initial version unknown none sqlite> select * from data_history; sqlite> update data set reason='Second version', user='Joe' where ref=1; sqlite> select * from data; ref key_ref value reason user timestamp ---------- ---------- ---------- -------------- ---------- ---------- 1 1 abcd Second version Joe none 2 2 efgh Initial versio unknown none sqlite> select * from data_history; ref data_ref value reason user timestamp ---------- ---------- ---------- --------------- ---------- ---------- 1 1 abcd Initial version unknown none When you submit a problem like this, it's a good idea to include code that will reproduce the problem when typed into the SQLite shell. If you can't reproduce the problem in the shell, you should say how you were accessing the database, i.e., from C, Tcl, Perl, etc. It's also a good idea to mention your operating system and the version of SQLite. Regards