gpt4 book ai didi

mysql - 插入新记录时检查外键引用的功能

转载 作者:行者123 更新时间:2023-11-29 11:26:44 25 4
gpt4 key购买 nike

给定两个表:

-- 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 函数/查询来检查“城市”是否匹配外键实体?

我创建了这个 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//

最佳答案

如果您以编程方式导入(正如您指出的那样使用 php 进行),并执行大量插入(如带有短行的 70MB csv 所建议的那样),那么您的最佳选择是:

  • 将城市表的名称和 ID 值缓存到本地键控集中(以 csv 中预期的值为键控)
  • 引用它来查找 id 值
    • 如果未找到值,请对城市表执行相应的 INSERT,并为本地缓存检索新行的 ID,然后继续。
<小时/>

您可以创建一个 sql 函数来获取名称,如果缺少则将其插入,然后返回 id;当你最初的想法似乎正在走向时;但这意味着将以这种方式插入的每一行都会重复检查。

关于mysql - 插入新记录时检查外键引用的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38084767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com