tshizuku03の日記

主にoracleやLinuxコマンドについての記事を載せていきたいと思っています。

テーブルRENAMEからのテーブル新規作成で、テーブル再作成

元テーブルは一時的にバックアップを取っておき、

新テーブルはCREATE TABLEで作成する際の手順

 

①変更するテーブルの、PK名・外部キー名(自分が親テーブル、子テーブルどちらも)・INDEX名を漏れ無く調べる。

 

②テーブル名の変更

ALTER TABLE TABLE_NAME RENAME TO TABLE_NAME_BK;

 

③PK名の変更

ALTER TABLE TABLE_NAME_BK RENAME CONSTRAINT PK名 TO PK名_BK;

 

④外部キー名の変更
(自分が子テーブルとして他テーブルを参照している外部キー)

ALTER TABLE TABLE_NAME_BK RENAME CONSTRAINT FK名 TO FK名_BK;

 

⑤外部キーの削除
(自分が親テーブルとして他テーブルから参照されている外部キー)

ALTER TABLE REF_TABLE_NAME DROP CONSTRAINT FK名;

 

⑤INDEX名の変更
(名前付きPKを作成していた場合は、自動で名前付きINDEXが作成されているため、それも変更する)

ALTER INDEX INDEX名 RENAME TO INDEX名_BK;

 

⑥新定義テーブルの作成

CREATE TABLE TABLE_NAME(
 ~
 CONSTRAINT PK名 PRIMARY KEY(COLUMN)
); 

 

⑦外部キーの作成
(自分が親テーブルと子テーブルのどちらも作成)

ALTER TABLE TABLE_NAME ADD CONSTRAINT FKXXX
FOREIGN KEY (COLUMN) REFERENCES REF_TABLE_NAME(COLUMN);

 

⑧INDEXの作成

CREATE INDEX INDEX ON TABLE_NAME (COLUMN);

 

⑨旧テーブルから新テーブルへのデータ移行
(テーブル定義変更内容に合わせてデータを加工する)

INSERT INTO TABLE_NAME SELECT * FROM TABLE_NAME_BK;
COMMIT;