TOP

データベースsqlite3 その12

売上管理システム・テーブル作成

売上管理システム・テーブル作成

sqlite3 でのコマンドプロンプトにおけるデータベース構築、操作を、ここでは、実際に「データベース sqlite その1」で示されたものを題材にして、行ってみました。

pc 環境

  • Windows7 Professional Service Pack 1
  • Cygwin
  • sqlite3_0 3.34.0

売り上げ管理システム データテーブル定義

注文 orders
注文番号(主キー) 購入者コード(外部キー) 発行日 購入金額 店コード(外部キー)
購入者 buyer
購入者コード(主キー) 購入者名
店 branch
店コード(主キー) 店名
商品 goods
商品コード(主キー) 商品名 単価
注文明細 details
注文番号(外部キー) 商品コード(外部キー) 数量

データベースを作成する [.databases] [.shell]

  1. sales_manage.sq3 というデータベースを作成します。
  2. 接続されているデータベースを表示するコマンド。
  3. main は一時データ オブジェクトを保持するために予約されている sqliteドットコマンドプロンプト上のデータベース名であります。複数のデータベースに接続する attach 操作をする場合を除き、この場合は、とくに気にする必要が無いです。その後に続くファイルパス名が保存予定のファイル名になります。r/w は読み書きモードで接続されていることを示しております。

ファイルが生成されているか確認してみる。

.shell CMD ARGS...       Run CMD ARGS... in a system shell
                           システムが提供しているシェルコマンドを実行します。
  1. サイズ 0 の読み書き実行ファイルが生成されている。

テーブルを作成(削除)する [CREATE TABLE] [DROP TABLE] [.schema]

CREATE TABLE [IF NOT EXISTS] [database_name.] table_name(
   column1 [datatype] [column definition] 
   column2 [datatype] [column definition],
   column3 [datatype] [column definition],
   .....
   columnN [datatype] [column definition];
* column definition  NOT NULL, CHECK, UNIQUE, PRIMARY KEY and FOREIGN KEY constraints etc.
DROP TABLE database_name.table_name;
.schema ?PATTERN?        Show the CREATE statements matching PATTERN
   Options:
      --indent             Try to pretty-print the schema
      --nosys              Omit objects whose names start with "sqlite_"  
作成されたsqlステートメントを表示します。
引数にテーブル名を指定すると、そのテーブル名と一致するテーブルのみを表示します

購入者テーブル buyer 作成

  1. .作成された SQL 文を表示します。テーブル名指定で、テーブル名で作成されたことを確認できます。

店テーブル branch 作成

商品テーブル goods 作成

テーブルにデータを入れる1 [INSERT INTO]

INSERT INTO table_name( column1, column2....columnN)
VALUES ( value1, value2....valueN);

購入者テーブル buyer にデータを挿入する

  1. id 属性に integer primary key 制約がついている場合、null を挿入すると、そのテーブルの rowid の値が反映される。

店テーブル branch にデータを挿入する

商品テーブル goods にデータを挿入する

テーブルに格納されているデータを表示[SELECT .. FROM] [.show] [.mode] [.tables]

SELECT column1, column2....columnN
FROM table_name;
.show  Show the current values for various settings
    画面の設定情報などを表示する
.mode mode_name 画面出力モードを設定する
    csv -カンマ区切り値
    column -左揃えの列。
    html − HTML <table> コード
    insert - TABLE の SQL 挿入ステートメント
    column - 行ごとに1つの値
    list - .separator文字列で区切られた値
    tabs −タブ区切りの値
    tcl − TCL リスト要素
  1. デフォルトでは、’|’区切りのリストモードの表示となる。
  2. .show コマンドは現在の表示設定値を表示するコマンドです。mode:list となっている。表示を替えたいときには、個々に表示されているコマンドの設定値をたとえば「.mode column」のようにかえればよい。
  3. explain を on にすると見やすい表示になるようです。
  4. mode を column にしても見た目は同じですが、表示設定値の違う箇所があるので、ファイル出力に切り替えるときには注意が必要です。

作成されているテーブルデータを確認する

作成されたテーブルを確認する[.tables]

.tables  ?TABLE?          List names of tables matching LIKE pattern TABLE
              接続されたデータベース内のすべてのテーブルを一覧表示する
  1. tables コマンドで、作成されているテーブル名を確認できます。

管理用に暗黙のうちに生成される sqlite_master テーブル

マスター テーブルは、データベース テーブルに関する重要な情報を保持し、sqlite_masterと呼ばれます。

  1. テーブルを生成されると、マスターテーブルが暗黙のうちに生成される。
  2. 生成されたテーブル情報を表示する。

テーブルを作成する2[FOREIGN KEY] [pragma] [DEFAULT]

続いて、注文 orders テーブルと注文明細 detailsを作っていきます。

但し、これらのテーブルの要素には「テーブルを作成する1」で作った要素を参照する外部キーが存在します。FOREIGN KEY構文でキー参照の構文を作ることになります。sqlite3 では、バージョン 3.6.19 (2009-10-14) の時点以降でサポートされている。

FOREIGN KEY(key name) REFERENCES table name(key name)

外部キーは以下の特徴があります。

  • 外部キー制約の適用を有効にするには、 PRAGMA foreign_keys=ONを実行するか、 -DSQLITE_DEFAULT_FOREIGN_KEYS=1でコンパイルします 。
  • 外部キー制約のリファレンスキーは、ROWID を使用できません。リファレンスキーは名前付き列のみを使用する必要があります。
  • リファレンスキーはリファレンスするテーブルの主キーである場合が多いですが、主キーでない場合は、uniqueである必要があります。また、主キーの場合は「(key name)」は省略できます。
  • 後述のとおり、インライン表記で記述できます。
  • 外部キー宣言の最後にカンマを記入しないでください。
  • 列名が間違っている場合、外部キーは作成されますが機能しません

注文テーブル orders 作成

  1. SQLite version 3.6.19 (2009-10-14) 以降において、foreign keyの使用 は pragma で設定する必要があります。pragma は SQLite 環境内のさまざまな環境変数と状態フラグを制御するために使用される特別なコマンドです。
  2. 設定を on にすると、foreign key の値が 1 にセットされ、off にすると 0 がセットされます。
  3. DEFAULT 句は、 INSERT の実行時にユーザーが値を明示的に指定しない場合に列に使用するデフォルト値を指定します。列定義に明示的な DEFAULT 句が付加されていない場合、列のデフォルト値は NULL です。デフォルト値が NULL、文字列定数、blob 定数、signed-number、または括弧で囲まれた任意の定数式であることを指定できます。
  4. ここでは、orders テーブルの buyer_id キーが buyer テーブルの id キーを、branch_id キーが branch テーブルの id キーを参照しています。buyer テーブルの主キーである id と branch テーブルの主キーである id は省略できます。それぞれ「references buyer references branch」と記述しても良い。

注文明細テーブル details 作成

  1. データをモデル化した段階では、注文詳細テーブル details は 注文番号と商品コードを合わせたものがテーブルデータを一意にするキーの組み合わせになっております。sql 文では、– コメント記述のように複合プライマリーキーを定義できますが、後述、details データの追加仕様により、この組み合わせは、必ずしも一意ではないので「SELECT column FROM table name WHERE rowid=taget rowid;」のよう名方法で、レコードを特定することになります。

テーブルにデータを入れる2 [INSERT INTO]

INSERT INTO table_name( column1, column2....columnN)
VALUES ( value1, value2....valueN);

注文テーブル orders にデータを挿入する

  1. 日付文字列は定義されている正しいフォーマットで記入する必要があります。(ex. YYYY-MM-DD)

注文詳細テーブル details にデータを挿入する

FOREIGN KEY が正しくセットされているかチェックする[SELECT FROM][DELETE FROM]

SELECT column1, column2, columnN FROM table_name [WHERE {CONDITION}];
DELETE FROM table_name WHERE {CONDITION};

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください