【问题标题】:mySQL Deleteing Foreign KeymySQL 删除外键
【发布时间】:2015-06-16 06:04:43
【问题描述】:

我有一个数据库,我使用了这些命令:

CREATE TABLE APPOINTMENT (app_id INT(5) NOT NULL, app_doctor INT(5) NOT NULL, app_date DATE, PRIMARY KEY (app_id));

CREATE TABLE APPPATIENTS (patient_ssn INT(10) NOT NULL, patient_name VARCHAR(20) NOT NULL, sex CHAR(1) NOT NULL, appointment_id INT(5), PRIMARY KEY (patient_ssn), UNIQUE (appointment_id));

ALTER TABLE APPPATIENTS ADD FOREIGN KEY (appointment_id) REFERENCES APPOINTMENT(app_id) ON DELETE CASCADE;

现在,我想删除 appPatients 表中的外键约会 ID:

ALTER TABLE apppatients DROP FOREIGN KEY appointment_id;

但是我遇到了一个错误:

Can't drop 'appointment_id'; check that column/key exists. 

它就在那里!它怎么能给出那个错误?我究竟做错了什么?

【问题讨论】:

  • 执行此操作 - 'SHOW KEYS IN apppatients' 并观察结果 - 可能是您过去删除了此外键。
  • @degr 我照你说的做了,但我的外键还在。
  • 这个外键的名字是'appointment_id'吗?
  • 还有这个 - alter table apppatients drop constraintointment_id
  • @degr 外键名称是约会ID,我尝试了你说的其他命令,但出现语法错误。

标签: mysql


【解决方案1】:

我尝试使用您的代码创建一个数据库,但我注意到外键名称与约会 ID 不同:仔细阅读命令定义,我注意到当您编写时

ADD FOREIGN KEY (appointment_id)

您只是说将在其上创建约束的列,而不是它的名称。
您可以在此处阅读规格: SQL FOREIGN KEY Constraint on ALTER TABLE

所以,如果要指定key的名字,就得写,例如:

alter table APPPATIENTS 
ADD CONSTRAINT appointment_key 
FOREIGN KEY (appointment_id) 
REFERENCES appointment(app_id) ON DELETE CASCADE;

因此您知道您创建的外键的名称(在本例中为 appointment_key)。
如果想知道mysql生成的外键名可以使用命令

show create table APPPATIENTS;

显示完整的表定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 2010-10-24
    • 2012-01-10
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    相关资源
    最近更新 更多