如何在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);
});