Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用节点mysql检测插入/更新SQL查询的智能方法_Mysql_Sql_Regex_Node.js - Fatal编程技术网

使用节点mysql检测插入/更新SQL查询的智能方法

使用节点mysql检测插入/更新SQL查询的智能方法,mysql,sql,regex,node.js,Mysql,Sql,Regex,Node.js,我正在使用Node.js和。我需要检测SQL查询是INSERT语句还是UPDATE语句 现在,我正在通过一个测试regexp运行SQL字符串,类似于以下内容(我知道regexp可以更好,这只是为了解释我自己): Pool.\u isInsertOrUpdate=函数(sql){ 返回(/^(更新|插入)\s+/i).test(sql); }; 有更聪明的方法吗?这里的问题是,你为什么需要知道这一点?假设有一个合理的原因,您可以用sql传递一个标志。@我知道这听起来很奇怪,但我需要将INSERT

我正在使用Node.js和。我需要检测SQL查询是INSERT语句还是UPDATE语句

现在,我正在通过一个测试regexp运行SQL字符串,类似于以下内容(我知道regexp可以更好,这只是为了解释我自己):

Pool.\u isInsertOrUpdate=函数(sql){
返回(/^(更新|插入)\s+/i).test(sql);
};

有更聪明的方法吗?

这里的问题是,你为什么需要知道这一点?假设有一个合理的原因,您可以用sql传递一个标志。@我知道这听起来很奇怪,但我需要将INSERT或UPDATE查询重定向到特定的数据库池(读和写),而不选择一个带有标志的数据库池。类似于Rails Gem的功能。如果您有一个读/写主设备和只读从设备,您可能希望使用一些合适的中间件,而不是使用这种黑客。看了吗?这比粉碎针对MySQL驱动程序的查询要好得多。如果您试图在记录不存在时进行插入,或者在记录存在时进行更新,则使用MySQL即可:@tadman谢谢您的提示。我个人不喜欢ORMs,但我已经研究了一下Sequelize,因为我发现它以一种很好的方式支持读取复制。如果运行原始查询(这是我的情况),请继续执行,然后将查询标记为SELECT。稍后,查询将重定向到读取池。所以基本上和我已经做过的检查差不多,但是可能它更快地检查选择而不是更新/插入。