【问题标题】:Insert data into a table with a foreign key SQL使用外键 SQL 向表中插入数据
【发布时间】:2021-09-15 07:40:11
【问题描述】:

在为“Item”表的一行插入以下值后,我需要在“ItemBook”表中插入一些数据:

Name='Clippers', itemLink='amazon.com' description='hair clippers'  

现在我还想向 ItemBook 表中插入一些数据,但我不确定如何使用具有外键的表来执行此操作。下面是 SQL 代码:

CREATE TABLE Item (
Name VARCHAR(100) NOT NULL,
itemLink VARCHAR(100) NOT NULL,
description VARCHAR(1000) NOT NULL,
PRIMARY KEY (Name)
);

CREATE TABLE ItemBook (
ItemName VARCHAR(100) NOT NULL,
Publisher VARCHAR(100) NOT NULL,
PRIMARY KEY (ItemName),
FOREIGN KEY (ItemName) REFERENCES Item(Name)
);

我的尝试:

INSERT INTO itemBook (Name, Publisher)
VALUES ('Clippers', 'Bob');

错误信息:

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.  To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

其他尝试:

INSERT INTO eventbook (EventName, Publisher)
SELECT E.name
FROM event E
WHERE E.name = eventbook.EventName;

错误信息:

Error Code: 1054. Unknown column 'eventbook.EventName' in 'where clause'

【问题讨论】:

  • 这里没有魔法。只需像往常一样在 ItemBook 中插入行,确保 ItemName 列与 Items 表的 Name 列中的值匹配
  • @TangentiallyPerpendicular 你能举个例子吗?我已经在上面发布了我的尝试。我只是不熟悉语法
  • 您的尝试没有引用您列出的任何一个表。
  • MySQL SQL Server。标记您正在使用的实际 DBMS,而不仅仅是随机的其他 DBMS。看来您没有使用 SSMS 或 SQL Server,所以这可能是您的问题的一部分?但是要在 ItemBook 中插入一行,您提供的名称必须已经存在于 Item 中。您正在创建 Item 和 ItemBook 之间的 1:1 关系 - 这是您的意图吗?

标签: mysql sql sql-server database backend


【解决方案1】:

是否有任何不使用整数 ID 的具体原因?我会做以下事情:

CREATE TABLE Item (
Id INTEGER NOT NULL IDENTITY PRIMARY KEY,
Name VARCHAR(100) NOT NULL,
itemLink VARCHAR(100) NOT NULL,
description VARCHAR(1000) NOT NULL,
);

CREATE TABLE ItemBook (
Id INTEGER NOT NULL IDENTITY PRIMARY KEY,
ItemName VARCHAR(100) NOT NULL,
Publisher VARCHAR(100) NOT NULL,
ItemId INTEGER NOT NULL,
FOREIGN KEY (ItemId) REFERENCES Item(Id)
);

INSERT INTO ItemBook Values(1, 'ItemName', 'Publisher', 0)

你有什么想法?

编辑 1. 根据您的回复和示例,我为 SQLITE 生成了以下 SQL(在其他数据库中也应该可以正常工作)

CREATE TABLE Item (
Name VARCHAR(100) NOT NULL,
ItemLink VARCHAR(100) NOT NULL,
Description VARCHAR(1000) NOT NULL,
PRIMARY KEY (Name)
);

CREATE TABLE ItemBook (
ItemName VARCHAR(100) NOT NULL,
Publisher VARCHAR(100) NOT NULL,
PRIMARY KEY (ItemName),
FOREIGN KEY (ItemName) REFERENCES Item(Name)
);

INSERT INTO Item (Name, ItemLink, Description) VALUES("Test Book", "http://www.testlink.com/", "This is a test book");

INSERT INTO ItemBook (ItemName, Publisher) Values("Test Book", "Test Publisher");

SELECT * FROM Item i JOIN ItemBook b on b.ItemName = i.Name

Check the result in this print

【讨论】:

  • 这是一项任务,他们提供的脚本在创建表格时运行良好。我只需要将数据插入到另一个表中
  • 那么 Tangentially Perpendicular 的答案就可以了!
  • 你能给我看一个插入的例子吗?我在这方面很困惑。我已经发布了我的尝试
  • 嗨 DreamVision2017,我已经更新了我的答案。抱歉很久了,我正在吃晚饭。 SMor,尽量不要那么粗鲁,谢谢。
猜你喜欢
  • 2023-01-26
  • 2017-04-11
  • 1970-01-01
  • 2018-01-09
  • 2015-05-27
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
  • 2016-05-20
相关资源
最近更新 更多