ラベル SQL の投稿を表示しています。 すべての投稿を表示
ラベル SQL の投稿を表示しています。 すべての投稿を表示

2010/12/12

【DB】テーブルの移行

現在の仕事でテーブルの移行作業がある。
そのための手順について勉強したから、参考用にまとめておく。

【要求】
・サービスの改定に伴い、テーブル定義の変更が発生
・これまでのテーブルに登録された内容はそのまま移行
・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

2009/10/08

sqlite3 文字列を数値に型変換(Text -> Real)

sqlite3は、テーブル作成時に指定した型以外のデータをインポート可能。

しかし、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 条件文

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

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