MySQL 脚本中的 IF
Posted
技术标签:
【中文标题】MySQL 脚本中的 IF【英文标题】:IF in MySQL script 【发布时间】:2017-03-25 13:15:34 【问题描述】:我有以下脚本:
use my_db;
if (2 < 3) then
select 1;
end if;
当我使用命令执行此操作时:
mysql --user=myuser --password=mypassword
我收到以下错误:
ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'if (2 < 3) then
select 1' at line 1
谁能解释一下这是为什么? 从 mysql 文档中找到 here 我认为它应该可以正常工作。
【问题讨论】:
if
语句只允许在编程块中使用,例如存储过程、用户定义的函数和触发器。将条件逻辑放在一个存储过程中,并从脚本中调用该存储过程。
【参考方案1】:
如果您可以更改您的陈述,我建议您这样做:
select if(2<3, 'true','false') as amount
或者将您的代码包装在一个过程中:
create procedure my_procedure()
begin
if (2 < 3) then
select 1;
end if;
end;
-- Execute the procedure
call my_procedure();
-- Drop the procedure
drop procedure my_procedure;
【讨论】:
关键是我只想在不存在的情况下创建一个过程。所以,不是select 1
,而是create procedure...
语句。
好的,那么您必须将该检查代码包装到一个过程中。
还是不明白... :)。如何检查IF
是否不允许?
PostgreSQL 更友好。 postgresql.org/docs/9.1/static/sql-do.html【参考方案2】:
还是不明白... :)。如何检查 IF 是否不允许?
https://dev.mysql.com/doc/refman/5.7/en/flow-control-statements.html 说:
MySQL 支持存储程序中的 IF、CASE、ITERATE、LEAVE LOOP、WHILE 和 REPEAT 结构。它还支持存储函数中的 RETURN。
(强调我的)
我不会费心在 MySQL 中编写存储例程。如果您需要进行条件 SQL 查询,我建议您学习一门脚本语言。 Python 是一个不错的选择。
#!/bin/env python
import MySQLdb
db = MySQLdb.connect()
if 2 < 3:
cur = db.cursor()
cur.query('select 1')
print cur.fetchall()
【讨论】:
@Ako 自从我在 2017 年写这个答案以来,我们已经看到了 MySQL Shell 的发布,它允许开发人员在 Python 或 javascript 中执行逻辑语句。 感谢您的提示。详细说明一下,使用外部语言处理 SQL 逻辑是不好的解决方案,可能永远不会被接受为标准。 SQL 是一种独立的脚本语言,为什么会有额外的复杂性。 Py 和 JS 需要一个虚拟机,而信任问题变成了潮流。 我不认为这是正确的。从早期开始,SQL 就旨在成为一种特定于领域的语言,用作另一种编程语言的补充。 ANSI/ISO SQL 标准的第 3 部分描述了从另一种语言中使用 SQL 的调用级接口 (CLI)(该标准描述了将 SQL 与 Ada、C/C++、COBOL、Fortran、MUMPS、Pascal、PL/I 一起使用)。该标准的第 10 部分描述了使用 Java 中嵌入的 SQL 的对象语言绑定 (OLB)。 SQL 标准中的术语 CLI 并不是指命令行界面工具。它指的是调用接口。用今天的话来说,它更像是 API。如何以编程方式打开连接、启动事务和游标、获取结果等。 对不起,你把我弄丢了。祝你有美好的一天!以上是关于MySQL 脚本中的 IF的主要内容,如果未能解决你的问题,请参考以下文章