MySQL 是不是支持“如果存在”?

Posted

技术标签:

【中文标题】MySQL 是不是支持“如果存在”?【英文标题】:Does MySQL support "IF EXISTS"?MySQL 是否支持“如果存在”? 【发布时间】:2012-07-10 08:27:43 【问题描述】:

我认为我对 SQL Server 和 mysql 的了解之间存在冲突。 当我运行这个查询时,我总是从 MySQL 收到一个错误:

If EXISTS (select * from tbl_admin) THEN
    select 'OK';
END IF;

错误信息是:

[Err] 1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在 'if EXISTS (select * from tbl_admin) then select '1' 附近使用 -- 在第 1 行选择 '1' WHERE EXISTS '

请帮助我,告诉我我写这个查询有错吗?怎么了? 如果tbl_admin 表中有东西,我想做点什么。

【问题讨论】:

错误信息与您发布的代码不对应。据我所知,IF EXISTS 不是有效的 MySQL 语法,尽管它存在于 SQL Server 中。 【参考方案1】:
select 'ok'
from INFORMATION_SCHEMA.tables
where table_name = 'tbl_admin'

编辑

要检查表是否包含数据,您可以这样做:

SELECT 'OK' FROM dual
WHERE EXISTS (SELECT * FROM tbl_admin);

【讨论】:

如果表存在,这将返回 ok,但用户想要该表中是否存在行 juergen d,你能给我一个使用 IF EXISTS 的代码吗?了解它的正确语法对我来说很重要。 你不能在 MySQL 中使用if exists。您只能在 where 子句中使用 where exists(select ...) 所以SELECT 'OK' WHERE EXISTS(SELECT * FROM tbl_admin); 必须正确执行,对吧? 你需要一个from 子句:SELECT 'OK' from dual WHERE EXISTS(SELECT * FROM tbl_admin);【参考方案2】:

如果我理解正确,您知道有一个表格,如果有任何行,您只需要一个信息? 在那种情况下,我认为这可以解决您的问题:

SELECT 
    'OK'
FROM
    Korisnik
WHERE
    EXISTS( SELECT 
            COUNT(*)
        FROM
            Korisnik)
LIMIT 1;

您可以使用IF EXISTS 来检查存储过程或触发器是否存在。在 SELECT 查询中,您可以使用 WHERE EXISTSWHERE NOT EXISTS

http://dev.mysql.com/doc/refman/5.5/en/exists-and-not-exists-subqueries.html

【讨论】:

【参考方案3】:

你可以这样做:

if ( (select count(*) from tbl_admin) > 0) then
    ...

这会计算表中的所有行。如果没有行,它将返回 0。

【讨论】:

【参考方案4】:
select case when count(*) > 0 then 'OK' else 'Empty' end from tbl_admin;

select 'OK' from tbl_admin having count(*) > 0;

【讨论】:

【参考方案5】:

如果要检查表是否存在,请使用此

 select 'Message' from INFORMATION_SCHEMA.tables where table_name = 'tbl_admin'

因为所有信息都存储在这里。EXISTS 在 mysql 中也可以正常工作。

【讨论】:

【参考方案6】:
select if(count(*), 'OK', '') as result from table_name where 1

如果存在记录,这将打印“OK”,否则将不显示任何内容。

【讨论】:

【参考方案7】:

使用普通的选择查询..

Select 'OK' from table

【讨论】:

以上是关于MySQL 是不是支持“如果存在”?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断某个mysql数据库是不是已存在

mysql插入数据时,判断是不是存在,存在则替代,不存在则直接插入,需要能够批量处理。

检查 MySQL 上是不是存在表 [重复]

如何使用“如果存在”在 MySQL 中创建或删除索引?

MySQL更新如果存在否则插入

mysql 数据库插入之前判断数据是不是存在