MYSQL-在INSERT语句中使用函数

问题描述 投票:0回答:1

我正在将数据从电子表格迁移到MySQL。因此,我们知道在电子表格中通常没有ID,而只有文本。

City;Country;...
New York;USA;...
Berlim;Germany;...
Munich,Germany,...

考虑到这一点,让我们考虑两个表:

国家/地区:[ID,名称]

城市:[ID,国家(FK),名称]

我不想创建多个具有相同名称的国家-但我想使用现有的国家。完美,因此,让我们在INSERT状态下添加一个FUNCTION,以进行搜索,插入(如果需要)并返回国家/地区ID。

因此,我创建了一个函数以[[FIRST评估国家/地区是否存在如果不存在创建国家/地区

getCountry (parameter IN strCountry varchar(100))
BEGIN
SELECT ID INTO @id from `country` WHERE country.country = strCountry ;
IF (@id is NULL OR @id= 0) THEN
    INSERT INTO `country` (country) VALUES (strCountry);
    if (ROW_COUNT()>0) THEN
        SET @id = LAST_INSERT_ID();
    else
        SET @id = NULL;
    END IF;
END IF ;
RETURN @id;
END
然后我有成千上万的插入内容,例如

INSERT INTO city (name, country) VALUES ('name of the city', getCountry('new or existing one'));

[函数在单独执行时效果很好,例如

SELECT getCountry('Aruba');

但是,当我在那个非常长的SQL(22K +行)中执行该操作时,它将无法正常工作。...它基本上使用在开始执行之前创建的最新ID。也许我应该“等待”函数执行并返回正确的结果?但是如何?

我在做什么错?

mysql sql-insert last-insert-id
1个回答
0
投票
我找不到任何文档,但是当您在另一个INSERT期间调用的函数中执行INSERT时,可能会发生冲突。因此,请尝试使用变量将它们拆分:

SELECT @country := getCountry('new or existing one'); INSERT INTO city (name, country) VALUES ('name of the city', @country);

© www.soinside.com 2019 - 2024. All rights reserved.