从 mysql 的表中删除外键

Nat*_*raj 5 mysql sql database foreign-keys

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

ALTER TABLE passenger 
DROP FOREIGN KEY bookedBy
Run Code Online (Sandbox Code Playgroud)

错误信息

#1091 - 无法删除“bookedBy”;检查列/键是否存在

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

The*_*son 11

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)
)
Run Code Online (Sandbox Code Playgroud)

你也可以像这样添加外键

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Run Code Online (Sandbox Code Playgroud)

并删除

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
Run Code Online (Sandbox Code Playgroud)

如何在我的表中查找外键

   SELECT
         TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
    FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
    WHERE
      REFERENCED_TABLE_NAME = '<table>';
Run Code Online (Sandbox Code Playgroud)


spe*_*593 1

运行该语句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'
Run Code Online (Sandbox Code Playgroud)