psql命令:
\ef : 抓取并编辑命名函数的定义,以CREATE OR REPLACE FUNCTION 命令的形式。编辑处理的方式和\edit相同。在编辑退出之后, 更新的命令等待在查询缓冲区中;分号或\g发送,或\r取消。
\sf+ function : 抓取并显示命名函数的定义,以CREATE OR REPLACE FUNCTION 命令的格式。定义打印到当前查询输出通道,目标函数可以只通过名字指定,或者通过名字和参数指定,例如foo(integer, text)。 如果有多个函数的名字相同,则必须给出参数的类型。
DROP FUNCTION : 删除一个命名函数
PL/pgSQL过程语言:
块结构:
[ <<label>> ]---->标签,
[ DECLARE---->声明,可以定义变量等
declarations ]
BEGIN---->执行语句
statements
END [ label ];
"""
CREATE FUNCTION somefunc() RETURNS integer AS $$
<< outerblock >>
DECLARE
quantity integer := 30;
BEGIN
RAISE NOTICE 'Quantity here is %', quantity; -- 在这里的数量是30
quantity := 50;
-- 创建一个子块
DECLARE
quantity integer := 80;
BEGIN
RAISE NOTICE 'Quantity here is %', quantity; -- 在这里的数量是80
RAISE NOTICE 'Outer quantity here is %', outerblock.quantity; -- 在这里的数量是50
END;
RAISE NOTICE 'Quantity here is %', quantity; -- 在这里的数量是50
RETURN quantity;
END;
$$ LANGUAGE plpgsql;
"""
CREATE FUNCTION:定义一个新函数
CREATE OR REPLACE FUNCTION:如果函数不存在就创建一个新函数,否则替换现有的定义。
变量一般语句:name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];
翻译:变量名称name 可选参数[CONSTANT--意思是避免了该变量被赋值,那么就可以当作一个固定的常量来使用] 数据类型type [COLLATE--意思是声明变量的排序规则] [NOT NULL--意思是声明非空,如果赋予变量的数值是个NULL则报错] [三选一]
例子:uesr text := 'lixingyu'; user text DEFAULT 'lixinbgyu';
SQL语句
CREATE TABLE 表名(字段 数据类型,字段 数据类型 ...); --创建表
DROP TABLE 表名; --删除表
INSERT INTO 表名 VALUES(数据,数据 ...);--在表中增加一行数据,全列插入
INSERT INTO 表名 (字段,字段...) VALUES(数据,数据...);--在表中插入一行数据,指定插入
SELECT 字段名 or max(字段名) FROM 表名;--查询语句,查询某张表里某些字段的内容,还可以使用聚集函数来对查询的字段进行计算并返回结果
SELECT 字段名 FROM 表名 WHERE 字段名 = 条件;--查询语句,可加上where过滤语句,对过滤后的结果行进行查询
SELECT 字段名 FROM 表名 ORDER BY 字段名;--对查询到的结果按照指定的字段名进行排序
SELECT DISTINCT 字段名 FROM 表名;--消除重复的行,假如查询的结果中字段名有两行名字是相同的,则会消除掉一个
SELECT 字段名 FROM 表名 [可以起别名],表名 [可以起别名] WHERE 第一个表中的某个字段 = 第二个表中的某个字段;--多表查询
SELECT 字段名 FROM 表名 WHERE 字段名 = (SELECT 字段名 FROM 表名);--子查询
SELECT 字段名 FROM 表名 WHERE 字段名 = 条件 HAVING max(字段名) < 值;--对查到的这些数据行再次进行过滤,一般用作与聚集查询
UPDATE 表名 SET 字段名 = 值,字段名 = 值... WHERE 字段名 = 条件;--更新修改语句
DELETE FROM 表名 WHERE 字段名 = 条件;--删除表中的某一行数据 如果直接这样写:DELETE FROM 表名;会直接删除这张表的所有行
遇到的问题
1:如果多张数据表中有重复字段名的话,在UPDATE与DELETE操作中要指定修改或删除哪一张表的此字段。
举例:数据表scjhb有字段名spl,数据表todaywork有字段名spl,当你执行UPDATE scjhb SET spl = 2 WHERE spl = 1;是不正确的,正确的做法是在WHERE筛选条件是加上表名,UPDATE scjhb SET spl=2 WHERE scjhb.spl = 1;