1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQLでテーブルの定義を更新する

Posted at

運用中のデータベースで、1レコードを複数のレコードに分割するようなテーブル定義をする必要があったので、備忘録的にメモします。

やりたいこと

例としてこんなテーブル定義(Score)があったとします。
もとは1レコードに国語と算数の得点が入っていましたが、各科目ごとにレコードを作るように変更する要求がありました。
なので前のデータを保ったまま、新定義(NewScore)に移行することを目的にします。
人工キー(1)-ページ2.png

方針

全体的な方針としては、一度別のテーブルを作成&レコードの移行した後、名前をもとのテーブル名に付け替えます。
以下の順に行います。

  1. 新定義のテーブルを作成
  2. 旧テーブルのレコードを新テーブルに移行
  3. 旧定義のテーブルを削除
  4. 新定義のテーブル名を変更

2.のレコードの移行ですが、INSERTは別のテーブルのデータを挿入することもできるので、それで行います。(参考)

以下サンプルです。
旧定義のテーブルの作成などは省略。

-- 新定義のテーブルを作成  ここのテーブル名はあとで付け替えるので適当でもOK
CREATE TABLE NewScore(
    StudentId int,
    Subject varchar(20),
    Score smallint,
    primary key(joiny, id));

-- 旧テーブルのレコードを新テーブルに移行
-- まずは国語のデータ移行
INSERT INTO NewScore(
    StudentId,
    'Japanese',
    JapaneseScore)
SELECT StudentId, JapaneseScore FROM Score;

-- 次は算数のデータ移行
INSERT INTO NewScore(
    StudentId,
    'Mathmatic',
    MathmaticScore)
SELECT StudentId, MathmaticScore FROM Score;

-- 旧定義のテーブル削除
DROP TABLE Score;

-- 新定義のテーブル名をもともとのテーブル名に付け替え
ALTER TABLE NewScore RENAME TO Score;

これでテーブル定義を更新し、レコードを新定義に合わせて登録できます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?