gpt4 book ai didi

node.js - SQLite3 - 在一条语句中创建多个表

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:24 25 4
gpt4 key购买 nike

我正在学习 Node js,并使用 SQLite3 创建一个可移植项目/任务/工作流工具(它最终会出现在 github 上)。

如果这是用户第一次运行 Node 应用程序(并且 SQLite 数据库文件不存在),我希望它运行安装 SQL 脚本来创建它需要工作的所有表。

我可以将它们全部作为单独的事务来完成,但这看起来很困惑,而且在一次调用中完成所有这些要容易得多。

在 Oracle 中,我知道我可以将它们全部包装如下:

BEGIN CREATE TABLE1...; CREATE TABLE2...; END;

不过,我对 SQLite 不太了解(并且不知道我是否可以做我想做的事情)。

下面的代码仅创建第一个表(而不是其他表)。

谢谢。

Express Node JS 应用在启动时调用 SQL

// Declare Express
var express = require('express');

// Instantiate Express
var app = express();

// Create a http server with express
var server = require('http').createServer(app);

// Instantiate socket on the http express server
var io = require('socket.io').listen(server);

// Declare filesystem
var fs = require('fs');

// Database File
var db_file = './sqlite/db-rhubarb.sqlite';

// Check if the dataexists
var db_exists = fs.existsSync(db_file);

// Declare sqlite3
var sqlite3 = require('sqlite3').verbose();

// Instantiate sqlite3 database
var db = new sqlite3.Database(db_file);

// Check if a database exists - create if on first run
db.serialize(function() {
//if (!fs.existsSync(db_file)) {
console.log("Can't find a SQLite database, creating one now...");
var install_sql = fs.readFileSync('./sqlite/sql/install.sql', 'utf-8');
db.run(install_sql);

//}
});

// Application port (this is what eg localhost:1227)
var port = 1127;

// Tell server listen on port
server.listen(port);
console.log("Running application on port: "+port);

安装 SQL

/* Create the contacts table */
CREATE TABLE IF NOT EXISTS 'main'.'contacts' ( "contact_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
"date_added" DATETIME DEFAULT CURRENT_TIMESTAMP,
"user_id_created" INTEGER );

/* Create the contacts attribute table */
CREATE TABLE IF NOT EXISTS "main"."contact_attributes" ( "cont_attr_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
"contact_id" INTEGER,
"date_created" DATETIME DEFAULT CURRENT_TIMESTAMP,
"user_id_created" INTEGER,
"attr_name" VARCHAR,
"attr_value" VARCHAR );

/* Create the task table */
CREATE TABLE IF NOT EXISTS "main"."tasks" ( "task_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
"date_created" DATETIME DEFAULT CURRENT_TIMESTAMP,
"user_id_created" INTEGER,
"task_value" VARCHAR );

/* Create the tag table */
CREATE TABLE IF NOT EXISTS "main"."tags" ( "tag_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
"date_created" DATETIME DEFAULT CURRENT_TIMESTAMP,
"user_id_created" INTEGER,
"tag_value" VARCHAR UNIQUE );

/* Create the tag mapping table */
CREATE TABLE IF NOT EXISTS "main"."map_tag_task" ( "map_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
"date_created" DATETIME DEFAULT CURRENT_TIMESTAMP,
"user_id_created" INTEGER,
"tag_id" INTEGER,
"task_id" INTEGER );

/* Create the log table */
CREATE TABLE IF NOT EXISTS "main"."logs" ( "log_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
"date_created" DATETIME DEFAULT CURRENT_TIMESTAMP,
"user_id_created" INTEGER,
"task_id" INTEGER,
"log_value" VARCHAR );

/* Create the task messages table */
CREATE TABLE IF NOT EXISTS "main"."messages" ( "message_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
"date_created" DATETIME DEFAULT CURRENT_TIMESTAMP,
"user_id_created" INTEGER,
"task_id" INTEGER,
"message_value" VARCHAR );

/* Create the users table */
CREATE TABLE IF NOT EXISTS "main"."users" ( "user_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
"forename" VARCHAR,
"surname" VARCHAR,
"password" VARCHAR,
"salt" VARCHAR );

最佳答案

看起来无法完成...在 Stack Overflow 上找到了类似问题的答案:

Only first table in create table statement being created

关于node.js - SQLite3 - 在一条语句中创建多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27669987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com