【问题标题】:How to change PRIMARY KEY into UNIQUE KEY when FKs reference itFK引用时如何将PRIMARY KEY更改为UNIQUE KEY
【发布时间】:2015-04-22 16:33:16
【问题描述】:

我有一个包含以下两列的数据库:

`MainTable`
barcode (PK)
name

然后我有另一个表,它是 FK 的:

`SubTable`
barcode (FK)
info

如何在 MainTable 字段中添加一个自动递增的主键,同时确保条形码的唯一性?本质上,我将如何执行以下操作而不会出现 FK 错误?

alter table maintable drop primary key;
alter table maintable add unique key (barcode);
ALTER TABLE `maintable` ADD `id` INT UNSIGNED  NOT NULL  AUTO_INCREMENT  PRIMARY KEY;

【问题讨论】:

  • 等等.... 为什么要这样做?添加 auto int 并用它替换自然键有什么好处?
  • 听起来很奇怪。但是 SQL 看起来像是第一个视图的正确方法。仅缺少一个部分:更新旧数据,因此条目 10000445 未获得 #1
  • 如果我对您的理解正确,您想在主表的条形码列中添加唯一约束吗?如果是这样,这是在这里回答的重复问题:stackoverflow.com/questions/469471/…
  • @theDarse no -- 条形码已经是一个PK。
  • 条形码可以改变这一事实也表明需要代理键。

标签: mysql sql


【解决方案1】:
ALTER TABLE mainTable DROP CONSTRAINT Primary_key
ALTER TABLE maintable ADD CONSTRAINT constraint_name UNIQUE (barcode)
ALTER TABLE maintable ADD COLUMN Id INT PRIMARY KEY AUTO_INCREMENT

这将添加您的新主键,然后您需要向子表添加一个新列,将新主键作为 FK 引用,并将旧 Fk 从子表中删除

【讨论】:

  • @David542 - MySQL 中什么都没有。
  • 是的,我的错误应该是 mysql 中的 Auto_increment 对不起
猜你喜欢
  • 2011-04-20
  • 1970-01-01
  • 2012-06-10
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多