我想先介绍一下我的需求。我有一个批处理文件,它将执行 sql 的文本文件。我需要程序首先检查表的计数的功能,如果它是 0,然后插入行。 以下是我的代码。 我被告知错误:
RROR 1064 (42000) at line 15: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
nnear 'IF @a>0
THEN
INSERT IGNORE INTO `martin1` (`col1`, `col2`) VALUES (1, 'aaa'),(' at line 1
虽然我尝试了一些其他的方法,比如添加“;”,删除“;”,但是还是不行。
SET @a=(SELECT count(*) FROM `martin1`);
IF @a>0
THEN
INSERT IGNORE INTO `martin1` (`col1`, `col2`) VALUES (1, 'aaa'),(2, 'bbb');
END IF;
最佳答案
您会收到错误,因为您不能在普通查询中使用诸如 if
或 while
之类的控制结构。它们只能在存储过程或函数中使用。在这种情况下,您需要一个程序。试试这个:
DELIMITER $$
CREATE PROCEDURE my_proc_name()
BEGIN
IF EXISTS (SELECT 1 FROM marting1) THEN
INSERT IGNORE INTO `martin1` (`col1`, `col2`) VALUES (1, 'aaa'),(2, 'bbb');
END IF;
END $$
DELIMITER ;
然后用这个语句执行过程:
CALL my_proc_name();
请注意,我用 EXISTS()
替换了您的 COUNT(*)
。它更快,因为它会在找到条目后立即停止,而 COUNT()
会继续直到完成对每一行的计数。
关于mysql - 批处理文件执行的.sql文本文件中mysql的if语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25259278/