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)
运行该语句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)
| 归档时间: |
|
| 查看次数: |
13514 次 |
| 最近记录: |