【问题标题】:Usage of Alter command to drop Primary key and Foreign Key使用 Alter 命令删除主键和外键
【发布时间】:2014-04-05 10:27:22
【问题描述】:

我创建了三个表

创建表employee1 (eid int, ename varchar(25),email varchar(15));

创建表accounts1 (eid int, accno int,atype varchar(2),bal int);

创建表 trans1(cid int, accno int, atype varchar(2), accounts int, bal int);

使用 alter 命令我添加了主键和外键

alter table employee1 添加主键(eid);

alter table accounts1 添加外键(eid) 引用employee1(eid);

alter table accounts1 添加主键(accno,atype);

alter table trans1 添加外键(accno,atype) 引用account1(accno,atype);

现在我的问题是我试图删除所有表的所有主键和外键,这给了我错误。

最初我尝试删除主键。然后参考下面的链接告诉我必须先删除外键,我尝试这样做,但我仍然收到错误。 MYSQL 5.5 Drop Primary Key

错误:

mysql> 改变表employee1 删除约束eid;

ERROR 1064 (42000):您的 SQL 语法有错误;检查相应的手册 池到您的 MySQL 服务器版本,以便在“约束 eid”a 附近使用正确的语法 第 1 行

mysql> alter table accounts1 删除主键;

ERROR 1025 (HY000): 将 '.\jlcindia#sql-b20_1' 重命名为 '.\jlcindia\accounts 时出错 1'(错误号:150)

mysql> 改变表employee1 删除主键;

ERROR 1025 (HY000): 将 '.\jlcindia#sql-b20_1' 重命名为 '.\jlcindia\employee 时出错 1'(错误号:150)

mysql> alter table trans1 drop foreign key;

错误 1005 (HY000): 无法创建表 'jlcindia.#sql-b20_1' (errno: 150) mysql> 显示引擎 innodb 状态

注意:我的任何表中都没有自动增量或任何类似的东西。

我检查了以下链接,但没有任何帮助。

Remove Primary Key in MySQL

mysql, alter column remove primary key and auto incremement

Error altering primary key column in mysql table

How can I alter a primary key constraint using SQL syntax?

【问题讨论】:

    标签: mysql sql database primary-key alter-table


    【解决方案1】:

    您需要按以下顺序删除约束(与您创建键的顺序相反):

    • 表中的外键trans1
    • 表中的主键accounts1
    • 表中的外键accounts1
    • 表中的主键employee1

    fiddle

    【讨论】:

    • 我尝试删除 trans1 表的外键,但出现以下错误:Query: alter table trans1 drop foreign key;我收到的错误 ERROR 1005 (HY000): Can't create table 'jlcindia.#sql-b20_1' (errno: 150)
    • 我不知道如何使用小提琴。所以我删除了所有现有的表并插入了您的查询。但是当我尝试删除外键时,我仍然收到错误:
    • 我得到的错误是:错误 1025(HY000): 将 '.\jlcindia\trans1' 重命名为 '.\jlcindia\#sql2-95c-1' 时出错 (errno:152 )
    • 您是否添加任何其他约束?你在使用 Innodb 引擎吗??
    • 不,我没有添加任何约束。我正在使用 mysql 5.5。当我给查询显示引擎时,就像引擎一样胖,它显示 MySQL 3.23 的 Myisam 默认引擎具有出色的性能。我猜我所拥有的引擎是 Myisam
    【解决方案2】:

    我认为,您需要首先删除trans1的外键。然后删除表accounts1的外键。然后尝试删除表 accounts1 的主键。然后删除表 *employee1 * 的主键。

    如果按此顺序删除外键和主键,则可以根据需要删除所有约束。

    【讨论】:

    • 我试过去掉trans1的外键,alter table trans1 drop外键;我收到了这个错误。错误 1005 (HY000): 无法创建表 'jlcindia.#sql-b20_1' (errno: 150)
    • 试试这个:ALTER TABLE trans1 DROP FOREIGN KEY accno.
    • 外键约束必须按约束名称而不是索引名称删除。语法是:alter table footable drop foreign key fooconstraint
    • mysql> alter table trans1 drop foreign key accno;错误 1025 (HY000): 将 '.\jlcindia\trans1' 重命名为 '.\jlcindia\#sql2-95c-1 (errno: 152) 时出错
    • 确实是外键错误,可以用perror:shell$ perror 152 MySQL错误码150: Foreign key constraint is wrongly来发现。想了解更多失败的细节,可以使用 SHOW ENGINE INNODB STATUS 并查找 LATEST FOREIGN KEY ERROR 部分,它包含有关问题的详细信息。在您的情况下,很可能是因为某些内容正在引用 accno 列。
    【解决方案3】:

    首先,您需要找到与主键和外键相关的约束名称。然后您需要在删除键时使用这些约束名称。

    select *
    from
    information_schema.key_column_usage
    where
    table_name = 'my_table'
    

    从上述查询中,您将能够找到约束名称。

    现在使用以下语法删除键。

    ALTER TABLE tablename DROP CONSTRAINT constraint name 
    

    【讨论】:

      猜你喜欢
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多