一汰规、幾種常見(jiàn)數(shù)據(jù)庫(kù)介紹
-
SQL
:Structured Query Language
- 用于機(jī)構(gòu)化的查詢和操作數(shù)據(jù)
- 適用于關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)
- 隱藏了如何訪問(wèn)某一條數(shù)據(jù)的細(xì)節(jié)
- 有一套標(biāo)準(zhǔn)/協(xié)議來(lái)描述SQL語(yǔ)言
- 后端必會(huì)曙旭,后端生涯的基石
-
NoSQL
:- 并不是 SQL 的反面垒在,而是各有不同
- 為了解決特定環(huán)境下的問(wèn)題出現(xiàn)
- eg: MongoDB redis memocache
-
關(guān)系型數(shù)據(jù)庫(kù)
- 預(yù)先定義的數(shù)據(jù)結(jié)構(gòu)
- 易于關(guān)聯(lián)的數(shù)據(jù)
- 高效的跨表查詢
- Oracle/mySQL/postgreSQL
-
PostgreSQL
- 完全開(kāi)源免費(fèi)
- 基于分布式數(shù)據(jù)庫(kù)設(shè)計(jì)
- 良好的社區(qū)環(huán)境
- 充分驗(yàn)證
二切黔、PostgreSQL 安裝和使用
1绽诚、安裝 brew
2件甥、安裝 postgresql
-
brew install postgresql
: 安裝包 mkdir demo & cd demo
-
initdb ./
:初始化數(shù)據(jù)庫(kù) -
pg_ctl -D ./ -l ./pg.log start
:?jiǎn)?dòng)數(shù)據(jù)庫(kù)藏研,其中./pg.log
可自定義,為日志輸出位置咐汞。如果日志已經(jīng)創(chuàng)建盖呼,可通過(guò)pg_ctl -D ./ start
啟動(dòng)數(shù)據(jù)庫(kù),啟動(dòng)完成后化撕,再連接數(shù)據(jù)庫(kù)psql pg_playground
-
pg_ctl --help
:可通過(guò)這個(gè)指令查看pg_ctl
有哪些指令 -
createuser -s username
: 創(chuàng)建一個(gè)無(wú)密碼用戶 -
createdb --owner=username pg_palyground
:創(chuàng)建數(shù)據(jù)庫(kù)pg_playground
并關(guān)聯(lián)所有者 -
psql pg_playground
: 連接數(shù)據(jù)庫(kù) -
SELECT version();
查詢數(shù)據(jù)庫(kù)版本 -
\q
:關(guān)閉連接 - 創(chuàng)建數(shù)據(jù)庫(kù):
// 連接數(shù)據(jù)庫(kù)后几晤,即可創(chuàng)建數(shù)據(jù)庫(kù)
CREATE TABLE test_table_1 ( // 敲到左括號(hào),可回車
string_test_1 varchar(32), // 不同字段可用 `,` 分隔
number_test_2 int // 字段名 + 數(shù)據(jù)類型
); // 最后一行為 `);`
關(guān)于數(shù)字類型,char
和 varchar
的區(qū)別在于第二個(gè)為動(dòng)態(tài)字符植阴,括號(hào)內(nèi)數(shù)字表示最大長(zhǎng)度蟹瘾,如果為 char
圾浅,則表示只能使用長(zhǎng)度為 32 的字符。
3憾朴、常用數(shù)據(jù)類型有:
char
varchar
-
SMALLINT/INT/BIGINT/DECIMAL
:分別對(duì)應(yīng) 2 / 4 字節(jié)整型數(shù)字 TEXT
-
NUMERIC
:浮點(diǎn)數(shù) -
DOUBLE PRECISION
:雙精度浮點(diǎn)數(shù) BYTEA
DATE
INTERVAL
BOOLEAN
-
ENUM
: 枚舉類型狸捕,舉例說(shuō)明:
CREATE TYPE mode AS ENUM('mode_1', 'mode_2', 'mode_3');
CREATE TABLE test_table_3 (
mode_test_3 mode
);
此時(shí),表中 mode_test_3 只能取 mode 中的某一個(gè)值
4伊脓、SQL 常用語(yǔ)句:
-
SELECT * FROM test_table_1;
:在終端輸出表test_table_1
的表結(jié)構(gòu)
5、操作表
-
ALTER TABLE test_table_3 ADD COLUMN new_uuid UUID;
: 為表新增一列魁衙,可通過(guò)SELECT * FROM test_table_3
查詢表的前后差異 -
ALTER TABLE test_table_1 ALTER COLUMN string_test_1 TYPE char(32);
:將 test_table_1 中 string_test_1 的類型改為 char -
DROP TABLE test_table_3;
:刪除表 - 建表時(shí)添加主鍵約束:
CREATE TABLE test_table_4 (
id INT PRIMARY KEY
);
主鍵約束的意思是报腔,在向表中插入數(shù)據(jù)的時(shí)候,要保證此字段既是全表唯一且不能為空剖淀。
三纯蛾、PostgreSQL 對(duì)表進(jìn)行增刪改查
- 命令查詢:在啟動(dòng) postgreSQL 并連接數(shù)據(jù)庫(kù)后,可輸入
\h
查看對(duì)表進(jìn)行操作的一些命令 -
\d
: 查看當(dāng)前數(shù)據(jù)庫(kù)下有哪些表 -
\d test_table_1
:查詢表的詳細(xì)信息
eg: 新建一張表纵隔,包含 name 和 age, name 不為空翻诉,且長(zhǎng)度大于4小于16,age 為整型捌刮,可不傳碰煌,默認(rèn)值為 18:
CREATE TABLE users(
name TEXT NOT NULL CHECK(CHAR_LENGTH(name) > 4 && CHAR_LENGTH(name) < 15),
age INT CHECK(age >= 0) DEFAULT 18
);
創(chuàng)建完成后,可通過(guò) \d users
查看表的信息绅作。
- 插入數(shù)據(jù):
INSERT INTO users (name, age) VALUES ('your name', 20);
芦圾。可通過(guò)SELECT * FROM users;
查詢表內(nèi)數(shù)據(jù)俄认。此處*
如果代表返回的表內(nèi)字段个少,users
表可指定name
或者age
,select 多個(gè)可使用,
分隔眯杏。 - 根據(jù)條件查詢表:
SELECT * FROM users WHERE age = 20;
- 刪除表中的數(shù)據(jù):
DELECT FROM users夜焦;
,此指令會(huì)刪除表中所有的數(shù)據(jù)岂贩。慎用茫经。 - 根據(jù)條件刪除數(shù)據(jù):
DELETE FROM users WHERE age = 18;
。刪除 age = 18 的所有數(shù)據(jù)萎津。 - 更新數(shù)據(jù)信息:
UPDATE users SET age = 88 WHERE name = 'summer';