Upload
yuka-obu
View
219
Download
2
Embed Size (px)
Citation preview
データベース技術第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 NULLcountry INT
フィールド名 データ型 制約report_id INT PRIMARY KEY, NOT NULLitem_id INT PRIMARY KEY, NOT NULLcount INT NOT NULL
28
参考文献•SQLite入門 http://www.dbonline.jp/sqlite/
29