SQLite3 http://www.ns.kogakuin.ac.jp/~ct13140/Prog/

Slides:



Advertisements
Similar presentations
Accessによるデータベース(1) Ver.1 /11.
Advertisements

SQL データベースアクセスのための文法 担当 岡村耕二 月曜日 2限 平成20年度 情報科学III (理系コア科目・2年生)
7-1.WEKOコンテンツ 一括登録 マニュアル Version2.5
インターネット技術特論 H:SQLite3 山口 実靖
情報理工学部 情報システム工学科 ラシキアゼミ 3年 H 井奈波 和也
データベース工学および演習 第5章 リレーショナルデータベース言語SQL
PostGIS - 1 (入門編).
SQL データベースアクセスのための文法と MySQL
.NET テクノロジー を利用した SAP ソリューションの拡張 (3階層化) (評価環境構築ガイド)
知的システム構築工房   Linux設定セミナーシリーズ 第6回 MySQL設定 2011年3月17日(木) 株式会社 アセンディア 1.
実習用サーバの利用開始手順 (Windowsの場合) TeraTerm Proをインストール 公開鍵をメールで送付
3-1 MySQLについて 発表者:藤村元彦 自然言語処理研究室.
コンピュータリテラシー 第3回授業の復習 基本的なUNIXコマンド
MySQLに接続するデータベースプログラム
Excel による データベース入門 Ver /9.
2008年12月11日 RDBMSとSQL(2/3) 関数,GROUP,JOIN,演算
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
ACCESSによる データベースアプリケーション開発実習 日本工業大学 情報工学科 “データベースの実際” 教材
Accessによる SQLの操作 ~実際にテーブルを操作してみよう!~.
SQL J2EE I 第3回 /
PuTTYとパスワード変更 文責:亀 彩.
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
ファイルシステムとコマンド.
コンピュータと情報 第3回 補遺 ファイルとフォルダ.
プログラミング論 II RDBMSとSQL
 データベースによる並列処理 情報論理工学研究室  三宅健太.
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
14.テーブル定義,一対多の関係,多対多の関係, 外部キー,索引(インデックス),データベース操作
.NET テクノロジー を利用した SAP ソリューションの拡張 (3階層化) (評価環境構築ガイド)
マイクロソフト Access を使ってみよう 第1回
マイクロソフト Access での SQL 演習 第1回 SQL問い合わせ(クエリ)
マイクロソフト Access を使ってみよう 第4回
データベースとJavaをつなげよう! ~JDBC~
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
2004/05/13 3-4 データ型(カラムタイプ) について 発表者:藤村元彦 自然言語処理研究室.
11.Webサイトとデータベース, Webサイト+ブログシステムの開設手順例
SQL パフォーマンス チューニング ~ カバーリングインデックス/クエリヒントの利用~
九州大学キャンパスクラウド 利用法 情報ネットワーク特論 講義資料.
SQL データベースアクセスのための文法 担当 岡村耕二 月曜日 2限 平成21年度 情報科学III (理系コア科目・2年生)
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
3-10. MySQLシステムの管理  2004年6月10日  大北高広                01T6010F.
第1回.リレーショナルデータベースを使ってみよう
第1回.リレーショナルデータベースを使ってみよう
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
第3回.テーブルの結合 結合条件 SQL を用いた結合問い合わせ.
第3回.テーブルの結合 結合条件 SQL を用いた結合問い合わせ.
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
09 06/23 PHP と SQL (MySQL) の連携 その1
3-6.インデックスについて 3-7.関数と併用されることの 多いMySQLコマンド
3-3.テーブルを更新する 2004年 4月22日(木) 01T6074X 茂木啓悟.
「Webデータベースの構築技術」正誤表 ページ 項目 誤記 訂正 18 表1.4 アクセス 権限の削除 ・・・テーブル名 TO ユーザ名
講義ノート共有データベース NoteTotter?
日本郵便 「Web-EDI」利用ガイド (JP EDIシステム)
ネットワークプログラミング (3回目) 05A1302 円田 優輝.
データベース設計 第8回 クライアント=サーバーモデル(2)
UNIX演習 情報ネットワーク特論.
3.リレーショナルデータベース,主キー, SQL
UNIX演習 情報ネットワーク特論資料.
第1章 いよいよプログラミング!! ~文章の表示 printf~
UNIX演習 情報ネットワーク特論資料.
UNIX演習 情報ネットワーク特論資料.
情報処理概論Ⅰ 2007 第6回 2019/5/16 情報処理概論Ⅰ 第6回.
再帰CTE を使って遊ぼう 大阪#9 2012/04/14.
関係データベースとSQL MZ Platform講習会(上級).
CO-Client Opeartion 1.1 利用履歴データベースの設計 (スキーマ バージョン 対応)
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
第1回.リレーショナルデータベースを使ってみよう
SQL J2EE I (データベース論) 第3回 /
クリエイティブ リサーチ 2019/05/20 日本工学院八王子専門学校 M.Katsube.
SQL データベース論 第11回.
Presentation transcript:

SQLite3 http://www.ns.kogakuin.ac.jp/~ct13140/Prog/

SQLite オープンソース(フリー)RDBMS実装の1個 http://www.sqlite.org/ 特徴 現在,3.6が最新版. SQLite 2.x と SQLite 3.x が有名. 特徴 RDBMSサーバプロセスの起動が不要. 「1データベース,1ファイル」で格納.. つまり「お手軽」なRDBMS. SQLiteの業務での使用はまれ.使い方やSQL文法は他の実装と類似.勉強には(ほとんど)問題ない. 問題点:型付けが弱い.ユーザが無く,GRANTなどがない.

起動 と 終了 www.ns.kogakuin.ac.jp では以下にある /home/ct13140/bin/sqlite3 起動方法 (データベースと接続) /home/ct13140/bin/sqlite3 DBファイル 指定ファイルにデータ保存.無ければ新規作成. 終了方法 (データベースと切断) sqlite> .exit 上記は,山口が個人的にインストールしたものです. 年度末までは,存在することを保証します. それ以降は,予告無く削除することもありえます.

起動 と 終了 >/home/ct13140/bin/sqlite3 ~/a.db SQLite version 3.6.20 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> sqlite> .help .backup ?DB? FILE Backup DB (default "main") to FILE (略) width: sqlite> .exit > 接続 接続中 切断 sqlite> というプロンプトが 表示されている間は, SQLite3と接続中.

操作 赤字がユーザの入力である. 以下のような表を作るとする. id name email fukuda fukuda fukuda@kantei.gr.jp 1 abe abe@kantei.gr.jp ↑ Integer型 ↑ text型 ↑ text型

復習 (SQL文) 0/6 データベースの作成 データベースの削除 データベースにつないでいない状態で sqlite3 データベースファイル名 ファイルが存在したら「既存DBに接続」,存在しなかったら「新規DB作成」 これはSQLite特有のコマンド. データベースの削除 rm データベースファイル名 これはUnix一般のファイル削除コマンド.

復習 (SQL文) 1/6 データベースに接続する. データベースとの接続を切断する. データベースにつないでいない状態で sqlite3 データベースファイル名 これはSQLite特有のコマンド. データベースとの接続を切断する. データベースにつないでいる状態で .exit これは,SQLite特有のコマンド.

復習 (SQL文) 2/6 存在する表の一覧を表示 データベースにつないでいる状態で .tables これは,SQLite特有のコマンド.

復習 (SQL文) 3/6 表の作成 表の削除 データベースにつないでいる状態で CREATE TABLE...; これはRDBMS一般のコマンド. 表の削除 DROP TABLE テーブル名; 表内のデータが全て消えてしまう.

復習 (SQL文) 4/6 表内のデータを得る 表にデータを挿入する. データベースにつないでいる状態で SELECT 列名 FROM 表名...; これはRDBMS一般のコマンド. 表にデータを挿入する. INSERT INTO 表名 VALUES (...);

復習 (SQL文) 5/6 表内のデータを変更する データベースにつないでいる状態で UPDATE 表名 SET 列名=値 WHERE 条件; これはRDBMS一般のコマンド.

復習 (型) Integer型 : 整数型 Real型 : 浮動小数点型 TEXT型 : 文字列型 SQLite に, CHAR型, VARCHAR型はない. BLOB型 : Binary Large OBject 値をそのままバイナリで格納.

操作 0/21 PuTTYでgreen.ns.kogakuin.ac.jp にloginする 「Host Name (or IP address)」に「green.ns.kogakuin.ac.jp」と, 「Port」に「22」と入力し「Open」をクリック. 「Security Alert」が表示されたら「Yes」を押す. 「login as」に対してユーザ名を,「password」に対してパスワードを入力. 注意:ここで使用するユーザ名とパスワードは,工学院大学計算機(Windows)にlogonする時に使用するものです.

操作 1/21 自分用データベースの作成&接続. ct13140@green[100]:/home/ct13140/bin/sqlite3 ~/a.db SQLite version 3.6.20 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> このように表されれば データベースに接続中.

操作 2/21 データベースとの接続を切断する. sqlite> .exit ct13140@green[101]:

操作 3/21 再度自分用データベースに接続する. ct13140@green[101]:/home/ct13140/bin/sqlite3 ~/a.db SQLite version 3.6.20 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> このように表されれば データベースに接続中.

操作 4/21 存在する表を調べる(データベース接続中). sqlite> .tables sqlite> 何も表示されずに が表示されたら, 「表はない」ということ.

操作 5/21 表usertblを作る(データベース接続中). sqlite> CREATE TABLE usertbl ( ...> id integer, ...> name txt, ...> email txt ...> ); sqlite> 使用したSQL文は CREATE TABLE usertbl (id integer, name text, email text); 途中の改行はあってもなくてもよい. 最後の;(セミコロン)を忘れない様に.

「操作5」で作成した表が表示されれれば成功. 操作 6/21 存在する表を調べる(データベース接続中). sqlite> .tables usertbl sqlite> 「操作5」で作成した表が表示されれれば成功.

操作 7/21 表にSELECTを実行する(データベース接続中). 現在,表は空のはずである. sqlite> SELECT * FROM usertbl; sqlite> 何も成功されなければ, 成功

操作 8/21 表にデータを入力する(データベース接続中). sqlite> INSERT INTO usertbl VALUES (0, 'fukuda', 'fukuda@kantei.go.jp'); sqlite> SELECT * FROM usertbl; 0|fukuda|fukuda@kantei.go.jp これがデータの挿入命令. 表示は特に変化なし. 途中改行はあってもなくてもよい. SELECTを実行して, 表の中身を確認してみる.

操作 9/21 表にデータを入力する(データベース接続中). sqlite> INSERT INTO usertbl VALUES (1, 'abe', 'abe@kantei.go.jp'); sqlite> INSERT INTO usertbl VALUES (2, 'koizumi', 'koizumi@kantei.go.jp'); sqlite> SELECT * FROM usertbl; 0|fukuda|fukuda@kantei.go.jp 1|abe|abe@kantei.go.jp 2|koizumi|koizumi@kantei.go.jp sqlite>

操作 10/21 表diarytblを作る(データベース接続中). sqlite> CREATE TABLE diarytbl (diaryid Integer, userid Integer, year Integer, month Integer, day Integer, sentence txt); sqlite> .tables diarytbl usertbl sqlite> 日記記事1個ごとに1行の表とする. diaryid:日記記事の通し番号 Userid:日記を書いたユーザのID year,month,day:日記の日付 sentence:日記本文

操作 11/21 表diarytblにデータを挿入する(データベース接続中). sqlite> INSERT INTO diarytbl VALUES (0, 0, 2007, 1, 1, 'gantan deshita'); sqlite> INSERT INTO diarytbl VALUES (1, 0, 2007, 7, 29, 'senkyo deshita'); sqlite> INSERT INTO diarytbl VALUES (2, 2, 2005, 8, 8, 'kaisan shita'); sqlite> SELECT * FROM diarytbl; 0|0|2007|1|1|gantan deshita 1|0|2007|7|29|senkyo deshita 2|2|2005|8|8|kaisan shita sqlite>

操作 12/21 現状の確認(データベース接続中). sqlite> SELECT * FROM usertbl; 0|fukuda|fukuda@kantei.go.jp 1|abe|abe@kantei.go.jp 2|koizumi|koizumi@kantei.go.jp sqlite> SELECT * FROM diarytbl; 0|0|2007|1|1|gantan deshita 1|0|2007|7|29|senkyo deshita 2|2|2005|8|8|kaisan shita sqlite>

操作 13/21 現状の確認(データベース接続中). sqlite> SELECT * FROM diarytbl WHERE userid=0; 0|0|2007|1|1|gantan deshita 1|0|2007|7|29|senkyo deshita sqlite>

表内の列の順番は全く保証されていないので, 操作 14/21 現状の確認(データベース接続中). sqlite> UPDATE diarytbl SET sentence='ganjitu deshita' WHERE diaryid=0; sqlite> SELECT * FROM diarytbl; 0|0|2007|1|1|ganjitu deshita 1|0|2007|7|29|senkyo deshita 2|2|2005|8|8|kaisan shita sqlite> 表内の列の順番は全く保証されていないので, 順番はRDBMSが勝手に決めてくる. 必ずしこの順になるとは限らない.

操作 15/21 内部結合(データベース接続中). sqlite> SELECT * FROM usertbl CROSS JOIN diarytbl; 0|fukuda|fukuda@kantei.go.jp|0|0|2007|1|1|ganjitu deshita 0|fukuda|fukuda@kantei.go.jp|1|0|2007|7|29|senkyo deshita 0|fukuda|fukuda@kantei.go.jp|2|2|2005|8|8|kaisan shita 1|abe|abe@kantei.go.jp|0|0|2007|1|1|ganjitu deshita 1|abe|abe@kantei.go.jp|1|0|2007|7|29|senkyo deshita 1|abe|abe@kantei.go.jp|2|2|2005|8|8|kaisan shita 2|koizumi|koizumi@kantei.go.jp|0|0|2007|1|1|ganjitu deshita 2|koizumi|koizumi@kantei.go.jp|1|0|2007|7|29|senkyo deshita 2|koizumi|koizumi@kantei.go.jp|2|2|2005|8|8|kaisan shita sqlite> userID = 2 の横に, userID=0 の書込を置いても, 意味が無い.

操作 16/21 内部結合(データベース接続中). sqlite> SELECT * FROM usertbl INNER JOIN diarytbl ON usertbl.id = diarytbl.userid; 0|fukuda|fukuda@kantei.go.jp|0|0|2007|1|1|ganjitu deshita 0|fukuda|fukuda@kantei.go.jp|1|0|2007|7|29|senkyo deshita 2|koizumi|koizumi@kantei.go.jp|2|2|2005|8|8|kaisan shita sqlite>

操作 17/21 表内のデータの削除(データベース接続中). sqlite> DELETE FROM diarytbl WHERE diaryid=0; sqlite> SELECT * FROM diarytbl; 1|0|2007|7|29|senkyo deshita 2|2|2005|8|8|kaisan shita sqlite>

操作 18/21 表の削除(データベース接続中). sqlite> DROP TABLE diarytbl; sqlite> .tables usertbl sqlite> 表を削除すると, 表内のデータは全て消失するので注意.

操作 19/21 データベースとの接続を切断(データベース接続中). sqlite> .exit ct13140@green[102]:

データベース内の全てのデータが失われるので注意!! 操作 20/21 データベースの削除. ct13140@green[102]:rm ~/a.db ct13140@green[103]: データベースを削除すると, データベース内の全てのデータが失われるので注意!! 頻繁に行う作業ではありません.

注意事項 RDBMSに接続中は, sqlite> と表示されるのが正常な状態です. ...> などと表示されたのなら「コマンド入力途中」という変な状態です.これを正常に戻すには ;[Ent] などを押すと,(入力文はエラーとなるが)元に戻せる.

注意事項 DBのデータを読むには, DBにデータを書き込むには, DBファイルへの読込権限が必要. DBのファイルへの書込権限と, Webなどで使用するときは後者を要注意!

フィールド制約:NOT NULL NOT NULL制約 NULL値を入れられなくなる sqlite> CREATE TABLE tbl0(id integer, name text NOT NULL, email text); sqlite> INSERT INTO tbl0 VALUES (0,'sane',NULL); sqlite> INSERT INTO tbl0 VALUES (1,NULL,'sane@sane.com'); Error: constraint failed これは, 正常に実行される. これは, エラーとなる.

フィールド制約:UNIQUE UNIQUE制約 同じ値を複数行に入れられなくなる sqlite> CREATE TABLE tbl1(id integer UNIQUE, name text, email text); sqlite> INSERT INTO tbl1 VALUES (0,'sane','sane@sane.com'); sqlite> INSERT INTO tbl1 VALUES (0,'yasu','yasu@sane.com'); Error: constraint failed これは, 正常に実行される. これは, エラーとなる.

フィールド制約:DEFAULT DEFAULT制約 入力略時には,DEFAULT値が採用される. sqlite> CREATE TABLE tbl2(id integer, name text, email text DEFAULT 'a@a.com'); sqlite> INSERT INTO tbl2 (id,name) VALUES (0,'sane'); sqlite> select * from tbl2; 0|sane|a@a.com

フィールド制約:PRIMARY KEY PRIMARY KEY制約 自動的に一意の値が割り振られる. ただし,削除してしまった行の値は再利用される. sqlite> CREATE TABLE tbl3(id integer PRIMARY KEY, name text, email text); sqlite> INSERT INTO tbl3 VALUES (NULL,'sane', 'sane@sane.com'); sqlite> INSERT INTO tbl3 (name,email) VALUES ('yasu','yasu@sane.com'); sqlite> SELECT * FROM tbl3; 1|sane|sane@sane.com 2|yasu|yasu@sane.com

フィールド制約:CHECK CHECK制約 値に制限をかけられる. sqlite> CREATE TABLE tbl4(id integer CHECK(id>0), name text, email text); sqlite> INSERT INTO tbl4 VALUES (1,'sane', 'sane@sane.com'); sqlite> INSERT INTO tbl4 VALUES (0,'yasu', 'yasu@sane.com'); Error: constraint failed これは, 正常に実行される. これは, エラーとなる.

フィールド制約:ANTOINCREMENT 一意なIDの自動割り振り sqlite> CREATE TABLE usertbl2 (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT); sqlite> .tables usertbl usertbl2 sqlite> INSERT INTO usertbl2 (name, email) VALUES ('sane','sane@sane.com'); sqlite> INSERT INTO usertbl2 (name, email) VALUES ('yasu','yasu@sane.com'); sqlite> INSERT INTO usertbl2 VALUES (NULL, 'hoge', 'hoge@sane.com'); sqlite> SELECT * FROM usertbl2; 1|sane|sane@sane.com 2|yasu|yasu@sane.com 3|hoge|hoge@sane.com sqlite> PRIMARY KEY かつ AUTOINCREMENT にしておくと,一度削除された値が 再利用されることがない.

SQLiteコマンド (DBではなく) DBMSを制御するコマンド .help :ヘルプメッセージを表示 .dump :データベースをダンプ 例:シェルにて sqlite3 a.db .dump | sqlite3 b.db .quit :SQLiteを終了 .tables :表の一覧を表示 例:「.tables」,「.tables us%」 .databases :データベース一覧を表示 .schema :表のスキーマ(型など)を表示.

無料でRDBMSの勉強をするには 講義ツールを使用(本学サーバ+SQLite3) 本学情報処理演習室 Microsoft Access. おすすめしない.AccessはSQLを使いづらい. 自分のWindows機に無料RDBMSをinstall 例:Windows版MySQL,Windows版PostgreSQL 自分のPCに無料OSと無料RDBMSをinstall 例:Linux+MySQL,Linux+PostgreSQL