我正在将数据从电子表格迁移到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。也许我应该“等待”函数执行并返回正确的结果?但是如何?我在做什么错?
INSERT
期间调用的函数中执行INSERT
时,可能会发生冲突。因此,请尝试使用变量将它们拆分:SELECT @country := getCountry('new or existing one');
INSERT INTO city (name, country) VALUES ('name of the city', @country);