現在の仕事でテーブルの移行作業がある。
そのための手順について勉強したから、参考用にまとめておく。
【要求】
・サービスの改定に伴い、テーブル定義の変更が発生
・これまでのテーブルに登録された内容はそのまま移行
・ALTER TABLEの使用禁止
・追加するカラムには、定数が入る
【テスト環境】
・OS:Windows Vista
・RDBMS:SQLite3
【手順】
1.現在のテーブルのバックアップテーブルを作成する
create table BackUpTable as select * from OriginalTable;
2.現在のテーブルを削除する
drop table OriginalTable;
3.新しいテーブルを作成する
create table NewTable(カラム名 属性, 追加カラム名 属性, ...);
4.バックアップテーブルから新しいテーブルにレコードをコピー
insert into NewTable
as select カラム名, 追加カラム名の値, ...
from BackUpTable;
以上で移行ができるはず。
だけど、DBMSによって、SQL文に修正が必要かもしれない。
あと、SQLiteは型の制約がないから簡単にできたけど、他がどうかは分からない。
まず、実環境と同じ環境でテストし、動作確認が必要だな。
参考URL:
・テーブルデータの移行 - Database Expert - @IT
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=40910&forum=26
2010/12/12
2009/10/08
sqlite3 文字列を数値に型変換(Text -> Real)
sqlite3は、テーブル作成時に指定した型以外のデータをインポート可能。
しかし、sqlで比較演算を行うときには注意が必要。
文字列としてデータがインポートされた場合、数値で比較をすると「0」となる。
C言語などでは、明示的な型変換が可能だが、SQLITEではそのような関数がない。
そこで、こんなやり方でやってみた。
インポートしたデータ:<86(Text)
記号を削除:substr("<86",2) -> "86"(Text)
数値に変換:round(substr("<86",2)) -> 86(数値、Real)
しかし、sqlで比較演算を行うときには注意が必要。
文字列としてデータがインポートされた場合、数値で比較をすると「0」となる。
C言語などでは、明示的な型変換が可能だが、SQLITEではそのような関数がない。
そこで、こんなやり方でやってみた。
インポートしたデータ:<86(Text)
記号を削除:substr("<86",2) -> "86"(Text)
数値に変換:round(substr("<86",2)) -> 86(数値、Real)
2009/10/06
2009/08/25
SQLite3 削除コマンド
テーブルやビューを削除コマンド
drop table TableName;
drop view ViewName;
データの削除コマンド
delete
from TableName
where 条件文
drop table TableName;
drop view ViewName;
データの削除コマンド
delete
from TableName
where 条件文
SQLite3でテーブルを作成するsqlファイル
create table TableName(
F1 integer not null autoincrement,
F2 real,
F3 varchar(x),
F5 text,
F6 datetime(Y-m-d H-i-s),
primary key(F1)
);
-- comment
F1 integer not null autoincrement,
F2 real,
F3 varchar(x),
F5 text,
F6 datetime(Y-m-d H-i-s),
primary key(F1)
);
-- comment
2009/06/20
SQL command
1) Read SQL file
.read FILENAME
2) Create DataBase with cmd.exe
sqlite3 DataBaseName.db
sqlite> create table TableName (i int, t text);
sqlite> insert into TableName(i,t) values(0, 'hoge');
3) Look at Table Values
sqlite> select * from TableName;
4) List up DataBase
.database
5) List up Table
.table
6) Exit sqlite3
.exit
.read FILENAME
2) Create DataBase with cmd.exe
sqlite3 DataBaseName.db
sqlite> create table TableName (i int, t text);
sqlite> insert into TableName(i,t) values(0, 'hoge');
3) Look at Table Values
sqlite> select * from TableName;
4) List up DataBase
.database
5) List up Table
.table
6) Exit sqlite3
.exit
登録:
投稿 (Atom)