如何在SQLite中有一个自动的时间戳?

我有一个SQLite数据库,版本3,我正在使用C#来创build使用此数据库的应用程序。

我想在表中使用timestamp字段来实现并发,但是我注意到当我插入一个新的logging时,这个字段没有设置,并且为空。

例如,在MS SQL Server中,如果我使用时间戳字段,则数据库会更新这个字段,所以我不必自己设置。 这是可能的SQLite?

只要声明一个字段的默认值:

CREATE TABLE MyTable( ID INTEGER PRIMARY KEY, Name TEXT, Other STUFF, Timestamp DATETIME DEFAULT CURRENT_TIMESTAMP ); 

但是,如果您的INSERT命令显式将此字段设置为NULL ,它将被设置为NULL

你可以在SQLite的表中创buildTIMESTAMP字段,看看这个:

 CREATE TABLE my_table ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VARCHAR(64), sqltime TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL ); INSERT INTO my_table(name, sqltime) VALUES('test1', '2010-05-28T15:36:56.200'); INSERT INTO my_table(name, sqltime) VALUES('test2', '2010-08-28T13:40:02.200'); INSERT INTO my_table(name) VALUES('test3'); 

这是结果:

 SELECT * FROM my_table; 

在这里输入图像说明

您可以使用自定义date时间通过使用…

  create table noteTable3 (created_at DATETIME DEFAULT (STRFTIME('%d-%m-%Y %H:%M', 'NOW','localtime')), title text not null, myNotes text not null); 

使用“NOW”,“localtime”获取当前的系统date,否则在你的数据库插入时间后,它会显示你的数据库中的一些过去或其他时间。

谢谢…

阅读datefunc自动date时间完成的一个工作示例将是:

 sqlite> CREATE TABLE 'test' ( ...> 'id' INTEGER PRIMARY KEY, ...> 'dt1' DATETIME NOT NULL DEFAULT (datetime(CURRENT_TIMESTAMP, 'localtime')), ...> 'dt2' DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime')), ...> 'dt3' DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%d %H:%M:%f', 'now', 'localtime')) ...> ); 

让我们以启动自动date时间完成的方式插入一些行:

 sqlite> INSERT INTO 'test' ('id') VALUES (null); sqlite> INSERT INTO 'test' ('id') VALUES (null); 

存储的数据清楚地表明,前两个是相同的,但不是第三个function:

 sqlite> SELECT * FROM 'test'; 1|2017-09-26 09:10:08|2017-09-26 09:10:08|2017-09-26 09:10:08.053 2|2017-09-26 09:10:56|2017-09-26 09:10:56|2017-09-26 09:10:56.894 

请注意,SQLite函数被包围在括号中! 这个例子有多难?

玩的开心!

为了补充上面的答案…

如果您使用的是EF,则使用数据注解[时间戳]对属性进行装饰,然后转到您的上下文类中的重写OnModelCreating,并添加以下Fluent API代码:

 modelBuilder.Entity<YourEntity>() .Property(b => b.Timestamp) .ValueGeneratedOnAddOrUpdate() .IsConcurrencyToken() .ForSqliteHasDefaultValueSql("CURRENT_TIMESTAMP"); 

它将为将要插入到此表中的每个数据设置一个默认值。