如何使用C API更改MySQL查询分隔符?我尝试发送DELIMITER |
作为查询,抱怨..the right syntax to use near 'delimiter' at line 1
..
也试过DELIMITER |;
,没有运气。试过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这样做,所以必须有办法..
答案 0 :(得分:7)
只有在使用mysql
客户端程序时才需要更改分隔符(因为它是 mysql
,它将分号解释为语句分隔符)。 You don't need to change the delimiter when using the C API:
通常,您只能使用
mysql_query()
执行一个SQL命令。只有在语法允许的情况下,分号才会出现在这样的命令中,而通常情况并非如此!特别是,SQL不允许命令以分号结尾。 (如果您尝试这样做,C API将引发错误。)命令
CREATE PROCEDURE
,CREATE FUNCTION
,CREATE TRIGGER
等在定义存储过程或触发器时是例外:在这些命令中,分号用作SQL指令之间的分隔符这是存储过程或触发器的一部分。这些命令可以毫无问题地执行。
P.S。您可能应该再次关闭multi statements。
答案 1 :(得分:0)
您可以使用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“);
答案 2 :(得分:-1)
你试过吗
DELIMITER //
没有“;”在末尾?可能无法在包含多个查询的查询中更改分隔符。