SQLiteを学んでいこうという連載の10回目です。前回の記事はこちらになります。
前回は、SQLiteで日時データを扱う際のポイントについてご紹介しました。SQLiteの日時データは結構癖があるので、事前に認識しておきたいところです。
今回からテーブルについて見ていこうと思います。データベースファイルの中身ですね。 以前、一般的なデータベースシステムに要求される基本機能にCRUDがあります。データの作成(Create)、読み出し(Read)、更新(Update)、削除(Delete)の頭文字を取ったものです。しかし、他の形でテーブルを操作することもあります。今回はテーブル内容の確認方法についてご紹介します。
テーブルの確認
まずは以下の操作で今回確認に使用するテーブルを作りましょう。また、今回は結果を確認しやすくするために「.mode line」と設定しました。各列ごとに分けて表示されます。
sqlite> .mode line sqlite> CREATE TABLE sample(id INTEGER,name TEXT,age INTEGER);
SQLiteのデータベースファイルには「sqlite_master」という名前のテーブル情報を管理するための内部テーブルがあります。この内容を確認すれば、デーダースファイル内のオブジェクト(ここではデータベースファイルを構成する要素のこと)構成が分かります。確認方法は他のテーブルと一緒でSQL文の「SELECT」を使います。以下を入力、実行してみました。
sqlite> SELECT * FROM sqlite_master; type = table name = sample tbl_name = sample rootpage = 2 sql = CREATE TABLE sample(id INTEGER,name TEXT,age INTEGER)
4つの要素が表示されました。1つずつ見ていきましょう。
- type
オブジェクトのタイプです。「table」以外に「index」、「view」、「trigger」があります。これらについては別の機会に説明します。
- name
オブジェクトの名前です。オブジェクトのタイプが「table」の場合は「tbl_name」と同じになります。
- tbl_name
オブジェクトが所属するテーブルの名前です。
- rootpage
インデックスで使用するページ番号です。
オブジェクトが生成される際に使用されたSQL文です。
列情報の確認
テーブルの各列の情報を取得するには以下のSQL文を使います。
sqlite> PRAGMA table_info(テーブル名);
「PRAGMA」は、SQLite固有の拡張機能です。実行してみましょう。
sqlite> PRAGMA table_info(sample); cid = 0 name = id type = INTEGER notnull = 0 dflt_value = pk = 0 cid = 1 name = name type = TEXT notnull = 0 dflt_value = pk = 0 cid = 2 name = age type = INTEGER notnull = 0 dflt_value = pk = 0
各列ごとに6つの要素が表示されました。1つずつ見ていきましょう。
- cid
列の番号です
- name
列の名前です
- type
列に設定されたデータ型です
- notnull
null(データがない状態)が許可されるかどうかを表します。許可されていれば「0」、許可されていなければ「1」となります。 許可されない状態のことを「not null制約」がかかっていると言ったりしますが、詳細は別の機会に説明します。
- dflt_value
デフォルト値を設定します。指定されていない場合はnullとなります。デフォルト値が設定されている状態のことを「デフォルト制約」がかかっていると言ったりしますが、詳細は別の機会に説明します。
- pk
主キーとして設定されているかどうかを表します。設定されていれば「1」、設定されていなければ「0」となります。主キーについては別の機会に説明します。
レコード数の確認
レコード数の確認については、以下のSQLで可能です。
SELECT COUNT(*) FROM テーブル名;
レコードを追加して、レコード数を確認してみましょう。
sqlite> SELECT COUNT(*) FROM sample; COUNT(*) = 0 sqlite> INSERT INTO sample(id,name,age) ...> VALUES(1,"MURAYAMA",22), ...> (2,"OOSAKI",29), ...> (3,"TANAKA",26); sqlite> SELECT COUNT(*) FROM sample; COUNT(*) = 3
最初はレコード数が0、レコードを追加した後はレコード数が3と確認できました。
次回はテーブル操作
いかがでしょうか。これでテーブルの状態を確認できるようになりました。次回はこれを踏まえてテーブル操作の方法をご紹介します。お楽しみに!!