mysql - 批处理文件执行的.sql文本文件中mysql的if语句

标签 mysql batch-file if-statement

我想先介绍一下我的需求。我有一个批处理文件,它将执行 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;

最佳答案

您会收到错误,因为您不能在普通查询中使用诸如 ifwhile 之类的控制结构。它们只能在存储过程或函数中使用。在这种情况下,您需要一个程序。试试这个:

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/

相关文章:

php - 如何在 codeigniter php mysql 中创建动态数组

php - 尝试通过提交按钮更新列值

windows - 由于源文件名是动态的,如何在 xcopy 中使用变量?

batch-file - 如果最后一个字符是使用批处理文件的分号,则将行与下一行合并

c# - if 在 IL 中是什么样子的?

c - if 语句和 mod(SIZE) 之间的效率差异

php - 优化 MySQL XML 解析性能

batch-file - 编辑 WMIC 输出格式

angular - 错误 - 如果 : The results are not as expected

mysql - 寻找一种从 MySQL 数据库查询数据并将其写入输出 txt 文件的方法