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设置为自动增量