【发布时间】:2020-03-23 21:38:48
【问题描述】:
我正在将数据从电子表格移动到 MySQL。 所以我们知道,在电子表格中通常没有 ID,只有文本。
City;Country;...
New York;USA;...
Berlim;Germany;...
Munich,Germany,...
考虑到这一点,让我们考虑两个表:
国家:[ID,姓名]
城市 : [ID , 国家 (FK) , 名称]
我不想创建多个具有相同名称的国家/地区,但我想使用现有的国家/地区。完美,所以,让我们在 INSERT 状态下添加一个 FUNCTION,用于搜索、插入(如果需要)并返回 Country 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。也许我应该“等待”函数执行并返回正确的结果?但是怎么做?
我做错了什么?
【问题讨论】:
-
你说的是
VALUES ('city1', getCountry('country1')), ('city2', getCountry('country2')), ...吗? -
几乎,电子表格只允许每行创建一个
-
插入城市值 ('city1', getCountry('country1'));插入城市值 ('city2', getCountry('country1')); INSERT into City VALUES ('city3', getCountry('country1'));
-
嗨 @Barmar .. 在 INSERT 语句中使用该函数“编译”虽然它没有给我想要的正确 ID
标签: mysql sql-insert last-insert-id