一、架構sql
PostgreSQL是一個關係數據庫,採用c/s架構。一個PostgreSQL會話包括:數據庫
服務端進程——postgres:用於管理數據庫文件,並接受來自客戶端的數據庫鏈接, 同時代替客戶端執行數據庫操做。
客戶端json
二、命令數組
(1)建立數據庫網絡
createdb -U postgres mydb
(2)鏈接數據庫架構
psql -U postgres mydb
(3)元命令(內部命令)函數
\h 能夠查看SQL命令語法上的說明,後面不加SQL命令,會列出全部SQL命令 \? 能夠查看全部的元命令 \l 查看全部數據庫 \d 能夠查看數據庫的全部表 \c 鏈接到其餘數據庫 \q 退出psql
三、經常使用數據類型
3.1 數值類型post
名稱 | 別名 | 描述 | 取值範圍 |
smallint | int2 | 有符號位2字節整數 | -32768 到 +32767 |
integer | int, int4 | 有符號位4字節整數 | -2147483648 到 +2147483647 |
bigint | int8 | 有符號位8字節整數 | -9223372036854775808 到 +9223372036854775807 |
smallserial | serial2 | 自增加2字節整數 | 1 到 +32767 |
serial | searial4 | 自增加4字節整數 | 1 到 +2147483647 |
bigserial | int2 | 自增加八字節整數 | 1 到 9223372036854775807 |
real | float4 | 4字節單精度浮點數 | |
double precision | float8 | 8字節雙精度浮點數 | |
numeric [(p, s)] | decimal [(p, s)] | 自定義精度浮點數 |
注:smallserial, serial, bigserial並非真正的數據類型,它們只是便於快速建立自增加列的符號(相似於MySQL的AUTO_INCREMENT)。學習
CREATE TABLE test_table ( id SERIAL );
與下面的SQL等價ui
CREATE SEQUENCE test_table_id_seq; CREATE TABLE test_table ( id integer NOT NULL DEFAULT nextval('test_table_id_seq') ); ALTER SEQUENCE test_table_id_seq OWNED BY test_table.id;
3.2 字符類型
名稱 | 別名 | 描述 |
character [(n)] | char [(n)] | 定長字符串 |
character varying [(n)] | varchar [(n)] | 變長字符串 |
text | 變長字符串 |
3.3 日期類型
名稱 | 別名 | 描述 |
date | 日期,包含年月日 | |
time [()] [without time zone] | 時間(不包含時區)(不包括日期) | |
time [()] with time zone | timetz | 時間,包含時區(不包括日期) |
timestamp [()] [without time zone] | 日期及時間(不包含時區) | |
timestamp [()] with time zone | 日期及時間(包含時區) | |
interval [fields] [()] | 時間間隔 |
3.4 金錢類型
名稱 | 別名 | 描述 |
money | 金額 |
3.5 布爾類型
名稱 | 別名 | 描述 |
bool | 布爾能夠用"t, T, true, TRUE, y, yes, on, f, F, false, FALSE, n, no, off, 1, 0.....""表示 |
3.6 二進制字符串
名稱 | 別名 | 描述 |
bytea | 變長的二進制字符串 |
3.7 網絡地址
名稱 | 別名 | 描述 |
cidr | IPv4/IPv6網絡地址 | |
inet | IPv4/IPv6主機和網絡 | |
macaddr | mac地址,‘08:00:2b:02:03’,‘08-00-2b-01-02-03’… |
注:IPv4形式均爲adress/y, inet不寫y默認爲32, cidr不寫y按照IP地址分類來添加默認掩碼。
3.8 bit串類型
名稱 | 別名 | 描述 |
bit [(n)] | 定長bit串 | |
bit varying [(n)] | varbit [(n)] | 變長bit串 |
3.9 文字搜索類型
tsvector有序的無重複的語義集合。
tsquery存儲用來搜索的語義字段,會處理邏輯運算。
3.10 其餘字段
名稱 | 別名 | 描述 |
json | json 數據 | |
uuid | uuid | |
xml | xml | |
數組 | 數組 |
四、系統保留列
PostgreSQL的每張表都有系統保留列,都是系統隱式定義的。用戶自定義的字段名不能與它們衝突。
名稱 | 描述 |
oid | |
tableoid | |
xmin | |
cmin | |
xmax | |
cmax | |
ctid |
五、 MySQL與PostgreSQL一些差別
(1) 註釋符號不一樣:MySQL使用#進行註釋,PG使用— —。
(2) 引用值的符號不一樣:MySQL使用單引號或者雙引號引用值(如,WHERE name = "john");PG只使用單引號引用值(WHERE name = 'john'),雙引號用來引用系統標識符,字段名,表名等等。
(3) MySQL使用反引號來引用系統標識。
(4) PG針對字符串比較是大小寫敏感的,"Smith"和"smith"不同。合理使用轉換函數,如lower();大小寫不敏感的操做符,如like。
(5) PG中的數據庫,表,字段和列名稱與大小寫無關,默認都會轉化成小寫的,除非使用雙引號建立它們,在這種狀況下會區分大小寫;在MySQL中,表名稱能夠區分大小寫,也能夠不區分大小寫,具體取決於使用的操做系統。
(6) MySQL使用C語言運算符進行邏輯運算(即'foo'||'bar'表示'foo'或'bar','foo'&&'bar'表示'foo'和'bar');PG使用|| 用於字符串鏈接('foo'||'bar'='foobar')。
都是相互學習得過程,但願你們可以共同交流,共同進步,謝謝。