繁体   English   中英

更改键和外键

[英]Changing keys and foreign keys

我有两张桌子。 第一个是狗:

oldId   name
-----   -----
'AX01'  Fido
'AX02'  Pluto
...      ....

另一个称为服务式:

Id  ServicedDog  Descripton
--- ------------ ----------
1   'AX01'        'Dog bath'
2   'AX01'        'Dog Vaccined'
...
22  'AX02'        'Dog bath'
...

我们遇到的问题是,我们需要将表狗的oldId列(CHAR(4))转换为自动递增的INT 1,并更新服务的表的相应ServicedDog列以具有新值(它是外键)。 我遇到的另一个问题是ServicedDog的数据类型是CHAR(4),我将需要将此列的数据类型更改为INT。 请告诉我,这怎么办? 谢谢

(在没有看到SHOW CREATE TABLE的情况下,我正在做出一些猜测。)

现在真的叫oldid吗?

-- Add the desired id (and populate it);
-- Replace the existing PK:
ALTER TABLE dogs
    ADD COLUMN id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL,
    DROP PRIMARY KEY,
    ADD PRIMARY KEY(id)
    ADD INDEX(oldid);

-- add new dog_id (but do not populate)
ALTER TABLE serviced
    ADD COLUMN dog_id SMALLINT UNSIGNED NOT NULL,
    ADD INDEX(dog_id);

-- establish new linkage:
UPDATE   serviced
    JOIN dogs  ON serviced.oldid = dogs.oldid
    SET  serviced.dog_id = dogs.id;

笔记:

  • 假设oldid实际上是该列的当前名称。
  • 假设曾经有不超过64K的狗( SMALLINT UNSIGNED ); 如果可能还有更多,请更改声明。
  • oldid上保留索引-用于转换; 您可能要删除索引,甚至可能删除列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM