基于node.js的express使用mysql语句在插入数据时防重插入

基于node.js的express使用mysql语句在插入数据时防重插入

1.在使用MySQL进行插入数据的时候,使用以下语句能够避免重复数据进行插入,即过滤相同的数据

例如:
某数据库某表的字段如下:

	CREATE TABLE IF NOT EXISTS BooksInfo(
	BooksInfoId VARCHAR(20),/*primaryKey,需为图书id*/
	title VARCHAR(50) NOT NULL,/*图书姓名*/
	num INT UNSIGNED NOT NULL,/*图书总数目*/
	pos VARCHAR(50) NOT NULL,/*图书位置*/
	PRIMARY KEY (BooksInfoId)
)

那么,进行防重插入的SQL语句如下:

INSERT INTO BooksInfo(BooksInfoId,title,num,pos) 
SELECT 'a115','数据结构与算法',500,'c区'
FROM DUAL
WHERE NOT EXISTS
(
	SELECT BooksInfoId,title,num,pos
	FROM BooksInfo
	WHERE BooksInfoId='a115' AND title='数据结构与算法' AND num=500 AND pos='c区'
);

2.在使用基于node.js的express框架进行设计时,进行如下定义即可保证防重插入

在base.js中:

var mysql = require('mysql')

class Base {
    constructor() {
        this.CONNECT;
    }

    CreateConnect() {
        this.CONNECT = mysql.createConnection({
            host: 'localhost',
            port: '3306',
            user: 'root',
            password: '0610',
            database: 'libraryManagementSystem'
        })
    }
}


module.exports = { Base }

在bookData.js中:

const Base = require('./Base')

const addData =
    "INSERT INTO BooksInfo(BooksInfoId,title,num,pos) SELECT ?,?,?,? FROM DUAL WHERE NOT EXISTS(SELECT BooksInfoId,title,num,pos FROM BooksInfo WHERE BooksInfoId=? AND title=? AND num=? AND pos=?);"

class Books extends Base.Base {
    constructor() {
        super()
    }

	//增添数据
    addData(message, callback) {
        this.CreateConnect()
        let CONNECT = this.CONNECT
        CONNECT.connect()
        CONNECT.query(addData,
            [message.BooksInfoId, message.title, message.num, message.pos, message.BooksInfoId, message.title, message.num, message.pos],
            (err, result) => {
                if (err) {
                    console.log('[ADD ERROR]:', err.message);
                    callback(-1);
                    CONNECT.end();
                    return;
                }
                callback(0);
                CONNECT.end();
            })
    }
}


module.exports = { Books }

TIPS:在const addData中,字符串类型的变量‘?'无需用引号进行包括,否则会报错。

上一篇:React 入门学习(十五)-- React-Redux 基本使用


下一篇:linux进入mysql数据库报ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/tmp/mysql.s