https://www.udemy.com/course/java-the-complete-java-developer-course/learn/lecture/6060828#questions
老師在本課放了個檔案是一個資料庫,下載之後用 sqlite3 開啟
輸入:sqlite3 music.db
輸出:
SQLite version 3.37.2 2022–01–06 13:25:41
Enter “.help” for usage hints
輸入:.schema
輸出:
CREATE TABLE songs (_id INTEGER PRIMARY KEY, track INTEGER, title TEXT NOT NULL, album INTEGER);
CREATE TABLE albums (_id INTEGER PRIMARY KEY, name TEXT NOT NULL, artist INTEGER);
CREATE TABLE artists (_id INTEGER PRIMARY KEY, name TEXT NOT NULL);
Tim 老師說,第一欄有加下底線,是因為有些 Java classes 跟資料庫連結的時候需要,他認為這樣做是一個好習慣
小挑戰:查詢 album 367 的 name
輸入:SELECT name from albums where _id=367;
輸出:
Permanent Vacation
輸入:.headers on
輸出:無(把欄位名稱顯示出來)
輸入: SELECT name from albums where _id=367;
輸出:
name
Permanent Vacation
剛剛沒有 name 現在有了
輸入:.backup music-backup1
輸出:無(接下來要更新內容了,先備份)
輸入:.schema
輸出:
CREATE TABLE songs (_id INTEGER PRIMARY KEY, track INTEGER, title TEXT NOT NULL, album INTEGER);
CREATE TABLE albums (_id INTEGER PRIMARY KEY, name TEXT NOT NULL, artist INTEGER);
CREATE TABLE artists (_id INTEGER PRIMARY KEY, name TEXT NOT NULL);
Tim 老師補充:
PRIMARY KEY 就是作為 index,可以大幅提昇查詢跟 join 的速度(join 就是把表合併)
ralational database is that ordering of the row is undefined 非常像是 Java 的 Map 跟 Set
資料庫的理論就是從 Set 的理論上建立出來的
一張表可以有很多 key 但 PRIMARY KEY 只能有一個,通常就是作為 ID
若那張表沒有ID欄位也可以選其他欄位來使用 PRIMARY KEY,最重要的就是必須是唯一
輸入:INSERT INTO artists VALUES(201,"Beyonce");
輸出:
Error: stepping, UNIQUE constraint failed: artists._id (19)
因為 201 已經有了且只能有一個,所以就報錯
輸入:INSERT INTO artists (name) VALUES("Beyonce");
輸出:無
當欄位設定是 NOT NULL 那新增資料的時候就一定要有值
輸入:SELECT * from artists;
輸出:
1|Mahogany Rush
2|Elf
3|Mehitabel
(略刪)
201|Chemical Brothers
202|Beyonce
PRIMARY KEY 也是一定會有值,因為會影響到排序
但沒輸入的話,系統會自動幫你新增
輸入:INSERT INTO artists (_id) VALUES(203);
輸出:
Error: stepping, NOT NULL constraint failed: artists.name (19)
名子是 NOT NULL ,沒填就直接報錯