从 table 中删除外键 mysql

Drop a foreign key from a table in mysql

我创建了一个外键,但没有为 table 中的列指定名称。现在我想删除该列。首先,我尝试删除外键约束,但出现错误
我使用了以下 sql 命令

ALTER TABLE passenger 
DROP FOREIGN KEY bookedBy

错误信息

#1091 - Can't DROP 'bookedBy'; check that column/key exists

我已确保该列存在。
我没有命名外键约束。是否可以在不命名的情况下删除外键约束。外键是否有任何默认命名。

运行 语句 SHOW CREATE TABLE passenger

输出将显示外键约束,以及 table 中的列。您应该能够找出要从中删除的外键约束的名称。

或者,您可以处理 information_schema 数据库中 table 的查询。它也会出现在那里。


跟进

information_schema 的一个可能查询,用于查找给定 table 的外键约束的名称:

 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'
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

如何在我的 table

中查找外键
   SELECT
         TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
    FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
    WHERE
      REFERENCED_TABLE_NAME = '<table>';

关注这个

  1. 登录到 phpMyAdmin
  2. 检查您需要哪个字段DROP(例如我将使用产品)

  1. 然后 Select

  1. 取消选中此复选框并单击 YES

最快和最肮脏的方法是关闭外键检查,删除 table 然后重新打开检查

SET FOREIGN_KEY_CHECKS=0;

drop table mytable

SET FOREIGN_KEY_CHECKS=1;