在这里我插入用户详细信息username,emailid和contactno,而userid是用户表的主键。
我的查询是,当我插入重复的用户名或emailid时,如果在表中听到重复的记录,则不允许插入记录,这是怎么可能的?
app.js
app.post('/saveNewUserDetails',function(req,res){
var form = new multiparty.Form();
form.parse(req, function(err, fields, files){
connection.query("INSERT INTO user (username,emailid,contactno) VALUES (?,?,?)", [fields.username,fields.emailid,fields.contactno] , function (error, results, fields) {
if (error) throw error;
res.send({
'status':'1',
'success': 'true',
'payload': results,
'message':'New user Is saved'
});
});
});
});
用户
userid(primary key) username emailid contactno
1 user-1 user1@user1.com 1234567890
2 user-2 user2@user2.com 1234444444
答案 0 :(得分:1)
您应在CREATE语句中将username
和emailid
设置为UNIQUE
字段。
答案 1 :(得分:1)
对于每个条目,我们都无法检查该记录在数据库中的存在,因为这需要一些时间。
,因此我们将用户名和emailid设置为表中的UNIQUE字段。 因此,每当我们尝试向表中插入重复元素时,都会出现Duplicate key错误。
现在,我们将把该错误作为一种优势,通过简单地处理它来加快过程。
// pseudo code
// we are simply ignoring it
if( error & error != "ER_DUP_ENTRY" ){
// do normal error handling
}
这是避免重复插入的最快解决方案
答案 2 :(得分:0)
怎么可能?-检查带有user
表中记录的要发送给API的字段。确保它们不存在。
有关客户端应用程序的更多详细信息,我建议在插入之前检查数据库表是否存在记录。
这是您的问题的解决方案:
app.post('/saveNewUserDetails',
async (req,res) => {
try {
const {fields} = await parseRequestBody(req);
const {username, emailid, contactno} = fields;
console.log('/saveNewUserDetails', 'fields:', fields); // for debug purposes
const exists = await userExists(username, emailid);
if (exists) throw new Error('User data already exists');
const result = await createUser(username, emailid, contactno);
res.status(201).send({
'status': '1',
'success': 'true',
'payload': result,
'message': 'New user Is saved'
});
}
catch (error) {
res.status(400).send({
'success': false,
'message': error.message
});
}
});
const parseRequestBody = request => {
return new Promise((resolve, reject) => {
const form = new multiparty.Form();
form.parse(request, (error, fields, files) => {
if (error) return reject(error);
resolve({fields, files});
});
});
};
const userExists = (username, emailid) => {
return new Promise((resolve) => {
connection.query(
'SELECT userid FROM user WHERE username = ? OR emailid = ? LIMIT 1',
[username, emailid],
(error, result) => {
if (error) return reject(error);
if (result && result[0]) {
console.log('User exists:', result); // for debug purposes
return resolve(true);
}
resolve(false);
});
});
};
const createUser = (username, emailid, contactno) => {
return new Promise((resolve) => {
connection.query(
'INSERT INTO user (username, emailid, contactno) VALUES (?, ?, ?)',
[username, emailid, contactno],
(error, result) => {
if (error) return reject(error);
resolve(result);
});
});
};