我已经搜索了一个小时,但是没有解决方案可以解决我的问题。
我想运行此代码:
for (var skin in body){
connection.query(`IF NOT EXISTS(SELECT MarketName FROM Skins WHERE MarketName = ?);
THEN
INSERT INTO Skins (MarketName) VALUES (?);
END IF;`,[skin, skin]); }
但是,如果我使用nodejs运行此错误,则会得到此错误:
/var/www/html/bot/node_modules/mysql/lib/protocol/parser.js:80 投掷错误;//rethrow non-mysql错误 ^ 错误:er_parse_error:您的SQL语法中有错误; 查看与您的MySQL Server版本相对应的手册,以获取合适的语法,即将使用' MarketName ='Nova |的皮肤月亮在第1行 在query.sequence._packettoerror(/var/www/html/bot/node_modules/mysql/lib/protocol/protocol/seperences/secorence/secorence.js:52:14) 在query.errorpacket(/var/www/html/bot/node_modules/mysql/lib/protocol/protocol/query.js:77:18) at stolopt._parsepacket(/var/www/html/bot/node_modules/mysql/lib/protocol/protocol.js:279:23) 在parser.write(/var/www/html/bot/node_modules/mysql/lib/parocol/parser.js:76:12) at protoct.write(/var/www/html/bot/node_modules/mysql/lib/protocol/protocol.js:39:16) 在插座。(/var/www/html/bot/node_modules/mysql/lib/connection.js:103:28) 在Emitone(Events.js:115:13) 在socket.emit(event.js:210:7) 在AddChunk(_Stream_readable.js:266:12) 在ReadableAddchunk(_Stream_readable.js:253:11) ----------------------------- at protoct._enqueue(/var/www/html/bot/node_modules/mysql/lib/protocol/protocol.js:145:48) at Connection.query(/var/www/html/bot/node_modules/mysql/lib/connection.js:208:25) 在request._callback(/var/www/html/bot/index.js:531:16) 在request.self.callback(/var/www/html/bot/node_modules/request/request.js:186:22) 在Emittwo(Event.js:125:13) 在Request.Mit(Events.js:213:7) 应要求。(/var/www/html/bot/node_modules/request/request.js:1163:10) 在Emitone(Events.js:115:13) 在Request.Mit(Event.js:210:7) 在即将到来的时间。(/var/www/html/bot/node_modules/request/request.js:1085:12)
我将感谢您的帮助。
MySQL仅允许编程块中的IF
语句 - 存储过程,触发器等。
正确的方法是在Skins(MarketName)
上创建唯一的索引或约束。这样,数据库确保数据的完整性。您可以这样做:
create unique index unq_skins_marketname on Skins(MarketName);
然后,尝试插入重复的尝试将导致错误。您通常可以通过这样做避免这种情况:
insert into skins(marketname)
values (?)
on duplicate key marketname = values(marketname); -- this is a no-op