【问题标题】:How to create database and asociate table with it in Mysql NODEJS如何在 Mysql NODEJS 中创建数据库并关联表
【发布时间】:2021-07-31 12:41:55
【问题描述】:

我正在设置 mysql/nodejs 应用程序。

我想删除数据库,重新创建它并在每次服务器重启时创建表。

如果我指定与数据库的连接:

let con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "pass",
  database: "my_db",
});

我可以创建表、索引、插入值,但只是第一次。以后每次它都会告诉我一切都已经创建好了。

另一方面,如果我在创建连接时没有放置数据库,我可以删除数据库,创建新的,但是当我尝试创建一个表时,我收到一个错误,我没有与之关联的数据库表。

知道如何解决这个问题吗?

【问题讨论】:

    标签: mysql sql node.js


    【解决方案1】:

    连接中不需要数据库

    var pool  = mysql.createPool({
          connectionLimit : 10,
          host            : 'example.org',
          user            : 'bobby',
          password        : 'pass'
        });
    

    之后就可以创建数据库了

    pool.getConnection(function(err, connection){
        if(err){
            return cb(err);
        }
        connection.query("CREATE DATABASE mydb", function(err, data){
            connection.release();
            cb(err, data);
        });
    });
    

    并使用

    connection.changeUser({database : "mydb"});
    

    连接到新创建的数据库

    pool.getConnection(function(err, connection){
        if(err){
            return cb(err);
        }
        connection.changeUser({database : "mydb"});
      let createTodos = `create table if not exists mytable(
                              id int primary key auto_increment,
                              title varchar(255)not null,
                              testdata tinyint(1) not null default 0
                          )`;
    
      connection.query(createTodos, function(err, results, fields) {
        if (err) {
          console.log(err.message);
        };
    });
    

    这只是为了展示这个想法。

    【讨论】:

      【解决方案2】:
      1. 手动操作。
        • 如果您连接的用户拥有像超级用户一样的所有权限,您可以通过执行关注。
        DROP {DATABASE | SCHEMA} [IF EXISTS] db_name;
        
        • PS:这不是生产环境中要做的事情,因此请确保在最终部署之前将其删除,或者在 env!=production 时使其按照 env 运行。
      2. 例如使用 DB 迁移库 -> https://db-migrate.readthedocs.io/en/latest/Getting%20Started/commands/#dbdrop
        • 删除/重新创建数据库不是迁移的主要用例(迁移 = 在服务器启动时自动更改数据库),迁移本身就是一个由这些库自动执行的过程。

      【讨论】:

      • 但是我不会编码?这意味着我使用con.query 删除并创建数据库,然后一旦完成,我创建一个表并以某种方式将其与该数据库关联?
      • 对,你需要把它放在首先发生条件删除然后创建的顺序中,还要检查更新的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      相关资源
      最近更新 更多