SQLite3 相同的 .read 文件在一个会话中有效,但在下一个会话中无效

斯普莱桑

我在我从 sqlite3 终端运行的文件中准备了大量 sql 语句(插入调用)

.read tmp/commands.sql

当我在会话 #1 中运行该命令一次或多次时,一切顺利,没有错误,结果正如预期的那样,忽略可以防止重复项的错误消息)。

现在,如果我退出 sqlite3,.quit然后立即返回并运行相同的命令,.read tmp/commands.sql我在我的 commands.sql 中为每个 sql 调用获得一条错误消息"Error: near line xxx: FOREIGN KEY constraint failed"

  • 我的数据库由两个具有关系的表组成
  • 在第二个表中定义了一个外键,以链接到其唯一 ID (FolderID) 上的第一个表
  • 在sql脚本的开头,我添加PRAGMA foreign_keys = true;了我认为允许关系

你能解释一下为什么会在第二次会议上发生这种情况吗?

谢谢


commands.sql 文件中的第一个调用将如下所示

PRAGMA foreign_keys = true;


/*
------------------------------------------------------------------
adding data in Folders for '0003_Runs/HiSeq2500/190921_7001450_0495_AH5JJ7BCX3
------------------------------------------------------------------
*/

INSERT OR IGNORE INTO Folders 
  (
  Creator, 
  CreatorVersion, 
  DBAddDate, 
  FolderPath, 
  FolderName, 
  FolderSize, 
  Protection, 
  DeviceModel, 
  StartDate, 
  DeviceID, 
  RunNr, 
  FlowCellID, 
  ProjectNR, 
  Status, 
  DeliveryDate, 
  Comment
  )
VALUES (
  "AddIlluminaFolders2", 
  " 1.0; 2020-09-11", 
  "1600864879", 
  "0003_Runs/HiSeq2500", 
  "190921_7001450_0495_AH5JJ7BCX3", 
  "183173644288", 
  "0", 
  "HiSeq2500", 
  "190921", 
  "7001450", 
  "0495", 
  "AH5JJ7BCX3", 
  "", 
  "done", 
  "", 
  ""
  );

/*
------------------------------------------------------------------
adding data in Actions for 0003_Runs/HiSeq2500/190921_7001450_0495_AH5JJ7BCX3
------------------------------------------------------------------
*/

INSERT OR IGNORE INTO Actions 
  (
  FolderID,
  Creator, 
  CreatorVersion, 
  ActionDate, 
  ActionName, 
  Comment
  )
VALUES (
  last_insert_rowid(),
  "AddIlluminaFolders2", 
  " 1.0; 2020-09-11", 
  "1600864879", 
  "AddIlluminaFolders2", 
  ""
  );

-- ----------------------------------------------------------------

后跟许多其他相同类型的块,直到文件结束 PRAGMA foreign_keys = true;

数据库模式

这是我的完整表格定义

/*
 Database structure for NCDataMngr and BigData_viewer
 Author: Stéphane Plaisance - VIB-Nucleomics Core
 database version: 1.0 - 2020-09-11
 File Encoding         : utf-8
 REM: edit below if you change the database schema
 => INSERT INTO "version" (vnum, vdate) VALUES ("1.0", "2020-09-11");
*/

PRAGMA foreign_keys = false;

-- ----------------------------
--  Table structure for Folders
-- ----------------------------
DROP TABLE IF EXISTS "Folders";
CREATE TABLE "Folders" (
     "FolderID" INTEGER NOT NULL PRIMARY KEY,
     "Creator" TEXT(255,0),
     "CreatorVersion" TEXT(255,0),
     "DBAddDate" TEXT(255,0),
     "FolderPath" TEXT(255,0) NOT NULL,
     "FolderName" TEXT(255,0) NOT NULL,
     "FolderSize" INTEGER(20,0),
     "Protection" INTEGER(1,0),
     "DeviceModel" TEXT(255,0),
     "StartDate" TEXT(255,0),
     "DeviceID" TEXT(255,0),
     "RunNr" TEXT(255,0),
     "FlowCellID" TEXT(255,0),
     "ProjectNR" TEXT(255,0),
     "Status" TEXT(255,0),
     "DeliveryDate" TEXT(255,0),
     "Comment" TEXT(255,0)
);
INSERT INTO "main".sqlite_sequence (name, seq) VALUES ("Folders", '0');

-- ----------------------------
--  Table structure for Actions
-- ----------------------------
DROP TABLE IF EXISTS "Actions";
CREATE TABLE "Actions" (
     "FolderID" INTEGER NOT NULL,
     "ActionID" INTEGER NOT NULL PRIMARY KEY,
     "Creator" TEXT(255,0),
     "CreatorVersion" TEXT(255,0),
     "ActionDate" TEXT,
     "ActionName" TEXT(255,0),
     "Comment" TEXT(255,0),
    CONSTRAINT "Folders2Actions" FOREIGN KEY ("FolderID") REFERENCES "Folders" ("FolderID") ON DELETE CASCADE ON UPDATE CASCADE
);
INSERT INTO "main".sqlite_sequence (name, seq) VALUES ("Actions", '0');

-- ----------------------------
--  Table structure for version
-- ----------------------------
DROP TABLE IF EXISTS "version";
CREATE TABLE "version" (
     "vnum" text,
     "vdate" text
);
INSERT INTO "main".sqlite_sequence (name, seq) VALUES ("version", '0');
INSERT INTO "version" (vnum, vdate) VALUES ("1.1", "2020-09-23");

-- ----------------------------
--  View structure for ActionView
-- ----------------------------
DROP VIEW IF EXISTS "ActionView";
CREATE VIEW "ActionView" AS SELECT
Actions.*,
Folders.FolderName
FROM
Actions
INNER JOIN Folders ON Folders.FolderID = Actions.FolderID
ORDER BY
Actions.FolderID ASC,
Actions.ActionID ASC;

-- ----------------------------
--  View structure for FolderView
-- ----------------------------
DROP VIEW IF EXISTS "FolderView";
CREATE VIEW "FolderView" AS SELECT
Folders.*
FROM
Folders
ORDER BY
Folders.FolderID ASC;

-- ----------------------------
--  Indexes structure for table Folders
-- ----------------------------
CREATE UNIQUE INDEX "idx_Folders_FolderPath_FolderName" on Folders ( "FolderPath", "FolderName" );

-- ----------------------------
--  Indexes structure for table Actions
-- ----------------------------
CREATE INDEX "idx_Actions_FolderID" ON Actions ("FolderID" ASC);
CREATE UNIQUE INDEX "idx_Actions_FolderID_Creator" ON Actions ("FolderID" ASC, "Creator");

PRAGMA foreign_keys = true;
DinoCoderSaurus

last_insert_rowid()。在同一会话中多次运行 commands.sql 时,last_insert_rowid()插入最后一行的值。永远不会出现 FOREIGN KEY 失败。调用新会话时,不会插入任何行(由于“重复”),last_insert_rowid()其值为 0,因此操作插入时会违反 FOREIGN KEY。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

仅在sqlite3中其他列相同时才如何查询列总和?

Sqlite3 Python中的DateExpiry

生成的SQL查询未返回与sqlite3 HDBC中的相应静态查询相同的内容

curve()在第一个示例中有效,但在第二个示例中无效,但是它们看起来相同。为什么?

使用C ++创建一个sqlite3表

sqlite3绑定第一个项目

对sqlite3中所有具有相同ID的行求和

为什么在Lua的文件中有一个“ *”:read(“ * a”)?

如何在python sqlite3嵌套查询中两次传递相同的参数?

在SQLite3中,是否有一种方法可以在另一个字段具有相同的值时不允许重复的字段?

在Windows 7中,为什么在一个目录中有相同的文件?

两个几乎相同的查询,一个有效,另一个无效,这是怎么回事?

当两个进程同时执行相同的代码时,Cherrypy + sqlite3 + Peewee崩溃

比较相同的字符串,其中一个来自Flask,另一个来自sqlite3数据库

sqlite3无法导入.csv文件

将多个相同的SQLite查询合并为一个

在sqlite3中有一个或两个数字的限制python

Python3 - 列表中最接近的前一个和下一个元素(视为循环)具有有效值

SQLITE3 - 删除具有相同值的多列的行

bash,从文件名的开头获取前3个相同字符的所有最后一个文件

2 个相同的绑定......一个有效,另一个无效

同一工作表中的相同 VBA 代码用于 2 组不同的表,第一个有效,第二个无效

sqlite3 的路径有问题?

备份一个 sqlite3 数据库

SQLITE3:将多个 sqlite3 文件合并为一个

一个表中的两个外键 sqlite3

使用相同的 ID 更新 sqlite3 中的多行

检查列表的下一个元素是否与前一个相同

如何找出文件中一个数字和下一个相同数字之间的行数?