macOS x SQLiteでデータベース
開発環境
| 項目 | バージョン |
|---|---|
| macOS | 14.2 |
| sqlite3 | 3.43.2 |
macOSにはsqlite3がデフォルトでインストールされているので、それを使ってSQLiteの基本的な操作を行なっていく。
基本操作
| 項目 | 実行コマンド |
|---|---|
| ログイン | $ sqlite3 |
| ログアウト | sqlite> .exit または control + d |
ここで紹介するSQLiteのドットコマンド一覧
| 項目 | ドットコマンド | 備考 |
|---|---|---|
| データベースのパス表示 | .database | |
| テーブル名の確認 | .table | |
| プロンプトの終了 | .exit | |
| テーブルの定義を確認 | .schema テーブル名 | |
| カラム名を表示 | .headers on | |
| カラムを整形させて表示 | .mode column | 他にも、csv/html/insertなど |
SQLiteで使えるデータ型
| データ型 | 意味 |
|---|---|
| NULL | NULL値 |
| INTEGER | 符号付整数(8byte) |
| REAL | 浮動小数点数(8byte) |
| TEXT | テキスト |
| BLOB | Binary Large OBject |
bool型は使えないので、integerを使って 0(偽) や
1(真) で表現する必要がある。
実践編
データベースの作成
$ sqlite3 hello.db
次のテーブルを作成することで、カレントディレクトリに
hello.db ファイルが生成される。
テーブルの作成
新規テーブルを作成:
sqlite> CREATE TABLE user(id integer primary key autoincrement, name text, age integer);
作成したテーブル名を確認:
sqlite> .table
user
作成した user テーブルの定義を確認:
sqlite> .schema user
CREATE TABLE user(id integer primary key, name text, age integer);
レコードの挿入
sqlite> INSERT INTO user (name, age) VALUES ('taro', 24);
sqlite> INSERT INTO user (name, age) VALUES ('jiro', 21);
sqlite> INSERT INTO user (name, age) VALUES ('saburo', 16);
挿入したレコードの確認:
sqlite> SELECT * FROM user;
1|taro|24
2|jiro|21
3|saburo|16
ヘッダーのカラム名を表示しつつ、整形するには次のドットコマンドを実行後、クエリを発行:
sqlite> .header on
sqlite> .mode column
sqlite> select * from user;
id name age
-- ------ ---
1 taro 24
2 jiro 21
3 saburo 16
SQLiteのautoincrementあり・なしの違い
privary keyを設定していればautoincrementの指定がなくても連番で値を生成してくれる。しかしautoincrementがないと例えばid=3を削除した後に再びレコードを挿入すると、またid=3が格納されてしまう。一方でautoincrementを指定していれば、id=4を格納してくれるため、削除されたid=3は永久欠番となり、他テーブルとのリレーションなどでトラブルを避けられる。
レコードの更新
UPDATE user SET age=25 WHERE id=1;
テーブルを削除する
sqlite> DROP TABLE user;