通过C API更改MySQL查询分隔符

如何使用C API更改MySQL查询分隔符? 我试着发送DELIMITER | 作为查询,抱怨… ..the right syntax to use near 'delimiter' at line 1 ..

试过DELIMITER |; 也没有运气。 试过DELIMITER |; SELECT 1| DELIMITER |; SELECT 1| , 没运气。 🙁

我问的原因是我需要通过C API创建一个触发器,如下所示:

 create trigger increase_count after insert on torrent_clients for each row begin IF NEW.BytesLeft = 0 THEN UPDATE torrents SET Seeders = Seeders + 1 WHERE torrents.InfoHash = NEW.InfoHash; ELSE UPDATE torrents SET Leechers = Leechers + 1 WHERE torrents.InfoHash = NEW.InfoHash; END IF; end| 

但我不认为有一种方法可以在不改变分隔符的情况下做到这一点,是吗?

谢谢!


编辑:请注意,我确实需要在最后显式编写分隔符,因为我只运行一个API调用运行多个查询(我有多个语句)


EDIT2:使用C api的mysqlclient这样做,所以一定有办法..

只有在使用mysql客户端程序时才需要更改分隔符(因为它是将分号解释为语句分隔符的mysql )。 使用C API时无需更改分隔符 :

通常,您只能使用mysql_query()执行一个SQL命令。 只有在语法允许的情况下,分号才会出现在这样的命令中,通常情况并非如此! 特别是,SQL不允许命令以分号结尾。 (如果您尝试这样做,C API将引发错误。)

命令CREATE PROCEDURECREATE FUNCTIONCREATE TRIGGER等在定义存储过程或触发器时是例外:在这样的命令中,分号充当作为存储过程或触发器一部分的SQL指令之间的分隔符。 这些命令可以毫无问题地执行。

PS您可能应该再次关闭多个语句 。

您可以使用mysql_query执行多个命令。 您必须在建立连接时设置一些参数。 例如,unsigned long opt_flags = CLIENT_FOUND_ROWS | CLIENT_MULTI_STATEMENTS | CLIENT_MULTI_RESULTS;

if(0 == mysql_real_connect(mConn,mHostName,mUserName,mUserPass,mDbName,mPort,0,opt_flags))…

/ *执行多个语句* / status = mysql_query(mysql,“DROP TABLE IF EXISTS test_table; \ CREATE TABLE test_table(id INT); \ INSERT INTO test_table VALUES(10); \ UPDATE test_table SET id = 20 WHERE id = 10; \ SELECT * FROM test_table; \ DROP TABLE test_table“);

你试过了吗

 DELIMITER // 

没有 ”;” 在末尾? 可能无法更改其中包含多个查询的查询中的分隔符。