rakutoネット
お問合せ 免責事項 Q&A 掲示板 サイト管理 リンク サイトマップ
HOME > SQLiteでのalter

SQLiteでのalter


ALTER TABLEの解決法

SQLiteのバージョン3以上であれば、ALTER TABLEのADDコマンドで項目の
追加が出来ますがMySQL並に細かな変更は行えません。
SQLite Frequently Asked QuestionsにあるようにTEMPORARY使った方法を紹介します。

都道府県データを入力する

idとnameのシンプルなテーブルを作成します。

CREATE TABLE prefecture_tbl (
    id          integer NOT NULL,
    name        varchar(128),
    PRIMARY KEY (id)
);
 
INSERT INTO prefecture_tbl (name) VALUES ('茨城県');
INSERT INTO prefecture_tbl (name) VALUES ('栃木県');
INSERT INTO prefecture_tbl (name) VALUES ('群馬県');
INSERT INTO prefecture_tbl (name) VALUES ('埼玉県');
INSERT INTO prefecture_tbl (name) VALUES ('千葉県');
INSERT INTO prefecture_tbl (name) VALUES ('東京都');
INSERT INTO prefecture_tbl (name) VALUES ('神奈川県');
INSERT INTO prefecture_tbl (name) VALUES ('新潟県');
 
SELECT * FROM prefecture_tbl;

id name
1 茨城県
2 栃木県
3 群馬県
4 埼玉県
5 千葉県
6 東京都
7 神奈川県
8 新潟県

TEMPORARYを使ったalter

都道府県名に加えてエリア項目を追加する必要が発生しました。

ALTER TABLEはSQLite version 3.1.3からやっと使えるものになったので
バージョンが低いと項目の追加などが行えません。

そこで、現在あるデータをTEMPORARYに保存してからテーブルを作り直し
TEMPORARYのデータを新しいテーブルに移し変える方法を取ります。

/* 安全のためトランザクションを宣言します */
BEGIN TRANSACTION;
 
/* TEMPORARYエリアに保存用のテーブルを作成 */
CREATE TEMPORARY TABLE prefecture_tbl_alter (
    id          integer,
    name        varchar(128),
    area        varchar(128)
);
/* 変更前のデータを保存 */
INSERT INTO prefecture_tbl_alter SELECT *,'関東・信越' AS area FROM prefecture_tbl;
 
 
/* テーブルの作り直し */
DROP TABLE prefecture_tbl;
CREATE TABLE prefecture_tbl (
    id          integer NOT NULL,
    name        varchar(128),
    area        varchar(128),
    PRIMARY KEY (id)
);
/* TEMPORARYデータをもとに復旧 */
INSERT INTO prefecture_tbl SELECT * FROM prefecture_tbl_alter;
 
/* 途中エラーがあればROLLBACK */
COMMIT;
 
SELECT * FROM prefecture_tbl;

id name area
1 茨城県 関東・信越
2 栃木県 関東・信越
3 群馬県 関東・信越
4 埼玉県 関東・信越
5 千葉県 関東・信越
6 東京都 関東・信越
7 神奈川県 関東・信越
8 新潟県 関東・信越

/* SQLite version 3.1.3以上の場合 */
ALTER TABLE prefecture_tbl ADD area varchar(128);
VACUUM;
UPDATE prefecture_tbl SET area = '関東・信越';


<<SQLiteでの年齢計算
SQLite Tips

PHPリング

@PHP.ring Home
<5 <1 Random List 1> 5>

rktSQLite

  • sourceforge.jp

広告


アマゾン検索

サーチ:
Amazon.co.jpアソシエイト

カテゴリ

  •  Templateエンジンのすすめ Templateエンジンのすすめ
  •  SQLiteをやってみよう SQLiteをやってみよう
  •  SQLite SQLコマンド一覧 SQLiteコマンド一覧
  •  SQLite 管理プログラムSQLite 管理
  •  はじめてのEclipse はじめてのEclipse
  •  PHP SQLiteのTIPS PHP SQLiteのTIPS
  •  サンプル サンプル/ダウンロード
  •  リンク リンク
  •  掲示板 掲示板

メニュー

  •  SQLiteのシーケンス設定
  •  SQLiteでの外部結合
  •  SQLiteでの日付データ
  •  SQLiteでの日付関数
  •  SQLiteでの年齢計算
  •  SQLiteでのalter

キーワード検索

キーワード



最近のTB

  •  2006/03/13さくらのブログに挑戦[rakutoネットブログ]
  •  2006/01/20レーザーチャートの作成方法[脳内研究所]

Summary

  •     ATOM(XML)
  •     RDF(XML)
  •     RSS0.92(XML)
  •     RSS2.0(XML)

Powered by

  •     PHP
  •     Smarty
  •     SQLite
  •     MySQL
Copyright (C) 2005 `rakuto.net' All Rights Reserved.