mysql - 不能在 mySQL 中删除外键

标签 mysql sql foreign-keys

这是 Persons 和 Orders 之间的常见示例。我只是从互联网上复制它作为测试。

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    PRIMARY KEY (ID) );

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(ID)
);

至此一切顺利。但是我怎样才能删除外键 PersonID?

我试过了。

ALTER TABLE Orders
DROP FOREIGN KEY PersonID;

MySQL 说:

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

最佳答案

使用语句标识约束的名称:

SELECT CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_NAME = 'Orders'
AND COLUMN_NAME = 'PersonID';

在您的 ALTER TABLE 语句中使用来自 CONSTRAINT_NAME 的结果。例如:

ALTER TABLE Orders
DROP FOREIGN KEY `myconstraint`;

来自 MySQL Reference Manual 的答案

关于mysql - 不能在 mySQL 中删除外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53308826/

相关文章:

sql - 在 SQL 查询中动态选择列

mysql - 没有外键约束,需要做复杂的删除

php - sql查询计算一组计数的总和

java - 使用java将时间戳从mysql解析为csv

mysql - SQL - 如何检索数字范围内的第一个空闲数字

sql - 创建包含经常更改的字段的索引是一个坏主意吗?

swift - 添加外键约束 Swift Vapor Fluent with PostgreSQL

php - Laravel:带有 INSERT(外键)的 SQL LEFT JOIN

mysql - 使用 HAVING 和 GROUP BY 获取总金额

mysql - 为什么SQL中没有 "first greater/less than [or equal to]"比较运算符?