我创建了一个外键,但没有为表中的列命名。现在我要删除该列。首先我尝试删除外键约束,但是出现了错误
我使用了以下sql命令
ALTER TABLE passenger
DROP FOREIGN KEY bookedBy
错误消息
#1091 - 无法预订“#&#39 ;;检查列/密钥是否存在
我确保该栏目存在 我没有命名外键约束。是否可以在不命名的情况下删除外键约束。是否有外键的默认命名。
答案 0 :(得分:1)
按照这个
DROP
所需的字段(我将使用产品)
YES
答案 1 :(得分:1)
最快最肮脏的方法是关闭外键检查,放下桌子然后再打开支票
SET FOREIGN_KEY_CHECKS=0;
drop table mytable
SET FOREIGN_KEY_CHECKS=1;
答案 2 :(得分:0)
运行语句 SHOW CREATE TABLE passenger
。
该输出将显示外键约束以及表中的列。您应该能够找出要从中删除的外键约束的名称。
或者,您可以查看information_schema
数据库中表的查询。它也会出现在那里。
<强>跟进强>
information_schema
的一个可能查询,用于查找给定表的外键约束的名称:
SELECT kcu.constraint_schema
, kcu.constraint_name
-- , kcu.*
FROM information_schema.key_column_usage kcu
WHERE kcu.referenced_table_name IS NOT NULL
AND kcu.constraint_schema = 'mydatabase'
AND kcu.table_name = 'mytablename'
答案 3 :(得分:0)
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)
你也可以像这样添加外键
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
并删除
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
如何在表格中找到外键
SELECT
TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_NAME = '<table>';