通过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 PROCEDURE
,CREATE FUNCTION
,CREATE 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 //
没有 ”;” 在末尾? 可能无法更改其中包含多个查询的查询中的分隔符。