在本教學中,您將學習如何從node.js應用程式將一行或多行插入到表中。
要在表中插入新行,請按照下列步驟操作:
connection
物件上呼叫query()
方法來執行INSERT語句。請注意,我們將重用包含MySQL資料庫資訊的config.js模組。
如果您沒有從上一個教學開始,那麼可以參考這裡的config.js
模組:
let config = {
host : 'localhost',
user : 'root',
password: '123456',
database: 'todoapp'
};
module.exports = config;
將一行資料插入表中
以下insert.js
程式將向todos
表中插入一個新行:
let mysql = require('mysql');
let config = require('./config.js');
let connection = mysql.createConnection(config);
// insert statment
let sql = `INSERT INTO todos(title,completed)
VALUES('Learn how to insert a new row',true)`;
// execute the insert statment
connection.query(sql);
connection.end();
下面,我們來執行insert.js
程式。
F:\worksp\mysql\nodejs\nodejs-connect>node insert.js
openssl config failed: error:02001003:system library:fopen:No such process
並檢查todos
表中的資料:
mysql> select * from todos;
+----+-------------------------------+-----------+
| id | title | completed |
+----+-------------------------------+-----------+
| 1 | Learn how to insert a new row | 1 |
+----+-------------------------------+-----------+
1 row in set (0.00 sec)
在上面查詢結果中,您可以看到,程式向todos
表中插入一個新行。
插入一行並返回插入的ID
以下insert-lastid.js
程式將一個新行插入到todos
表中,並返回插入的id
。
let mysql = require('mysql');
let config = require('./config.js');
let connection = mysql.createConnection(config);
let stmt = `INSERT INTO todos(title,completed)
VALUES(?,?)`;
let todo = ['Insert a new row with placeholders', false];
// execute the insert statment
connection.query(stmt, todo, (err, results, fields) => {
if (err) {
return console.error(err.message);
}
// get inserted id
console.log('Todo Id:' + results.insertId);
});
connection.end();
要將資料傳遞給SQL語句,請使用問號(?
)作為預留位置。
在這個例子中,我們分別使用兩個問號(?
,?
)作為title
和completed
欄位。
執行查詢後,可以從results
物件的insertId
屬性中獲取插入的id
,如下所示 -
F:\worksp\mysql\nodejs\nodejs-connect>node insert-lastid.js
openssl config failed: error:02001003:system library:fopen:No such process
Todo Id:2
一次插入多行
以下insert-more.js
程式一次將多行插入到todos
表中:
let mysql = require('mysql');
let config = require('./config.js');
let connection = mysql.createConnection(config);
// insert statment
let stmt = `INSERT INTO todos(title,completed) VALUES ? `;
let todos = [
['Insert multiple rows at a time', false],
['現在學習一次插入多行記錄(by www.tw511.com)', true],
['It should work perfectly', true]
];
// execute the insert statment
connection.query(stmt, [todos], (err, results, fields) => {
if (err) {
return console.error(err.message);
}
// get inserted rows
console.log('Row inserted:' + results.affectedRows);
});
// close the database connection
connection.end();
請注意,我們在INSERT
語句中只使用一個問號(?
),多行資料是陣列陣列。
您可以存取通過results
物件的affectedRows
屬性插入的行數。
F:\worksp\mysql\nodejs\nodejs-connect>node insert-more.js
openssl config failed: error:02001003:system library:fopen:No such process
Row inserted:3
如結果所示,插入了三行,這是像我們預期的那樣。
在本教學中,您已經學習了如何從node.js程式將一行或多行插入到表中。