如何将我之前在 sql 中创建的列更改为外键
Posted
技术标签:
【中文标题】如何将我之前在 sql 中创建的列更改为外键【英文标题】:How do I change a column I created a while ago in sql to foreign key 【发布时间】:2017-08-08 22:15:23 【问题描述】:我需要将多个表更改为外键。我已经使用了命令
ALTER TABLE financial_transactions
ADD FOREIGN KEY (item_rental_id) REFERENCES transaction_id(item_rental_id);
表名是financial_transactions,列名是item_rental_id。它给了我一个错误说:
外键“FK__financial__item___46E78A0C”引用无效表“transaction_id”。
我该如何解决这个问题?
【问题讨论】:
外键的目标必须是主键。 transaction_id 是主键。有语法错误吗?谢谢 引用无效表'transaction_id'意味着没有transaction_id表 您必须映射 item_rental_id 将从中引用的表 阅读这篇关于外键概念的文章technet.microsoft.com/en-us/library/…。对于此示例,SalesOrderHeader 将是您的金融交易表,而 SalesPerson 将是外键引用的表。 【参考方案1】:是的,这是创建外键的正确脚本
ALTER TABLE financial_transactions
ADD FOREIGN KEY (item_rental_id) REFERENCES customer_rentals(item_rental_id);
但是,如果您尝试在已包含数据的表上添加外键约束,则必须确保 Financial_transactions 表中的 item_rental_id 也在 customer_rentals 表中。否则,您将遇到参照完整性错误。
举例说明:
CREATE TABLE customer_rentals_1
(item_rental_id INT,
PRIMARY KEY (item_rental_id)
);
CREATE TABLE financial_transactions_1
(transaction_id INT,
item_rental_id INT,
PRIMARY KEY (transaction_id)
);
ALTER TABLE financial_transactions_1
ADD FOREIGN KEY (item_rental_id) REFERENCES customer_rentals_1(item_rental_id);
以上脚本将成功运行。
CREATE TABLE customer_rentals_2
(item_rental_id INT,
PRIMARY KEY (item_rental_id)
);
CREATE TABLE financial_transactions_2
(transaction_id INT,
item_rental_id INT,
PRIMARY KEY (transaction_id)
);
INSERT INTO financial_transactions_2
VALUES (1000, 9999);
ALTER TABLE financial_transactions_2
ADD FOREIGN KEY (item_rental_id) REFERENCES customer_rentals_2(item_rental_id);
但是,由于 item_rental_id 9999 不在 customer_rentals_2 表中,因此会出现以下错误
Msg 547, Level 16, State 0, Line 31
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK__financial__item___76969D2E". The conflict occurred in database "TESTDB", table "dbo.customer_rentals_2", column 'item_rental_id'.
【讨论】:
【参考方案2】:你必须给出第二个表名 两种方式都可以 1.添加无名引用
ALTER TABLE financial_transactions
ADD FOREIGN KEY (item_rental_id) REFERENCES customer_rentals(item_rental_id);
2.添加名称引用
ALTER TABLE financial_transactions
ADD CONSTRAINT FK_Financial_Transactions_Customer_Rental_Item_Rental_ID
FOREIGN KEY (item_rental_id) REFERENCES Customer_rentals(item_rental_id);
【讨论】:
您从哪里获得 item_rental 表?您只是根据命名约定进行假设吗? 这就是我根据列名 item_rental_id 猜测的第二个表名 Item_rental 因为没有item_rental所以不行。包含该列的表是financial_transactions,主键列是transaction_id。我需要将外键添加到 item_rental_id 列 ALTER TABLE financial_transactions 添加外键 (item_rental_id) REFERENCES customer_rentals(item_rental_id);现在我收到一个新错误,他的 ALTER TABLE 语句与 FOREIGN KEY 约束“FK__financial__item___4BAC3F29”冲突。冲突发生在数据库“tvk5250”、表“dbo.customer_rentals”、列“item_rental_id” 费迪南德,我们现在在同一条路上,但为什么我仍然投反对票?以上是关于如何将我之前在 sql 中创建的列更改为外键的主要内容,如果未能解决你的问题,请参考以下文章
当主键列是mysql中不同表的外键时,如何将主键列更改为自动递增