PGSQL基础语句汇总
⼀、pgsql⾥⾯的数据类型不再介绍:
⼆、常⽤基本语句
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 myschemapany(
                          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 = , 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 在⼀张已存在的表上添加列的语法如下:
sql触发器的使用
      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,
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、权限
3.10、常⽤函数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。