【问题标题】:MYSQL 5.5 Drop Primary KeyMYSQL 5.5 删除主键
【发布时间】:2012-03-03 19:43:09
【问题描述】:

我正在将我的quartz.net 版本从 1.0.3 升级到 2.0.2 有一个数据库模式的迁移脚本,它是为 MSSQL 编写的,我正在尝试编写它的 MYSQL 版本。

但是,我无法删除主键(我需要这样做)。

脚本的原始 MSSQL 版本:

ALTER TABLE BLOB_TRIGGERS DROP CONSTRAINT BLOB_TRIGGERS_PKEY;
ALTER TABLE BLOB_TRIGGERS DROP CONSTRAINT BLOB_TRIGGERS_TRIGGER_NAME_FKEY;
ALTER TABLE SIMPLE_TRIGGERS DROP CONSTRAINT PK_SIMPLE_TRIGGERS;
ALTER TABLE SIMPLE_TRIGGERS DROP CONSTRAINT FK_SIMPLE_TRIGGERS_TRIGGERS;
ALTER TABLE CRON_TRIGGERS DROP CONSTRAINT PK_CRON_TRIGGERS;
ALTER TABLE CRON_TRIGGERS DROP CONSTRAINT FK_CRON_TRIGGERS_TRIGGERS;
ALTER TABLE TRIGGERS DROP CONSTRAINT PK_TRIGGERS;
ALTER TABLE TRIGGERS DROP CONSTRAINT FK_TRIGGERS_JOB_DETAILS;
ALTER TABLE JOB_DETAILS DROP CONSTRAINT PK_JOB_DETAILS;

为简单起见,我在这里尝试第一个语句

ALTER TABLE BLOB_TRIGGERS DROP CONSTRAINT BLOB_TRIGGERS_PKEY;

以下是我尝试过的方法和结果:

  • ALTER TABLE BLOB_TRIGGERS DROP PRIMARY KEY;

[Err] 1025 - 将“.\quartz_local#sql-df8_9”重命名为“.\quartz_local\BLOB_TRIGGERS”时出错(错误号:150)

  • ALTER TABLE BLOB_TRIGGERS DROP INDEX 'PRIMARY';

[Err] 1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“PRIMARY”附近使用正确的语法

  • ALTER TABLE BLOB_TRIGGERS DROP INDEX PRIMARY;

[Err] 1025 - 将“.\quartz_local#sql-df8_9”重命名为“.\quartz_local\BLOB_TRIGGERS”时出错(错误号:150)

  • ALTER TABLE BLOB_TRIGGERS DROP PRIMARY KEY;

[Err] 1025 - 将“.\quartz_local#sql-df8_9”重命名为“.\quartz_local\BLOB_TRIGGERS”时出错(错误号:150)

我的Mysql版本是5.5.16

编辑:检查索引:

EDIT2:外键请求:

【问题讨论】:

  • ALTER TABLE BLOB_TRIGGERS DROP PRIMARY KEY; 在语法上是正确的版本,所以你需要深入了解
  • AFAIK,它是。但是没有运气找到问题和解决方案。我应该检查什么?

标签: mysql sql quartz.net alter


【解决方案1】:

(errno: 150) 是赠品:这意味着外键定义问题。我怀疑其他一些表有一个取决于这个 PK 的外键约束,所以你需要先删除它,然后再重建它。

编辑:使用您发布的图片,这变得更加清晰:

从 BLOBS_TRIGGERS 到 TRIGGERS 的 FK 由 PK 组成。因此,如果您放弃 PK,则约束将变得陈旧。您需要删除并稍后重新创建约束。

【讨论】:

  • 我确认此表中定义了一个指向另一个表的外键。
  • 我怀疑您需要反过来看:引用此表的其他表上的 FK
  • 我查过了。没有指向 BLOB_CALENDARS 表的外键约束。
  • 他不是关于 BLOB_TRIGGERS 吗?
  • 您不能在没有索引的情况下将FOREIGN KEY 指向另一个表。您的外键约束使用的是(主键)索引。
【解决方案2】:

经过简短的谷歌搜索,我很确定错误消息有点误导。似乎有很多 ALTER TABLE 语句可能会导致该错误消息。

我会检查是否有对该表的外键引用。

【讨论】:

  • 如何检查指向该表 (BLOB_TRIGGERS) 的外键引用?
  • 我认为您需要在信息架构视图中query the KEY_COLUMN_USAGE table
  • 我做了并确认没有指向 BLOB_TRIGGERS 的外键。
  • 但是,如果我首先删除从 BLOB_TRIGGERS 指向其他表的外键,那么我可以删除主键。问题解决了,但我真的不明白背后的原因。
  • 当您尝试删除与依赖项相关的内容时,任何 SQL dbms 都会抱怨并不少见。 MySQL 似乎只是有一个次优的错误消息。当您尝试删除 PostgreSQL 中的外键引用的主键约束时,您会收到一条错误消息,基本上说外键取决于您尝试删除的约束,因此请使用 DROP 。 . . CASCADE 删除依赖对象。
【解决方案3】:

我遇到了同样的问题。删除表中的外键没有帮助。没有其他表引用具有我试图删除的主键的表。我终于通过使用 mysqldump 将表导出到 ASCII 文件解决了这个问题。然后我编辑了文件以将主键更改为我想要的主键,然后我使用 mysql 命令行界面重新导入。

【讨论】:

  • 这应该是评论
【解决方案4】:

ALTER TABLE 表名 DROP PRIMARY KEY;

【讨论】:

    猜你喜欢
    • 2018-03-10
    • 2011-01-07
    • 2011-11-19
    • 2017-03-10
    • 2011-03-06
    • 2014-08-30
    • 1970-01-01
    • 2018-08-10
    • 2019-04-10
    相关资源
    最近更新 更多