C# 为什么这个SQLite脚本会影响多行?

C# 为什么这个SQLite脚本会影响多行?,c#,sql,sqlite,mono,ado.net,C#,Sql,Sqlite,Mono,Ado.net,我有以下简单的SQLite脚本来创建具有版本表的新数据库: BEGIN TRANSACTION; CREATE TABLE IF NOT EXISTS `db_versions` ( `version` integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, `name` varchar ( 50 ) DEFAULT NULL UNIQUE, `date_defined` datetime DEFAULT NULL,

我有以下简单的SQLite脚本来创建具有版本表的新数据库:

BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS `db_versions` (
    `version`   integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    `name`  varchar ( 50 ) DEFAULT NULL UNIQUE,
    `date_defined`  datetime DEFAULT NULL,
    `comments`  text
);
INSERT INTO `db_versions` VALUES (0,'initial-create','2017-12-02 14:41:56',NULL);
COMMIT;
在DB Browser for SQLite日志中运行此脚本可以正确地记录只有一行受到影响(插入)。但是,当我尝试用Mono(Mono.Data.Sqlite)在代码中执行此脚本时,该脚本显然会影响2行。这是代码:

using (var conn = new SqliteConnection(_connStr)) {
    await conn.OpenAsync(cancellationToken);
      using (SqliteCommand comm = conn.CreateCommand()) {
          comm.CommandType = CommandType.Text;
          comm.CommandText = @"
              BEGIN TRANSACTION;
              CREATE TABLE IF NOT EXISTS `db_versions` (
                  `version` integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
                  `name`    varchar ( 50 ) DEFAULT NULL UNIQUE,
                  `date_defined`    datetime DEFAULT NULL,
                  `comments`    text
              );
              INSERT INTO `db_versions` VALUES (0,'initial-create','2017-12-02 14:41:56',NULL);
              COMMIT;
          ";
          int rowsAffected = await comm.ExecuteNonQueryAsync(cancellationToken);
          if (rowsAffected > 1) {
              // Why is this code running??
          }
      }
}

有人知道我为什么会得到这些不同的结果吗?

啊,我知道了。正在定义integer
version
字段
AUTOINCREMENT
,该字段是内部
sqlite_序列
表的最大行ID。因此,添加了第二行。

嘎,我想出来了。正在定义integer
version
字段
AUTOINCREMENT
,该字段是内部
sqlite_序列
表的最大行ID。因此,添加了第二行。

出于好奇,如果删除插入而只保留创建,是否会返回一行?@pinkfloydx33问得好。如果没有
INSERT
语句,查询不会影响任何行。我还可以确认在INSERT语句运行之后,db中只有一行;似乎没有第二行被添加。出于好奇,如果删除insert而只保留create,是否会返回一行?@pinkfloydx33问得好。如果没有
INSERT
语句,查询不会影响任何行。我还可以确认在INSERT语句运行之后,db中只有一行;似乎没有添加第二行。我怀疑是因为自动递增而添加了第二行。@CodingYoshi很好,有:1行手动插入到新的
db_版本
表中,1行由SQLiteOh自动插入到
sqlite_序列
表中。是的,即使在db浏览器端,它也会这样做。为什么你会在意呢?我怀疑是因为自动递增而添加了第二行。@CodingYoshi好吧,有:1行手动插入到新的
db\u版本
表中,1行自动插入到SQLiteOh的
sqlite\u序列
表中。是的,即使在db浏览器端,它也会这样做。你为什么会在乎