基于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中,字符串类型的变量‘?'无需用引号进行包括,否则会报错。