簡體   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