Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为什么一个接一个地运行查询会产生正确的结果,但在一个块中运行大量查询不会';T_Mysql - Fatal编程技术网

Mysql 为什么一个接一个地运行查询会产生正确的结果,但在一个块中运行大量查询不会';T

Mysql 为什么一个接一个地运行查询会产生正确的结果,但在一个块中运行大量查询不会';T,mysql,Mysql,假设我创建了一个简单的表和一个存储函数来填充它: CREATE TABLE t ( id INT PRIMARY KEY, val VARCHAR(255) )// CREATE FUNCTION populateIfNotAlreadyIn (idArg INT, valArg VARCHAR(255)) RETURNS BOOLEAN NOT DETERMINISTIC BEGIN DECLARE alreadyIn INT; SELECT COUNT(id

假设我创建了一个简单的表和一个存储函数来填充它:

CREATE TABLE t
(
    id INT PRIMARY KEY,
    val VARCHAR(255)
)//

CREATE FUNCTION populateIfNotAlreadyIn (idArg INT, valArg VARCHAR(255))
RETURNS BOOLEAN NOT DETERMINISTIC
BEGIN
    DECLARE alreadyIn INT;
    SELECT COUNT(id) INTO alreadyIn FROM t WHERE id = idArg;
    IF alreadyIn <> 0 THEN
        RETURN FALSE;
    ELSE
        INSERT INTO t (id, val) VALUES (idArg, valArg);
        RETURN TRUE;
    END IF;
END//
//去//

SELECT populateIfNotAlreadyIn(2, 'val2');
… etc
//去//

SELECT populateIfNotAlreadyIn(2, 'val2');
… etc
显然,结果是正确的:函数返回
1
,并在且仅当表中没有具有此类id的行时插入一行,否则返回
0

到目前为止,一切顺利。但是,与其逐个运行查询,不如让我们一次向phpmyadmin提供所有查询。更具体地说,让我们在phpmyadmin中插入如下内容:

SELECT populateIfNotAlreadyIn(1, 'val1');
SELECT populateIfNotAlreadyIn(2, 'val2');
SELECT populateIfNotAlreadyIn(3, 'val3');
SELECT populateIfNotAlreadyIn(4, 'val4');
SELECT populateIfNotAlreadyIn(5, 'val5');
然后单击
Go
,以运行所有代码

结果如何?行被正确插入表
t
。但是存储的函数返回不正确的值。除最后一个调用外,每个调用都返回一个
0


为什么会发生这种情况?

为什么要这样做?@davidstrachan为什么我要做什么?为什么要使用phpmyadmin,它是管理员对一个函数运行多个调用的工具?@davidstrachan我想快速填充数据库以测试其他更复杂的存储程序。使用数据生成器。将id设置为自动递增为什么要这样做?@davidstrachan为什么我要这样做?为什么要使用phpmyadmin(管理员可以对函数执行多个调用)?@davidstrachan我想快速填充数据库以测试其他更复杂的存储程序。使用数据生成器。将id设置为自动增量