Open3

SQLite

bz0bz0

https://www.1-firststep.com/archives/7411
http://www.cpa-lab.com/tech/046

メリット

  • 動作が軽い。
  • 著作権がない。
  • ファイルが1つだけなので、バックアップや復元が簡単。
  • サーバ側でデータベースを用意する必要がない。

デメリット

  • パスワードが存在しない。
    • ファイル形式であり、ユーザー管理の概念がないため、SQLite自身には、セキュリティ機能はない
    • サーバーのドキュメントルート以下に置く場合は、htaccessの設定が必須
  • 複数の同時書き込みができない。
    • 頻繁に不特定多数がデータベースに書き込むような処理は苦手
  • カラム変更が手間

特徴

  • テーブルを定義する時にカラム毎にデータ型を指定することは必須ではない
  • カラムに指定できるデータ型は「TEXT」「NUMERIC」「INTEGER」「REAL」「NONE」の5つ
  • varchar(255)等も指定できるが制限はかからない(他のDBとの互換性を合わせる為に行う)
bz0bz0

Dockerファイルは下記です。
sqlite-libs、sqlite-devをインストールします。

全体:
https://github.com/bz0/phpdemo/tree/develop/docker

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/
bz0bz0

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;

https://qiita.com/kerupani129/items/0372ea29d9375e55bb36
https://qiita.com/naga3/items/1b4b5949f2e030f73ffc

INSERT文

INSERT INTO blog(title,body) VALUES ( "test", "testbodytestbody");

コマンドラインツールの終了

$ .exit