更改密钥和外键

时间:2017-03-07 18:00:03

标签: mysql indexing insert foreign-keys

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

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

和另一个名叫serviced:

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

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

1 个答案:

答案 0 :(得分:0)

(没有看到pkg_calc.run_xyz_job()你所拥有的,我正在做一些猜测。)

现在真的叫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; 实际上是该列的当前名称。
  • 假设不超过64K的狗(oldid);如果您可能有更多声明,请更改声明。
  • 保留SMALLINT UNSIGNED的索引 - 用于转换;你可能想要删除索引甚至列。