给出两个表:
-- Create table: city (FK)
CREATE TABLE city (
city_id INT PRIMARY KEY AUTO_INCREMENT,
city_name VARCHAR(150) NOT NULL UNIQUE
);
-- Create table: organizations
CREATE TABLE organization (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(150),
city_fk INT,
-- foreign key constraint
CONSTRAINT organization_fk_city
FOREIGN KEY (city_fk)
references city (city_id)
);
并提供以下格式的CSV文本文件:
12332, Slack, Columbia
21242, Jackson, Columbia
23323, Thompson, Annapolis
我必须将这个CSV文件解析到我的表中,但我想知道如何检查城市表中是否已经存在同名的记录。
是否有SQL函数/查询来检查'city'是否匹配外键实体?
我已经创建了这个SQL'函数',但是在插入记录时我不确定如何使用它。
CREATE FUNCTION find_city(NAME VARCHAR) RETURNS INT
BEGIN
# initilize variables
DECLARE ID_FOUND INT DEFAULT 0;
-- Declare variable to hold results
ID_FOUND = SELECT city_id FROM city WHERE city_name = NAME;
-- If records are returned?
CASE
-- Return the foreign key ID found
WHEN ID_FOUND >= 1 THEN RETURN ID_FOUND
-- Insert new record into table
ELSE INSERT INTO `donorsearch`.`city` (`city_name`) VALUES (NAME);
END
END//
答案 0 :(得分:1)
如果你是以编程方式导入(正如你表明你正在使用php),并执行大量插入(如短线所示的70MB csv),你最好的选择是:
您可以创建一个sql函数来获取名称,如果缺少则插入它,并返回id;因为你最初的想法似乎正在前进;但这意味着对于以这种方式插入的每一行都会重复检查。