Mysql2 chèn nhiều hàng

Vì vậy, giả sử bạn có một mảng dữ liệu lớn và bạn muốn chèn tất cả dữ liệu này vào cơ sở dữ liệu. Thực hiện một vòng lặp for và tạo một kết nối mới cho từng phần dữ liệu đơn lẻ là cách làm không tốt và rất kém hiệu quả. Chúng ta sẽ xem xét một số cách để có thể đạt được điều này một cách dễ dàng và một số cách để làm cho quy trình trở nên mạnh mẽ hơn

Kết nối với cơ sở dữ liệu

Vì vậy, để bắt đầu, hãy tạo một kết nối mysql mới. Trước tiên, hãy đảm bảo rằng chúng tôi có các gói mô-đun nút cần thiết

  • mysql

Tiếp theo hãy tiếp tục và tạo một kết nối mới. Tôi sẽ sử dụng ES6 cho các ví dụ mã

import mysql from 'mysql';
const connection = mysql.createConnection({
    host: 'localhost',
    user: 'username',
    password: 'super_secure_password',
    database: 'database_name'
});
connection.connect((error) => {
    if (error) {
        console.error(error);
    } else {
        console.log('connection successful');
    }
});

Ghi chú. bạn cần nhập các giá trị máy chủ, người dùng, mật khẩu và cơ sở dữ liệu của riêng mình

Bây giờ chúng ta có một kết nối tiêu chuẩn, hãy xem ví dụ về câu lệnh INSERT

connection.connect((error) => {
    if (error) {
        console.error(error);
    } else {
        let query = 'INSERT INTO user (name, age, occupation) VALUES (?, ?, ?);';
		let params = ['fred', 34, 'car sales'];
		connection.query(query, params, (error, result) => {
			// inserted row -> 1
		});
    }
});

Chỉ cần lướt qua mã một cách nhanh chóng;

  1. Chúng tôi tạo một kết nối mới (dòng 1)
  2. Viết chuỗi truy vấn của chúng tôi với liên kết tham số (dòng 5)
  3. Chúng tôi đặt các giá trị của mình vào một mảng (dòng 6)
  4. Chúng tôi chuyển chuỗi truy vấn, tham số và gọi lại cho kết nối (dòng 7)
  5. Dòng 8, bây giờ chúng ta có thể kiểm tra lỗi và xác thực rằng chúng ta đã thực sự chèn một bản ghi mới

Sử dụng liên kết tham số

Vì vậy, như bạn có thể đã nhận thấy ở trên, chúng tôi đã bắt đầu sử dụng liên kết tham số gốc cho gói NodeJS. Tuy nhiên, điều gì sẽ xảy ra nếu chúng tôi có 5 người dùng để chèn. Làm những gì chúng tôi đã làm ở trên, gấp 5 lần sẽ là một phương pháp rất kém hiệu quả. Chúng tôi không muốn tạo 5 kết nối mới và loại bỏ từng kết nối

Vì vậy, hãy sử dụng nhiều chức năng chèn gốc

connection.connect((error) => {
    if (error) {
        console.error(error);
    } else {
        let query = 'INSERT INTO user (name, age, occupation) VALUES ?;';
		let params = [
			['fred', 34, 'car sales'],
			['john', 21, 'gardner'],
			['peter', 17, 'postman'],
			['rob', 55, 'engineer']
		];
		connection.query(query, [params], (error, result) => {
			// inserted rows -> 4
		});
    }
});

Vì vậy, có một số điều cần đặc biệt chú ý ở đây

  1. Lưu ý rằng chúng tôi không có dấu ngoặc đơn xung quanh liên kết tham số sau từ khóa sql 'GIÁ TRỊ'
  2. Cũng lưu ý rằng chúng ta thực sự có một mảng ba lớp lồng nhau

Xây dựng truy vấn SQL thủ công

Vậy điều gì sẽ xảy ra nếu tất cả dữ liệu của bạn không nhất quán và bạn cần thực hiện những thay đổi nhỏ đối với truy vấn khi bạn chuyển qua dữ liệu. Chà, có thể sử dụng phương thức thoát của mysql theo cách thủ công. Tôi sẽ đi vào lý do tại sao chúng ta cần làm điều này trong một bài đăng khác, nhưng đủ để nói rằng, bạn phải

connection.connect((error) => {
    if (error) {
        console.error(error);
    } else {
		let data = [
			['fred''],
			['john'],
			['peter'],
			['rob']
		];
		let query = '';
		for(let user of data) {
			if(!user[0] !== 'fred') {
				query += 'INSERT INTO user (name) VALUES (' + mysql.escape(user[0]) + ');';
			}
		}
		connection.query(query, (error, result) => {
			// inserted rows -> 3
		});
    }
});

Sau đó, khá đơn giản, chỉ cần lặp qua dữ liệu của bạn (mảng hoặc đối tượng) và xây dựng chuỗi truy vấn của bạn tại một thời điểm. Như bạn có thể thấy, chúng tôi chỉ tạo truy vấn chèn mới nếu chỉ mục đầu tiên của dữ liệu không phải là 'fred'. Bạn có thể làm điều này phức tạp như bạn muốn để tạo ra các truy vấn năng động hơn bao giờ hết

VUI LÒNG đảm bảo rằng bạn thoát khỏi TẤT CẢ các tham số, nếu không, bạn có thể để bản thân mở rộng cho SQL Injection, điều này thật tệ

Kích thước gói tối đa

Vì vậy, tôi thực sự không gặp phải nhiều lỗi khi triển khai điều này trong một hệ thống trực tiếp, vì vậy tôi không có nhiều lời khuyên về những gì sai và tại sao;

Tôi đã cố gắng chèn hàng loạt khoảng 180.000 bản ghi từ một tệp CSV và tôi liên tục gặp lỗi. Khi tôi lần theo lỗi trở lại đầu ra của MySQL trong bảng điều khiển, tôi có thể thấy rằng máy chủ MySQL của mình đang chạy với một ‘maximum_allowed_packet’ khá nhỏ

Để kiểm tra kích thước gói hiện tại bạn đã đặt, chỉ cần chạy lệnh này và lệnh bên dưới để cập nhật biến

Ai đó có thể giúp tôi chèn nhiều hàng bằng mariadb không, đã kiểm tra trên stackoverflow mà không có giải pháp nào trong trường hợp của tôi. Tôi có thể chèn một hàng tốt, nhưng khi cần chèn 2 hàng, tôi gặp lỗi cú pháp. Tôi đã thử đặt tham số giá trị trong ngoặc nhưng không thành công

Đây là mã của tôi

const config = require('../config');
const mariadb  = require('mariadb');

const pool = mariadb.createPool({
	host: config.database.host,
	user: config.database.user,
	port: config.database.port,
	password: config.database.password,
	database: config.database.database,
	multipleStatements: true,
	connectionLimit: 5
});
app.post('/questions', (req, res) => {

let values = [];

for (var i = 0; i < multiAnswerId.length; i++) {
values.push(new Array(quiz_id, question_id, multiAnswerId[i], multiCorrect[i], time_start, userPicks.time_stop, student_id));
		}
var sql = `INSERT INTO Govt_choice_response (Quiz_id, Question_id, Answer_id, Correct, Time_start, Time_stop, Student_id)
		VALUES ?`;

		pool.query(sql, values, (err, data) => {
		})
		.then( rows => {
			if (question_id > qTotal) {
				res.send(`
					You finished the test! (Make a page later here with maybe some user data)
				`)
			}
			question_id ++;
			res.redirect('/questions');
		})	
		.catch(err => {
			console.log(err);
		})
     });
}

Bình luận

Nội dung được sao chép trên trang web này là tài sản của chủ sở hữu tương ứng và nội dung này không được MariaDB xem xét trước. Quan điểm, thông tin và ý kiến ​​được thể hiện bởi nội dung này không nhất thiết đại diện cho quan điểm của MariaDB hoặc bất kỳ bên nào khác

Bạn có thể chèn nhiều hàng trong SQL cùng một lúc không?

Truy vấn INSERT-SELECT-UNION để chèn nhiều bản ghi . Truy vấn SQL UNION giúp chọn tất cả dữ liệu đã được bao quanh bởi truy vấn SELECT thông qua câu lệnh INSERT.

Làm cách nào để chèn 10000 bản ghi trong MySQL?

Điều này sẽ làm điều đó trong một câu lệnh SQL. $sql=" CHÈN VÀO wp_usermeta ('user_id', 'meta_key', 'meta_value') GIÁ TRỊ ";

Làm cách nào để chèn 100 hàng trong SQL?

Để cộng các hàng, người dùng cần sử dụng câu lệnh chèn. .
cú pháp
Ví dụ – Một bảng có tên sinh viên phải được chèn các giá trị vào đó. Nó phải được thực hiện như sau
Đầu ra –
Đầu ra –
chèn nhiều hàng. Một bảng có thể lưu trữ tối đa 1000 hàng trong một câu lệnh chèn. .
cú pháp
Ví dụ – Xét một học sinh ngồi bàn. .
Đầu ra –

Làm cách nào để chèn 1500 bản ghi trong SQL?

SỬ DỤNG Khách hàngDB; . khoảng 130 cột nữa. ); . ),. 1500 hàng nữa