mysql - MySQL 准备语句中的多个查询(无过程)

标签 mysql if-statement prepared-statement

我有以下 MySQL 脚本,但它不起作用。当我从 IF 中删除第二个查询(SELECT)时(在 INSERT INTO 之后),它开始工作。我的问题是:我可以在准备好的语句中执行多个查询但不使用过程(最后一部分是我为此提出新问题的原因)?

提前致谢...

SQL:

SET @data1 = 'DATA_HERE' COLLATE utf8_general_ci
;

/* Random key */
SET @randomKey = CONCAT( 'rnd', DATE_FORMAT(NOW(), '%Y%m%d') , FLOOR( RAND() * 100 ) ) COLLATE utf8_general_ci
;

/* If not exists do an INSERT else SELECT a warning message */
SET @stmt = IF(
        ( SELECT EXISTS (
                SELECT
                    t0.id
                FROM
                    table t0
                WHERE 1
                    AND t0.key = @randomKey COLLATE utf8_general_ci
                    AND t0.data = @data1 COLLATE utf8_general_ci
            )
        ) = 0
        , CONCAT( "
            INSERT INTO
                table
            SET
                key = @randomKey COLLATE utf8_general_ci
                , data = @data1 COLLATE utf8_general_ci;

            SELECT
                t0.*
            FROM
                table t0
            WHERE 1
                AND t0.id = LAST_INSERT_ID(); " 
        )
        , CONCAT( "SELECT CONCAT( 'This random key already exists with this data!' );" )
    )
;

PREPARE stmt FROM @stmt
;
EXECUTE stmt
;

最佳答案

如果您的表名为 t0那么你不需要说table t0 。只需使用 SELECT * FROM t0 WHERE /* your predicate */

关于mysql - MySQL 准备语句中的多个查询(无过程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36205076/

相关文章:

mysql - 如何在同一个结果表中包含来自两个查询的信息?

mysql - dbForge Studio图表自动添加相关表到数据库图表

java - 了解色度键

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

java - MySQL 的准备语句,以便它会选择包含最高时间戳的行,该列将比给定参数更大?

PHP - 在自定义 WordPress 数据库中上传 CSV 数据

php - 在多插入上查找重复值

asp.net - MVC+ Razor : how to add starting <div> conditionally?

javascript - 如何将此 if 语句转换为箭头函数?

mysql - 有人可以告诉我这个查询有什么问题吗?