Open3
SQLite
メリット
- 動作が軽い。
- 著作権がない。
- ファイルが1つだけなので、バックアップや復元が簡単。
- サーバ側でデータベースを用意する必要がない。
デメリット
- パスワードが存在しない。
- ファイル形式であり、ユーザー管理の概念がないため、SQLite自身には、セキュリティ機能はない
- サーバーのドキュメントルート以下に置く場合は、htaccessの設定が必須
- 複数の同時書き込みができない。
- 頻繁に不特定多数がデータベースに書き込むような処理は苦手
- カラム変更が手間
- https://sfnovicenotes.blogspot.com/2021/01/sqlite3.html
- テーブルスキーマを変更したい場合は、新しいテーブルを作成してそちらにデータを移す必要がある
特徴
- テーブルを定義する時にカラム毎にデータ型を指定することは必須ではない
- カラムに指定できるデータ型は「TEXT」「NUMERIC」「INTEGER」「REAL」「NONE」の5つ
- varchar(255)等も指定できるが制限はかからない(他のDBとの互換性を合わせる為に行う)
Dockerファイルは下記です。
sqlite-libs、sqlite-devをインストールします。
全体:
FROM php:7.4-fpm-alpine
RUN apk add -U --no-cache \
bash \
git \
curl-dev \
libxml2-dev \
postgresql-dev \
libpng-dev \
libjpeg-turbo-dev \
zip \
libzip-dev \
unzip \
gmp-dev \
oniguruma-dev \
sqlite-libs \
sqlite-dev
RUN docker-php-ext-install pdo_mysql mysqli mbstring
RUN curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer
WORKDIR /usr/share/nginx/html/
DBファイル作成
$ sqlite3 ex1.db
テーブル生成
CREATE TABLE blog(
id INTEGER PRIMARY KEY AUTOINCREMENT,
title VARCHAR(255) NOT NULL,
body TEXT NOT NULL,
created_at TIMESTAMP DEFAULT (DATETIME('now','localtime')),
updated_at TIMESTAMP DEFAULT (DATETIME('now','localtime'))
);
CREATE TRIGGER trigger_updated_at AFTER UPDATE ON blog
BEGIN
UPDATE blog SET updated_at = DATETIME('now', 'localtime') WHERE rowid == NEW.rowid;
END;
INSERT文
INSERT INTO blog(title,body) VALUES ( "test", "testbodytestbody");
コマンドラインツールの終了
$ .exit