データベース技術
第7回(2015.11.10)
1
データベースを構築する
•DBMS(Database Management System)を使う
- SQLによるアクセス機能
• SQLにより条件指定、ソートなど高度な検索が可能
- 高速な検索機能
• インデックスを持つことにより、高速に検索可能
- 排他制御機能
• 行単位、ファイル単位のロック機能により、排他制御が可能
- トランザクション管理機能
• トランザクション単位の更新や復帰が可能
- ログ管理機能
• アクセスログにより復旧が可能
2
SQLの機能
•SQL:リレーショナルデータベースを操作する
ためのデータベース言語
- データ定義言語DDL(Data Definition Language)
• 表を作成する、変更する、削除する
- データ操作言語DML(Data Management Language)
• データを入力する、抽出する、削除する、変更する
- データ制御言語DCL(Data Control Language)
• ユーザのアクセスなどを管理する
3
SQLiteの基礎知識(1)
•コマンドラインツールを使って操作する
•起動方法:SQLiteアイコンをクリック
※大学の環境とは
見た目が違います
4
SQLiteの基礎知識(2)
•SQL文は最後に「;」が入力されるまでがひとつ
のSQL文として扱われる
•「;」の後にEnterキーを押すことで実行される
•長いSQL文の場合は、途中でEnterキーを押して
もOK(「;」が入力されるまでが1文)
5
SQLiteの基礎知識(3)
•識別子
- テーブル名、カラム名、データベース名
•SQLiteのキーワード
- Database、Table、Create、Selectなどなど
•SQLiteのキーワードは識別子に使用しない
6
SQLiteを操作してみよう
•SQLiteを起動する
•接続中のデータベースを確認する
•接続していたデータベースから切断する
•データベースを作成する
•テーブルを作成する←今日はこの続き
7
データベースに接続する
•コマンドプロンプトを起動する
•データベースを指定してSQLiteを起動する
- コマンドプロンプト上で下記のように入力する
• sqlite3 データベース名
• 例:”C:¥Program Files¥sqlite3¥sqlite3.exe” U:¥shop.sqlite3
- 「.database」と入力して目的のデータベースに接続できた 
ことを確認してみましょう
- 先週の復習として「.tables」「.schema」コマンドも実行 
してみましょう
8
テーブルの確認
•テーブル一覧を表示する
- 「.tables」コマンドを実行
•テーブルの構造を確認
- 「.schema」コマンドを実行
- テーブル作成時のCreate文が表示される
9
SQLiteのデータ型
•SQLiteでは、カラムのデータ型指定は必須では
ない
•SQLiteで指定できるデータ型
型 説明
TEXT テキスト
INTEGER 符号付整数
REAL 浮動小数点数
NONE 入力データをそのまま格納
NUMERIC 上記以外
10
テーブルの作成(先週の復習)
•基本構文
- CREATE TABLE テーブル名(カラム名1, カラム名2, ...);
•カラムにデータ型を指定してテーブルを作成
- CREATE TABLE テーブル名(カラム名1 データ型, カラ
ム名2 データ型, ...);
•テーブルとカラム
- 名前には任意の名前を指定できる
- テーブルには少なくとも1つのカラムが必要
11
テーブル名の変更
•ALTER TABLE文を使う
- ALTER TABLE テーブル名 RENAME TO 新テーブル名;
•練習:下記を実行してみましょう
- create table person(id, name);
- alter table person rename to myfriend;
.tablesでテーブル名が
変更されたことを確認
12
カラムの追加(1)
•ALTER TABLE文を使う
- ALTER TABLE テーブル名 ADD COLUMN カラム名[ デ
ータ型];
- 追加したカラムはテーブルの最後に追加される
- 追加するカラムは次の条件を満たす必要がある
• PRIMARY KEY や UNIQUE 制約は設定できない
• DEFAULT 制約を設定する時は、CURRENT_TIME/CURRENT_DATE/
CURRENT_TIMESTAMPは指定できない
• NOT NULL 制約を設定する時は、NULL以外のデフォルト値の設定が 
必要
13
カラムの追加(2)
•練習:下記を実行してみましょう
- .schema myfriend
- alter table myfriend add column address text;
- .schema myfriend
.schema myfriendで
カラムが追加されたことを確認
14
テーブルの削除
•DROP TABLE文を使う
- DROP TABLE テーブル名;
•練習:下記を実行してみましょう
- .tables
- drop table myfriend;
- .tables
.tablesでテーブルが削除
されたことを確認
15
制約の指定
•PRIMARY KEY制約
- INTEGER PRIMARY KEYの設定
- AUTOINCREMENTの設定
•NOT NULL制約
•UNIQUE制約
•DEFAULT制約
•CHECK制約
16
PRIMARY KEY制約(1)
•カラムが主キーであることを示す
- 主キーが1つの場合:              
CREATE TABLE テーブル名(カラム名 PRIMARY KEY, ・・・);
- 複数で主キーの場合:              
CREATE TABLE テーブル名(カラム名1, カラム名2, ・・・, 
PRIMARY KEY(カラム名1, カラム名2, ・・・) );
•例:
- create table users(id int primary key, name text);
17
PRIMARY KEY制約(2)
•実行例
primary keyに指定したカラム「id」は重複が許されないため、
既に入力済みの1を入力しようとするとエラーが表示される。
18
INTEGER PRIMARY KEYの設定
•カラムに自動的に連番で数値が格納される
- 自動的に格納される値は、対象のカラムに格納されて
いる最大の値に1を加えた値となる
• カラムのデータ型は「INT」が含まれる場合、全て
INTEGER型となる
• 連番が自動的に割り振られるのは「INTEGER
PRIMARY KEY」と記述した場合のみ
19
INTEGER PRIMARY KEY実行例
•idカラムに自動で連番が格納されている
テーブルを作成
データを格納
データを表示
20
INTEGER PRIMARY KEYの値
•データの入力時に値を省略せずに入力も可能
- 例:insert into myfriend values(10, ‘Inoue’);     
※この次に「id」の値を省略してinsertすると、「id」は「11」となる
•値の再割り当て
- 自動的に数値が設定される際、以前に格納されていた
値(データは削除済)と同じ値が割り当てられること
がある
- 一度使われた値が二度使われないためには、
「AUTOINCREMENT」を使用する
21
AUTOINCREMENTの設定
•カラムに自動的に連番で数値が格納される
- 自動的に格納される値は、対象のカラムに今までに格
納されたことのある最大の値に1が加えられた値となる
•AUTOINCREMETNを設定する書式
- CREATE TABLE テーブル名(カラム名 INTEGER PRIMARY
KEY AUTOINCREMENT, ...);
22
NOT NULL制約
•カラムのNULL値を禁止したい場合に使う
•書式
- CREATE TABLE テーブル名(カラム名 NOT NULL, ...);
•実行例
「name」にnull値を入力→エラー
「address」にnull値を入力→OK
「name」の値を省略→エラー
23
UNIQUE制約
•カラムの値の重複を禁止したい場合に使う
•書式
- CREATE TABLE テーブル名(カラム名 UNIQUE, ...);
•UNIQUE制約が設定されていてもNULL値だけは
重複が可能
- NULL値を避けたい場合は、同時にNOT NULLを設定
24
複数カラムのUNIQUE制約
•書式
- CREATE TABLE テーブル名(カラム名1, カラム名2, ... , 
UNIQUE(カラム名1, カラム名2, ...));
•それぞれのカラムは重複しても良いが、指定した
複数カラムの組み合わせの重複が禁止される
•実行例
25
DEFAULT制約
•値を省略した際にデフォルトで格納される値を
指定したい場合に使う
•書式
- CREATE TABLE テーブル名(カラム名 DEFAULT 値, ...);
- 値にはNULL、数値、文字列が指定できる
•例:「name」と「price」にデフォルト値を指定
- create table product(id integer, name text default 'no
name', price integer default 0);
26
CHECK制約
•カラムに格納する値が条件に一致しているか 
判定したい場合に使う
•書式
- CREATE TABLE テーブル名(カラム名 CHECK(条件式), ...);
•例:カラム「old」は負の値はNGとする
- create table user(id integer, name text, old integer
check(old > 0));
27
Work:小テストテーブルの作成
•下記の2つのテーブルを作成してみましょう
「sales」表
「sales_detail」表
フィールド名 データ型 制約
id INT PRIMARY KEY, NOT NULL, AUTO_INCREMENT
date TEXT NOT NULL
country INT
フィールド名 データ型 制約
report_id INT PRIMARY KEY, NOT NULL
item_id INT PRIMARY KEY, NOT NULL
count INT NOT NULL
28
参考文献
•SQLite入門 http://www.dbonline.jp/sqlite/
29

データベース技術 7(Database 7)