打開 cmd
輸入:sqlite3 test.db
輸出:
SQLite version 3.37.2 2022–01–06 13:25:41
Enter “.help” for usage hints.
創了一個 test 的資料庫
輸入:.headers on
輸出:無(讓 col 的欄位出現名稱)
輸入: create table contacts(name text, phone integer, email text);
輸出:無(創了一張叫做聯絡人的表 有三個欄位)記得尾巴要加 ;
沒出現任何提示通常就是成功,有問題才會出現提示
輸入:insert into contacts(name,phone,email)values('Tim','334678','Tim@mail.com');
輸出:無(對著剛創的聯絡人的表,插入了一筆數據)
輸入:SELECT * FROM contacts;
輸出:
name|phone|email
Tim|334678|Tim@mail.com
查詢這張表的所有資料
剛剛輸入的 .headers on 就是第一行的提示
* 就是所有欄位
Tim 老師說大小寫都沒差,但一般大家習慣把關鍵字用大寫,所以後面都會用大寫
輸入: SELECT email FROM contacts;
輸出:
Tim@mail.com
只顯示 email 欄位的資料
輸入:INSERT INTO contacts VALUES("Brian",223456,"brian@mail.com");
輸出:無(新增一筆資料,因為提供了所有的欄位,這是簡略的寫法)
輸入:INSERT INTO contacts VALUES("Tim",1122345);
輸出:
Error: in prepare, table contacts has 3 columns but 2 values were supplied (1)
有三個欄位,但只提供兩個,前面也沒指定是給哪兩個欄位,所以就報錯
輸入:INSERT INTO contacts(name,phone)VALUES("Steve",112234);
輸出:無(這次也是兩個但有指定欄位)
輸入: SELECT * FROM contacts;
輸出:
name|phone|email
Tim|334678|Tim@mail.com
Brian|223456|brian@mail.com
Steve|112234|
同學 Zachary 補充:
Here is how to make table look more user friendly than this:
_id|name|artist
124|Our Time in Eden|11
287|Over-nite Sensation|140
And look more like this:
_id name artist
---------- ---------- ----------
54 18 Singles 193
281 1984 84
Type these commands, the first shows current options enabled, the second changes to column mode, and the third specifies the column width.
.show.headers on.mode column.width 6 20 6
And there you are, a very readable database render!
輸入:INSERT INTO contacts VALUES("Avril","+61 (0)87654321", "avril@email.com");
輸出:無
Tim 老師補充說:電話的欄位應該用 String 比較好,但他也說在 sqlite 裡面其實沒有數據類型,那只是給我們自己的提示而已
輸入:SELECT * FROM contacts;
輸出:
name|phone|email
Tim|334678|Tim@mail.com
Brian|223456|brian@mail.com
Steve|112234|
Avril|+61 (0)87654321|avril@email.com
當初創的時候是 create table contacts(name text, phone integer, email text);
最新這筆的 name 跟 email 都是放入 integer
還是成功了
但如果這些數據拉下來跟 Java 交互操作的話,很有可能報錯
例如以為這欄都是 integer
想要全部加總起來,但裡面卻混有 String
那程序就會崩潰
或是把 String
附到 integer
變量也是一樣
所以在 sqlite 還是要注意數據類型有沒有存到對應欄位
Tim 說其他資料庫,如果沒存對的話,有的會直接拒絕
輸入: .backup testbackup
輸出:無(等下要更新資料,先備份一下資料庫)
輸入: UPDATE contacts SET email="steve@hisemail.com";
輸出:無(更新 email)
輸入:SELECT * FROM contacts;
輸出:
name|phone|email
Tim|334678|steve@hisemail.com
Brian|223456|steve@hisemail.com
Steve|112234|steve@hisemail.com
Avril|+61 (0)87654321|steve@hisemail.com
因為沒有說要更新哪一個 mail,結果全部都更新了
所以使用 UPDATE
一定要特別小心,不然不小心把幾萬筆資料全改了又沒備份那就GG
輸入:.restore testbackup
輸出:無(好在剛剛有先備份)
輸入:SELECT * FROM contacts;
輸出:
name|phone|email
Tim|334678|Tim@mail.com
Brian|223456|brian@mail.com
Steve|112234|
Avril|+61 (0)87654321|avril@email.com
全部還原回來了
輸入:UPDATE contacts SET email="steve@hisemail.com" WHERE name = "Steve";
輸出:無(更新特定筆資料,只需要加上 WHERE)
輸入:SELECT * FROM contacts;
輸出:
name|phone|email
Tim|334678|Tim@mail.com
Brian|223456|brian@mail.com
Steve|112234|steve@hisemail.com
Avril|+61 (0)87654321|avril@email.com
之前是 Steve|112234|
原本 email 是空白的,現在補上了
輸入:SELECT * FROM contacts WHERE name="Brian";
輸出:
name|phone|email
Brian|223456|brian@mail.com
WHERE 很好用,可以搭配 SELECT 使用,查看符合要求的資料
輸入:SELECT phone,email FROM contacts WHERE name="Brian";
輸出:
phone|email
223456|brian@mail.com
加上欄位的話,也能只顯示該欄位的資料
輸入: DELETE FROM contacts WHERE phone=223456;
輸出:無
刪除電話等於 223456 的資料
刪除跟更新一樣都要很小心,不加 WHERE 的話,這張表就全刪了
輸入: SELECT * FROM contacts;
輸出:
name|phone|email
Tim|334678|Tim@mail.com
Steve|112234|steve@hisemail.com
Avril|+61 (0)87654321|avril@email.com
剛剛的 Brian|223456|brian@mail.com 這筆已經找不到了,代表被刪了
輸入:.tables
輸出:
contacts
顯示目前創建的所有資料庫
輸入:.schema
輸出:
CREATE TABLE contacts(name text, phone integer, email text);
忘記表的屬性可以回來查看
有多張表的話,記得加入名子
現在只有一張表所以不用加
輸入:.dump
輸出:
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE contacts(name text, phone integer, email text);
INSERT INTO contacts VALUES(‘Tim’,334678,’Tim@mail.com’);
INSERT INTO contacts VALUES(‘Steve’,112234,’steve@hisemail.com’);
INSERT INTO contacts VALUES(‘Avril’,’+61 (0)87654321',’avril@email.com’);
COMMIT;
這張表的一些訊息