一、pgsql里面的數據類型不再介紹:https://www.runoob.com/postgresql/postgresql-data-type.html
二、常用基本語句
2.1、CREATE DATABASE dbname; 創建數據庫
create database Demo1;
注意:createdb 命令位於 PostgreSQL安裝目錄/bin 下,執行創建數據庫的命令:
$ cd /Library/PostgreSQL/11/bin/ $ createdb -h localhost -p 5432 -U postgres Demo1 password ******
2.2、DROP DATABASE [ IF EXISTS ] dbname; 刪除數據庫
drop database Demo1;
注意: dropdb 名位於 PostgreSQL安裝目錄/bin 下,執行刪除數據庫的命令:
$ cd /Library/PostgreSQL/11/bin/ $ dropdb -h localhost -p 5432 -U postgres runoobdb password ******
2.3、DROP TABLE 語句來刪除表格,包含表格數據、規則、觸發器
DROP TABLE Demo1; 或者 drop table department, company;
2.4、PostgreSQL 模式(SCHEMA)可以看着是一個表的集合, 一個模式可以包含視圖、索引、數據類型、函數和操作符
相同的對象名稱可以被用於不同的模式中而不會出現沖突,
例如 schema1 和 myschema 都可以包含名為 mytable 的表。
使用模式的優勢:1、允許多個用戶使用一個數據庫並且不會互相干擾。
2、將數據庫對象組織成邏輯組以便更容易管理。
3、第三方應用的對象可以放在獨立的模式中,這樣它們就不會與其他對象的名稱發生沖突。
2.4.1、 創建 語法:# create schema myschema;
# create table myschema.company(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
2.4.2、刪除語法:
刪除一個為空的模式(其中的所有對象已經被刪除):
DROP SCHEMA myschema;
刪除一個模式以及其中包含的所有對象:
DROP SCHEMA myschema CASCADE;
2.5、插入語句:INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);
所有字段插入值或者 INSERT INTO TABLE_NAME
VALUES (value1,value2,value3,...valueN);
案例:# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY,JOIN_DATE)
VALUES (1, 'Paul', 32, 'California', 20000.00,'2001-07-13');
所有字段插入值或者 INSERT INTO COMPANY
VALUES (1, 'Paul', 32, 'California', 20000.00,'2001-07-13');
2.6、查詢語句:SELECT column1, column2,...columnN FROM table_name;
案例:SELECT * FROM company;
SELECT * FROM COMPANY WHERE SALARY > 50000;
=或!=或 >=、IS NOT NULL;
案例2:
# SELECT (17 + 6) AS ADDITION ;
# SELECT COUNT(*) AS "RECORDS" FROM COMPANY;
PostgreSQL 還內置了一些數學函數,如:
1、avg() : 返回一個表達式的平均值
2、sum() : 返回指定字段的總和
3、count() : 返回查詢的記錄總數
2.7、更新數據庫表中數據
語法:UPDATE table_name SET column1 = value1,
column2 = value2...., columnN = valueN WHERE [condition];
案例:# UPDATE COMPANY SET SALARY = 15000 WHERE ID = 3;
2.8、DELETE 語句來刪除 PostgreSQL 表中的數據
DELETE FROM table_name WHERE [condition];
案例:DELETE FROM table_name WHERE [condition];
2.9、查詢數據 limit 或 OFFSET
案例:=# SELECT * FROM COMPANY LIMIT 4;
偏移 offset
# SELECT * FROM COMPANY LIMIT 3 OFFSET 2;
2.10、DISTINCT 關鍵字與 SELECT 語句一起使用,用於去除重復記錄,只獲取唯一的記錄
案例:SELECT DISTINCT name FROM COMPANY;
2.11、PostgreSQL 約束用於規定表中的數據規則。
PostgreSQL 中常用的約束。
1、NOT NULL:指示某列不能存儲 NULL 值。
2、UNIQUE:確保某列的值都是唯一的。
3、PRIMARY Key:NOT NULL 和 UNIQUE 的結合。
確保某列(或兩個列多個列的結合)有唯一標識,有助於更容易更快速地找到表中的一個特定的記錄。
4、FOREIGN Key: 保證一個表中的數據匹配另一個表中的值的參照完整性。
5、CHECK: 保證列中的值符合指定的條件。
6、EXCLUSION :排他約束,保證如果將任何兩行的指定列或表達式使用指定操作符進行比較,
至少其中一個操作符比較將會返回 false 或空值。
CREATE TABLE COMPANY3( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL UNIQUE, ADDRESS CHAR(50), SALARY REAL DEFAULT 50000.00 );
2.12、刪除約束
ALTER TABLE table_name DROP CONSTRAINT some_name;
三、PostgreSQL 高級
3.1、別名
SELECT C.ID, C.NAME, C.AGE, D.DEPT FROM COMPANY AS C, DEPARTMENT AS D WHERE C.ID = D.EMP_ID;
3.2、PostgreSQL 觸發器是數據庫的回調函數,它會在指定的數據庫事件發生時自動執行/調用。
PostgreSQL 觸發器可以在下面幾種情況下觸發:
3.2.1、在執行操作之前(在檢查約束並嘗試插入、更新或刪除之前)。
3.2.2、 在執行操作之后(在檢查約束並插入、更新或刪除完成之后)。
3.2.3、更新操作(在對一個視圖進行插入、更新、刪除時)
語法:1、創建觸發器時的基礎語法如下
CREATE TRIGGER trigger_name [BEFORE|AFTER|INSTEAD OF]
event_name ON table_name
[
-- 觸發器邏輯....
];
案例:
關鍵字 觸發器名字
# CREATE TRIGGER example_trigger AFTER INSERT ON COMPANY FOR EACH ROW EXECUTE PROCEDURE auditlogfunc();
CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $example_table$ BEGIN INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, current_timestamp); RETURN NEW; END; $example_table$ LANGUAGE plpgsql;
列出觸發器:
# SELECT * FROM pg_trigger;
列舉出特定表的觸發器,語法如下:
# SELECT tgname FROM pg_trigger, pg_class WHERE tgrelid=pg_class.oid AND relname='company';
刪除觸發器
# drop trigger example_trigger on company;
3.3、索引 # \d company 命令列出 COMPANY 表的所有索引:
# CREATE INDEX salary_index ON COMPANY (salary);
使用索引時,需要考慮下列准則:
1、索引不應該使用在較小的表上。
2、索引不應該使用在有頻繁的大批量的更新或插入操作的表上。
3、索引不應該使用在含有大量的 NULL 值的列上。
4、索引不應該使用在頻繁操作的列上。
3.4、PostgreSQL 中,ALTER TABLE 命令用於添加,修改,刪除一張已經存在表的列。
3.4.1、用 ALTER TABLE 在一張已存在的表上添加列的語法如下:
ALTER TABLE table_name ADD column_name datatype;
3.4.2、在一張已存在的表上 DROP COLUMN(刪除列),語法如下:
ALTER TABLE table_name DROP COLUMN column_name;
3.4.3、修改表中某列的 DATA TYPE(數據類型),語法如下:
ALTER TABLE table_name ALTER COLUMN column_name TYPE datatype;
案例:# ALTER TABLE COMPANY ADD GENDER char(1); 添加列
# ALTER TABLE COMPANY DROP GENDER; 刪除列
3.5、PostgreSQL 中 TRUNCATE TABLE 用於刪除表的數據,但不刪除表結構。
TRUNCATE TABLE 與 DELETE 具有相同的效果,但是由於它實際上並不掃描表,所以速度更快。
語法:TRUNCATE TABLE table_name;
案例:TRUNCATE TABLE COMPANY;
3.6、PostgreSQL 視圖是只讀的,因此可能無法在視圖上執行 DELETE、INSERT 或 UPDATE 語句。
但是可以在視圖上創建一個觸發器,當嘗試 DELETE、INSERT 或 UPDATE 視圖時觸發,需要做的動作在觸發器內容中定義。
3.6.1、用戶或用戶組認為更自然或直觀查找結構數據的方式。
3.6.2 、限制數據訪問,用戶只能看到有限的數據,而不是完整的表。
3.6.3、匯總各種表中的數據,用於生成報告。
語法:
CREATE [TEMP | TEMPORARY] VIEW view_name AS SELECT column1, column2..... FROM table_name WHERE [condition];
案例:
CREATE VIEW COMPANY_VIEW AS SELECT ID, NAME, AGE FROM COMPANY; --創建
DROP VIEW view_name;--刪除
3.7、TRANSACTION(事務)是數據庫管理系統執行過程中的一個邏輯單位,由一個有限的數據庫操作序列構成。
事務具有以下四個標准屬性,通常根據首字母縮寫為 ACID:
- 原子性(Atomicity):事務作為一個整體被執行,包含在其中的對數據庫的操作要么全部被執行,要么都不執行。
- 一致性(Consistency):事務應確保數據庫的狀態從一個一致狀態轉變為另一個一致狀態。一致狀態的含義是數據庫中的數據應滿足完整性約束。
- 隔離性(Isolation):多個事務並發執行時,一個事務的執行不應影響其他事務的執行。
- 持久性(Durability):已被提交的事務對數據庫的修改應該永久保存在數據庫中。
BEGIN TRANSACTION:開始一個事務。 COMMIT:事務確認,或者可以使用 END TRANSACTION 命令。 ROLLBACK:事務回滾。
回滾: # BEGIN; DELETE FROM COMPANY WHERE AGE = 25; ROLLBACK;
提交: # BEGIN; DELETE FROM COMPANY WHERE AGE = 25; COMMIT;
3.8、子查詢
SELECT * FROM COMPANY WHERE ID IN (SELECT ID FROM COMPANY WHERE SALARY > 45000) ;
3.9、權限
https://www.runoob.com/postgresql/postgresql-privileges.html
3.10、常用函數
https://www.runoob.com/postgresql/postgresql-functions.html