29
データベース技術 7回(2015.11.101

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

Embed Size (px)

Citation preview

Page 1: データベース技術 7(Database 7)

データベース技術第7回(2015.11.10)

1

Page 2: データベース技術 7(Database 7)

データベースを構築する•DBMS(Database Management System)を使う

- SQLによるアクセス機能• SQLにより条件指定、ソートなど高度な検索が可能

-高速な検索機能• インデックスを持つことにより、高速に検索可能

-排他制御機能• 行単位、ファイル単位のロック機能により、排他制御が可能

-トランザクション管理機能• トランザクション単位の更新や復帰が可能

-ログ管理機能• アクセスログにより復旧が可能

2

Page 3: データベース技術 7(Database 7)

SQLの機能•SQL:リレーショナルデータベースを操作するためのデータベース言語-データ定義言語DDL(Data Definition Language)

• 表を作成する、変更する、削除する

-データ操作言語DML(Data Management Language)• データを入力する、抽出する、削除する、変更する

-データ制御言語DCL(Data Control Language)• ユーザのアクセスなどを管理する

3

Page 4: データベース技術 7(Database 7)

SQLiteの基礎知識(1)•コマンドラインツールを使って操作する

•起動方法:SQLiteアイコンをクリック

※大学の環境とは見た目が違います

4

Page 5: データベース技術 7(Database 7)

SQLiteの基礎知識(2)•SQL文は最後に「;」が入力されるまでがひとつのSQL文として扱われる

•「;」の後にEnterキーを押すことで実行される

•長いSQL文の場合は、途中でEnterキーを押してもOK(「;」が入力されるまでが1文)

5

Page 6: データベース技術 7(Database 7)

SQLiteの基礎知識(3)•識別子

-テーブル名、カラム名、データベース名

•SQLiteのキーワード- Database、Table、Create、Selectなどなど

•SQLiteのキーワードは識別子に使用しない

6

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

SQLiteを操作してみよう•SQLiteを起動する

•接続中のデータベースを確認する

•接続していたデータベースから切断する

•データベースを作成する

•テーブルを作成する←今日はこの続き

7

Page 8: データベース技術 7(Database 7)

データベースに接続する•コマンドプロンプトを起動する

•データベースを指定してSQLiteを起動する-コマンドプロンプト上で下記のように入力する

• sqlite3 データベース名• 例:”C:¥Program Files¥sqlite3¥sqlite3.exe” U:¥shop.sqlite3

-「.database」と入力して目的のデータベースに接続できた ことを確認してみましょう

-先週の復習として「.tables」「.schema」コマンドも実行 してみましょう

8

Page 9: データベース技術 7(Database 7)

テーブルの確認•テーブル一覧を表示する

-「.tables」コマンドを実行

•テーブルの構造を確認-「.schema」コマンドを実行

-テーブル作成時のCreate文が表示される9

Page 10: データベース技術 7(Database 7)

SQLiteのデータ型•SQLiteでは、カラムのデータ型指定は必須ではない

•SQLiteで指定できるデータ型型 説明

TEXT テキストINTEGER 符号付整数

REAL 浮動小数点数NONE 入力データをそのまま格納

NUMERIC 上記以外

10

Page 11: データベース技術 7(Database 7)

テーブルの作成(先週の復習)•基本構文

- CREATE TABLE テーブル名(カラム名1, カラム名2, ...);

•カラムにデータ型を指定してテーブルを作成- CREATE TABLE テーブル名(カラム名1 データ型, カラム名2 データ型, ...);

•テーブルとカラム-名前には任意の名前を指定できる

-テーブルには少なくとも1つのカラムが必要

11

Page 12: データベース技術 7(Database 7)

テーブル名の変更•ALTER TABLE文を使う

- ALTER TABLE テーブル名 RENAME TO 新テーブル名;

•練習:下記を実行してみましょう- create table person(id, name);- alter table person rename to myfriend;

.tablesでテーブル名が変更されたことを確認

12

Page 13: データベース技術 7(Database 7)

カラムの追加(1)•ALTER TABLE文を使う

- ALTER TABLE テーブル名 ADD COLUMN カラム名[ データ型];

-追加したカラムはテーブルの最後に追加される

-追加するカラムは次の条件を満たす必要がある• PRIMARY KEY や UNIQUE 制約は設定できない• DEFAULT 制約を設定する時は、CURRENT_TIME/CURRENT_DATE/

CURRENT_TIMESTAMPは指定できない• NOT NULL 制約を設定する時は、NULL以外のデフォルト値の設定が 必要

13

Page 14: データベース技術 7(Database 7)

カラムの追加(2)•練習:下記を実行してみましょう

- .schema myfriend- alter table myfriend add column address text;- .schema myfriend

.schema myfriendでカラムが追加されたことを確認

14

Page 15: データベース技術 7(Database 7)

テーブルの削除•DROP TABLE文を使う

- DROP TABLE テーブル名;

•練習:下記を実行してみましょう- .tables- drop table myfriend;- .tables

.tablesでテーブルが削除されたことを確認

15

Page 16: データベース技術 7(Database 7)

制約の指定•PRIMARY KEY制約

- INTEGER PRIMARY KEYの設定

- AUTOINCREMENTの設定

•NOT NULL制約

•UNIQUE制約

•DEFAULT制約

•CHECK制約16

Page 17: データベース技術 7(Database 7)

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

Page 18: データベース技術 7(Database 7)

PRIMARY KEY制約(2)•実行例

primary keyに指定したカラム「id」は重複が許されないため、既に入力済みの1を入力しようとするとエラーが表示される。

18

Page 19: データベース技術 7(Database 7)

INTEGER PRIMARY KEYの設定•カラムに自動的に連番で数値が格納される

-自動的に格納される値は、対象のカラムに格納されている最大の値に1を加えた値となる

•カラムのデータ型は「INT」が含まれる場合、全てINTEGER型となる

•連番が自動的に割り振られるのは「INTEGER PRIMARY KEY」と記述した場合のみ

19

Page 20: データベース技術 7(Database 7)

INTEGER PRIMARY KEY実行例• idカラムに自動で連番が格納されている

テーブルを作成

データを格納

データを表示

20

Page 21: データベース技術 7(Database 7)

INTEGER PRIMARY KEYの値•データの入力時に値を省略せずに入力も可能

-例:insert into myfriend values(10, ‘Inoue’);     ※この次に「id」の値を省略してinsertすると、「id」は「11」となる

•値の再割り当て-自動的に数値が設定される際、以前に格納されていた値(データは削除済)と同じ値が割り当てられることがある

-一度使われた値が二度使われないためには、「AUTOINCREMENT」を使用する

21

Page 22: データベース技術 7(Database 7)

AUTOINCREMENTの設定•カラムに自動的に連番で数値が格納される

-自動的に格納される値は、対象のカラムに今までに格納されたことのある最大の値に1が加えられた値となる

•AUTOINCREMETNを設定する書式- CREATE TABLE テーブル名(カラム名 INTEGER PRIMARY

KEY AUTOINCREMENT, ...);

22

Page 23: データベース技術 7(Database 7)

NOT NULL制約•カラムのNULL値を禁止したい場合に使う

•書式- CREATE TABLE テーブル名(カラム名 NOT NULL, ...);

•実行例

「name」にnull値を入力→エラー

「address」にnull値を入力→OK

「name」の値を省略→エラー

23

Page 24: データベース技術 7(Database 7)

UNIQUE制約•カラムの値の重複を禁止したい場合に使う

•書式- CREATE TABLE テーブル名(カラム名 UNIQUE, ...);

•UNIQUE制約が設定されていてもNULL値だけは重複が可能- NULL値を避けたい場合は、同時にNOT NULLを設定

24

Page 25: データベース技術 7(Database 7)

複数カラムのUNIQUE制約•書式

- CREATE TABLE テーブル名(カラム名1, カラム名2, ... , UNIQUE(カラム名1, カラム名2, ...));

•それぞれのカラムは重複しても良いが、指定した複数カラムの組み合わせの重複が禁止される

•実行例

25

Page 26: データベース技術 7(Database 7)

DEFAULT制約•値を省略した際にデフォルトで格納される値を指定したい場合に使う

•書式- CREATE TABLE テーブル名(カラム名 DEFAULT 値, ...);-値にはNULL、数値、文字列が指定できる

•例:「name」と「price」にデフォルト値を指定

- create table product(id integer, name text default 'no name', price integer default 0);

26

Page 27: データベース技術 7(Database 7)

CHECK制約•カラムに格納する値が条件に一致しているか 判定したい場合に使う

•書式- CREATE TABLE テーブル名(カラム名 CHECK(条件式), ...);

•例:カラム「old」は負の値はNGとする- create table user(id integer, name text, old integer

check(old > 0));

27

Page 28: データベース技術 7(Database 7)

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

Page 29: データベース技術 7(Database 7)

参考文献•SQLite入門 http://www.dbonline.jp/sqlite/

29