Đang sử dụng nút-mysql để thêm bản ghi vào cơ sở dữ liệu nhưng đang gặp khó khăn khi bản ghi được chèn là một mảng đối tượng và tôi cần thao tác là một giao dịch. Tôi đã đơn giản hóa vấn đề của mình bằng cách tạo một dự án thử nghiệm để giải thích rõ hơn vấn đề của mình
Giả sử tôi có các bảng users và orders và dữ liệu được chèn vào trông như thế này
var user = { name: "Dennis Wanyonyi", email: "example@email.com" }; var orders = [{ order_date: new Date(), price: 14.99 }, { order_date: new Date(), price: 39.99 }];Trước tiên, tôi muốn chèn một user vào cơ sở dữ liệu và sử dụng insertId để thêm từng orders cho người dùng đó. Đang sử dụng một giao dịch vì trong trường hợp xảy ra lỗi, tôi muốn khôi phục toàn bộ quá trình. Đây là cách tôi cố gắng chèn tất cả các bản ghi bằng các giao dịch nút-mysql
connection.beginTransaction(function(err) { if (err) { throw err; } connection.query('INSERT INTO users SET ?', user, function(err, result) { if (err) { return connection.rollback(function() { throw err; }); } for (var i = 0; i < orders.length; i++) { orders[i].user_id = result.insertId; connection.query('INSERT INTO orders SET ?', orders[i], function(err, result2) { if (err) { return connection.rollback(function() { throw err; }); } connection.commit(function(err) { if (err) { return connection.rollback(function() { throw err; }); } console.log('success!'); }); }); } }); });Tuy nhiên, tôi gặp sự cố khi lặp lại mảng orders mà không phải gọi connection.commit nhiều lần trong vòng lặp for
Tôi khuyên bạn nên tạo một chuỗi đơn giản cho truy vấn chèn nhiều hàng cho bảng đơn đặt hàng trong vòng lặp for trước rồi thực hiện nó bên ngoài vòng lặp for. Sử dụng vòng lặp for để chỉ tạo chuỗi. Vì vậy, bạn có thể khôi phục truy vấn bất cứ khi nào bạn muốn hoặc gặp lỗi. Bằng nhiều chuỗi truy vấn chèn, ý tôi là như sau
Để Chèn Bản ghi vào bảng cơ sở dữ liệu MySQL, có thể sử dụng truy vấn SQL. SQL là viết tắt của Structured Query Language và có thể được sử dụng để thực hiện các hoạt động khác nhau trên cơ sở dữ liệu MySQL
Truy vấn dưới đây được sử dụng để chèn một bản ghi vào bảng
INSERT INTO tableName ( column1, column2, …, columnN) VALUES ( value1, value2, …, valueN );
Ở đâu,
- tableName là tên của bảng mà bạn muốn chèn bản ghi vào,
- cột1, cột2, …, cột là tên của các trường khác nhau trong bảng,
- value1, value2, …, valueN đã chỉ định các bản ghi thực tế của cột tương ứng
Ghi chú. Nếu bảng có các cột đã được tạo thì có thể tránh trường cột
INSERT INTO tableName VALUES ( value1, value2, …, valueN );
Chèn bản ghi vào bảng cơ sở dữ liệu MySQL bằng NodeJS
Bản ghi có thể được chèn trực tiếp vào bảng bằng đối tượng kết nối MySQL. Trong quá trình kết nối NodeJS và MySQL, đối tượng kết nối này được tạo. Đối tượng kết nối này có một phương thức query() có thể lấy truy vấn SQL làm đối số để thực thi nó
Chèn một bản ghi bằng NodeJS
Chúng ta có thể chạy truy vấn chèn bản ghi bằng phương thức query() bằng cách chuyển truy vấn dưới dạng đối số. Phương thức này cũng lấy hàm gọi lại làm đối số, trong đó trước tiên chúng ta kiểm tra lỗi và sau đó in thuộc tính “afferedRows” của đối tượng trả về để xem có bao nhiêu bản ghi được xen kẽ
con.query("INSERT INTO tableName ( column1, column2, …, columnN) VALUES ( value1, value2, …, valueN )", function (err, result) { if (err) throw err; console.log("Number of records inserted: " + result.affectedRows); });
trong đó con là đối tượng kết nối
Chèn nhiều bản ghi bằng NodeJS
Để chèn nhiều bản ghi, chúng ta phải chuyển các bản ghi của các hàng thành các mảng riêng biệt sau đó kết hợp chúng trong một mảng khác rồi chuyển mảng cuối cùng làm đối số thứ hai cho phương thức query(). Cần phải xóa các giá trị khỏi truy vấn thực tế và thay vào đó sử dụng dấu chấm hỏi (?)
const values = [ [ value1, value2, ...., valueN ] // values of first row [ value1, value2, ...., valueN ] // values of second row [ value1, value2, ...., valueN ] // values of third row [ value1, value2, ...., valueN ] // values of fourth row ] con.query("INSERT INTO tableName ( column1, column2, …, columnN) VALUES ?", [values] , function (err, result) { if (err) throw err; console.log("Number of records inserted: " + result.affectedRows); });
trong đó con là đối tượng kết nối
Ví dụ về Chèn Bản ghi vào Bảng MySQL
Hãy xem một ví dụ để chèn các bản ghi vào bảng MySQL bằng NodeJS.
Bước 1. Chạy máy chủ MySQL ở chế độ nền
Bạn có thể sử dụng XAMPP cực kỳ nhanh, dễ cài đặt và có thể chạy máy chủ MySQL chỉ bằng một cú nhấp chuột.
Bước 2. Tạo một thư mục với một tập tin “ứng dụng. js” nơi chúng tôi viết mã của mình và mở nó trong trình chỉnh sửa mã
Bước 3. Mở terminal và gõ lệnh dưới đây để bắt đầu NPM.
npm init -y
Bước 4. Nhập lệnh dưới đây để cài đặt mô-đun MySQL
npm i mysql
Bước 5. Mở “ứng dụng. js” và nhập mô-đun MySQL
________số 8_______
Bước 6. Kết nối với máy chủ MySQL bằng phương thức createConnection() và connect()
const con = mysql.createConnection({ host: "localhost", user: "root", password: "", database: "newdatabase" }); con.connect(function (err) { if (err) { throw err; } });
Chúng tôi có một bài hướng dẫn riêng về tạo kết nối MySQL bằng NodeJS nếu bạn muốn đọc nó
Chúng tôi đã chỉ định cơ sở dữ liệu là “newdatabase” mà chúng tôi đã tạo trong hướng dẫn khác NodeJS MySQL Tạo cơ sở dữ liệu
Bước 7. Tạo một bảng. Chúng tôi có một bài hướng dẫn riêng về NodeJS MySQL Create Table nếu bạn muốn đọc nó
con.query("CREATE TABLE newtable (id INT, name VARCHAR(255),email VARCHAR(255))", function (err, result) { if (err) throw err; });
Bước 8. Tạo một mảng gồm nhiều mảng chứa các giá trị cho nhiều hàng, sau đó bên trong phương thức query() chuyển truy vấn, mảng và gọi lại. Trong cuộc gọi lại, chúng tôi kiểm tra lỗi và sau đó in số lượng bản ghi được chèn
var values = [ ['1', 'Aditya', 'aditya@gail.com'], ['1', 'Code For Geek', 'codeforgeek@gmail.com'], ]; con.query("INSERT INTO newtable VALUES ?", [values], function (err, result) { if (err) throw err; console.log("Number of records inserted: " + result.affectedRows); });
Bước 9. Nhập lệnh dưới đây để chạy ứng dụng
INSERT INTO tableName VALUES ( value1, value2, …, valueN ); 0
Mã thi đấu
INSERT INTO tableName VALUES ( value1, value2, …, valueN ); 1
đầu ra
Xác minh việc chèn bản ghi
Để xác minh rằng các bản ghi được chèn thành công, bạn có thể sử dụng truy vấn SQL bên dưới
CHỌN * TỪ tên bảng
điều này sẽ trả về một danh sách tất cả các bản ghi của một bảng
INSERT INTO tableName VALUES ( value1, value2, …, valueN ); 2
đầu ra
Tóm lược
Các bản ghi có thể được chèn vào một bảng bằng cách thực hiện truy vấn SQL để chèn các bản ghi bằng phương thức query() có thể chạy truy vấn trực tiếp trong NodeJS. Hy vọng hướng dẫn này sẽ giúp tìm hiểu quy trình chèn một hoặc nhiều bản ghi vào một bảng