VPN技术 · 2023年11月10日 0

创建MySQL数据库的Node.js方法

如何在Node.js中创建MySQL数据库

在Node.js中创建MySQL数据库的过程如下:

var mysql = require(mysql);
var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword"
});
con.connect(function(err) {
  if (err) throw err;
  console.log("连接成功!");
  con.query("CREATE DATABASE mydb", function (err, result) {
    if (err) throw err;
    console.log("MySQL数据库创建成功");
  });
});

将文件保存为 demo_node_mysql_create.js

然后运行:

npm demo_node_mysql_create.js 

运行结果为:

MySQL数据库创建成功

在创建带有主键的表时,需要为每条记录创建一个唯一键列。这可以通过将列定义为 “INT AUTO_INCREMENT PRIMARY KEY” 来实现,该列将为每条记录插入一个从1开始并递增的唯一数字。

var mysql = require(mysql);
var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});
con.connect(function(err) {
  if (err) throw err;
  console.log("连接成功!");
  var sql = "CREATE TABLE customers (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255))";
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log("表创建成功");
  });
});

如果表已经存在,可以使用 ALTER TABLE 关键字:

var mysql = require(mysql);
var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});
con.connect(function(err) {
  if (err) throw err;
  console.log("连接成功!");
  var sql = "ALTER TABLE customers ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY";
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log("表已修改");
  });
});

要向表中插入数据,可以使用 “INSERT INTO” 语句:

var mysql = require(mysql);
var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});
con.connect(function(err) {
  if (err) throw err;
  console.log("连接成功!");
  var sql = "INSERT INTO customers (name, address) VALUES (Company Inc, Highway 37)";
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log("1条记录已插入");
  });
});

也可以一次插入多条数据:

var mysql = require(mysql);
var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});
con.connect(function(err) {
  if (err) throw err;
  console.log("连接成功!");
  var sql = "INSERT INTO customers (name, address) VALUES ?";
  var values = [
    [John, Highway 71],
    [Peter, Lowstreet 4],
    [Amy, Apple st 652],
    [Hannah, Mountain 21],
    [Michael, Valley 345],
    [Sandy, Ocean blvd 2],
    [Betty, Green Grass 1],
    [Richard, Sky st 331],
    [Susan, One way 98],
    [Vicky, Yellow Garden 2],
    [Ben, Park Lane 38],
    [William, Central st 954],
    [Chuck, Main Road 989],
    [Viola, Sideway 1633]
  ];
  con.query(sql, [values], function (err, result) {
    if (err) throw err;
    console.log("插入的记录数:" + result.affectedRows);
  });
});

执行查询时,会返回一个结果对象。该对象包含关于查询如何影响表的信息。从上面的示例中,返回的结果对象为:

{ fieldCount: 0, affectedRows: 14, insertId: 0, serverStatus: 2, warningCount: 0, message: "记录数: 14 重复: 0 警告: 0", protocol41: true, changedRows: 0 }

要获取带有自动递增标识符字段的插入ID,可以查询结果对象。注意:要获取插入的ID,仅能插入一行。

var mysql = require(mysql);
var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});
con.connect(function(err) {
  if (err) throw err;
  var sql = "INSERT INTO customers (name, address) VALUES (Michelle, Blue Village 1)";
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log("1条记录已插入, ID: " + result.insertId);
  });
});

要从MySQL表中选择数据,请使用 “SELECT” 语句:

var mysql = require(mysql);
var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});
con.connect(function(err) {
  if (err) throw err;
  con.query("SELECT * FROM customers", function (err, result, fields) {
    if (err) throw err;
    console.log(result);
  });
});

要仅选择表中的特定列,请使用 “SELECT” 语句和列名:

var mysql = require(mysql);
var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});
con.connect(function(err) {
  if (err) throw err;
  con.query("SELECT name, address FROM customers", function (err, result, fields) {
    if (err) throw err;
    console.log(result);
  });
});

上述示例中,结果对象是一个数组,每行作为一个对象返回。要返回第三条记录的地址,只需引用第三个数组对象的地址属性:

console.log(result[2].address);

字段对象是一个数组,包含关于结果中每个字段的信息。要返回第二个字段的名称,只需引用第二个数组项的名称属性:

console.log(fields[1].name);

要选择带有过滤条件的记录,请使用 “WHERE” 语句:

var mysql = require(mysql);
var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});
con.connect(function(err) {
  if (err) throw err;
  con.query("SELECT * FROM customers WHERE address = Park Lane 38", function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});

也可以使用通配符选择以特定字母或短语开头、包含或结尾的记录。使用 % 通配符来表示零个、一个或多个字符:

var mysql = require(mysql);
var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});
con.connect(function(err) {
  if (err) throw err;
  con.query("SELECT * FROM customers WHERE address LIKE S%", function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});

当查询值是用户提供的变量时,应对查询值进行转义。这是为了防止SQL注入,这是常见的网络攻击手段,用于破坏或滥用数据库。MySQL模块提供了一种方法来转义查询值:

var adr = "Mountain 21";
var sql = "SELECT * FROM customers WHERE address = " + mysql.escape(adr);
con.query(sql, function (err, result) {
  if (err) throw err;
  console.log(result);
});

您还可以使用?作为要转义的值的占位符。在这种情况下,变量作为query()方法中的第二个参数传递:

var adr = "Mountain 21";
var sql = "SELECT * FROM customers WHERE address = ?";
con.query(sql, [adr], function (err, result) {
  if (err) throw err;
  console.log(result);
});

如果有多个占位符,数组将按占位符的顺序包含多个值:

var name = "Amy";
var adr = "Mountain 21";
var sql = "SELECT * FROM customers WHERE name = ? OR address = ?";
con.query(sql, [name, adr], function (err, result) {
  if (err) throw err;
  console.log(result);
});