首页 文章

如何从MySQL表中删除约束?

提问于
浏览
207

我想从我的表中删除约束 . 我的查询是:

ALTER TABLE `tbl_magazine_issue` 
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`

但是我收到了一个错误:

#1064 - 您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在第1行的'constraint FK_tbl_magazine_issue_mst_users'附近使用正确的语法

10 回答

  • 2

    Mysql有一个特殊的语法来删除外键约束:

    ALTER TABLE tbl_magazine_issue
      DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users
    
  • 24

    我有同样的问题,我得用这个代码来解决:

    ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;
    ALTER TABLE `table_name` DROP INDEX  `id_name_fk`;
    
  • 372

    在MySQL中没有 DROP CONSTRAINT 这样的东西 . 在您的情况下,您可以使用 DROP FOREIGN KEY .

  • 0

    如果约束不是外键,例如 . 一个使用'UNIQUE CONSTRAINT (colA, colB)'添加,然后它是一个可以使用 ALTER TABLE ... DROP INDEX ... 删除的索引

  • 41

    为罗伯特·奈特添加一些东西's answer, since the title of the post itself doesn' t提到外键(因为他的注释代码块没有't show as well as the answers'代码块),我将为 unique 约束添加这个 . 其中任何一个都可以放弃约束:

    ALTER TABLE `table_name` DROP KEY `uc_name`;
    

    要么

    ALTER TABLE `table_name` DROP INDEX `uc_name`;
    
  • 11

    同样不错,您可以暂时禁用mysql数据库中的所有外键检查: SET FOREIGN_KEY_CHECKS=0; 并再次启用它: SET FOREIGN_KEY_CHECKS=1;

  • 4

    对于外键,某些ORM或框架使用与默认 FK_[parent table]_[referenced table]_[referencing field] 不同的命名约定,因为它们可以被更改 .

    例如,Laravel使用 [parent table]_[referencing field]_foreign 作为命名约定 . 您可以使用此查询显示外键的名称,如here所示:

    SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
    WHERE REFERENCED_TABLE_SCHEMA = '<database>' AND REFERENCED_TABLE_NAME = '<table>';
    

    然后通过运行前面提到的DROP FOREIGN KEY查询及其正确名称来删除外键 .

  • -5
    • 转到表格的结构视图

    • 您将在顶部看到2个选项a . 表格结构b . Relation view .

    • 现在单击 Relation view ,这里可以删除外键约束 . 你会在这里得到所有的关系 .

  • 2

    对于那些使用MariaDB来到这里的人:

    请注意,MariaDB通常允许DROP CONSTRAINT语句,例如用于删除检查约束:

    ALTER TABLE table_name
    DROP CONSTRAINT constraint_name;
    

    https://mariadb.com/kb/en/library/alter-table/

  • 1

    这将适用于MySQL以减少约束

    alter table tablename drop primary key;
    
    alter table tablename drop foreign key;
    

相关问题