PostgreSQL笔记 (6)

开启事务使用BEGIN关键字,结束事务使用END关键字,提交事务操作使用COMMIT关键字,回滚事务使用ROLLBACK关键字。

BEGIN ; [事务操作1]; [事务操作2]; COMMIT; 10.LOCK 锁 LOCK锁主要是为了保证数据库数据的一致性,可以阻止用户修改一行或整个表,一般用在高并发的数据库中。

数据库中两种基本锁:

排他锁(Exclusive Locks):其他事务不可以读取和修改;

共享锁(Share Locks):其他事务可以读取,但是不能修改;

//LOCK语法 LOCK [TABLE] name --被锁表名 IN lock_mode; --锁定模式 死锁 死锁可能发生在两个事务彼此等待对方结束的时候。虽然可以回滚结束它,但是不方便。最好可以指定锁顺序避免死锁发生。 11.子查询

有主流数据库使用经验的,对子查询应该非常熟悉了,这里不再赘述~

12.SERIAL自增长

一开始我还以为PostgreSQL没有自带的自增长呢,原来它的自增长是SERIAL标识字段(和其他主流数据库都不同,算是它的一个特色吧)

伪类型 存储大小 范围
SMALLSERIAL   2字节   1 到 32,767  
SERIAL   4字节   1 到 2,147,483,647  
BIGSERIAL   8字节   1 到 922,337,2036,854,775,807  
//使用SERIAL自增标识 CREATE TABLE weather( id SERIAL PRIMARY KEY, temp_lo INT, temp_hi INT, date DATE )

虽然这个标识挺方便的,但是还是建议使用序列作为自增长~

13.SEQUENCE序列

PG的序列语法和Oracle的基本一致,但是细节上有区别,例如序列的高速缓存,Oracle的可以设置为0,但是PG的最低设置为1

//创建序列 CREATE SEQUENCE complaint_opr.seq_complaint_comment_id INCREMENT 1 START 500 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1; 14.GANT权限

这个主流数据库都有的,所以应该非常熟悉了

//应用在序列的时候 CREATE SEQUENCE cp_opr.seq_cp_comment_id INCREMENT 1 START 500 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1; ALTER SEQUENCE cp_opr.seq_cp_comment_id OWNER TO cp_opr; GRANT ALL ON SEQUENCE cp_opr.seq_cp_comment_id TO cp_opr; GRANT SELECT, UPDATE ON SEQUENCE cp_opr.seq_cp_comment_id TO tp_cp_opr; //应用在建表的时候 --建表语句省略~ GRANT INSERT, SELECT, UPDATE ON TABLE cp_opr.t_cp_parameter TO tp_cp_opr; GRANT ALL ON TABLE cp_opr.t_cp_parameter TO complaint_opr; COMMENT ON TABLE cp_opr.t_cp_parameter IS '简单类别定义表'; 15.常用函数

都说了是常用函数了,所以只列出来常用的那部分了哈,可不是我懒~~~

函数 返回值类型 描述 例子 结果
string | | string   text   字符串连接   'Hello' | | 'World'   'HelloWorld'  
char_length(string)   int   返回字符串中字符个数   char_length('HelloWorld')   10  
convert(string using conversion_name)   text   转换字符串编码   convert(convert('PostgreSQL' using iso_8859_1_to_utf8))   'PostgreSQL'  
lower(string)   text   字符串转换成小写   lower("TOM")   'tom'  
upper(string)   text   把字串转化为大写。   upper('tom')   TOM  
overlay(string placing string from int [for int])   text   替换子字串   overlay('Txxxxas' placing 'hom' from 2 for 4)   Thomas  
substring(string [from int] [for int])   text   抽取子字串   substring('Thomas' from 2 for 3)   hom  
trim([leading丨trailing 丨 both] [characters] from string)   text   从字串string的开头/结尾/两边/ 删除只包含characters(默认是一个空白)的最长的字串   trim(both 'x' from 'xTomxx')   Tom  
convert(string text, [src_encoding name,] dest_encoding name)   text   字符串转码   convert( 'text_in_utf8', 'UTF8', 'LATIN1')   以ISO 8859-1编码表示的text_in_utf8  
initcap(text)   text   单词首字母大写   initcap('hi thomas')   Hi Thomas  
length(string text)   int   string中字符的数目   length('jose')   4  
md5(string text)   text   MD5加密字符串   md5('abc')    
replace(string text, from text, to text)   text   替换指定字符串   replace('abcdefabcdef', 'cd', 'XX')   abXXefabXXef  
substr(string, from [, count])   text   抽取子字串。   substr('alphabet', 3, 2)   ph  
to_char(timestamp, text)   text   将时间戳转换为字符串   to_char(current_timestamp, 'HH12:MI:SS')    
to_char(interval, text)   text   将时间间隔转换为字符串   to_char(interval '15h 2m 12s', 'HH24:MI:SS')    
to_char(int, text)   text   整型转换为字符串   to_char(125, '999')    
to_char(double precision, text)   text   双精度转换为字符串   to_char(125.8::real, '999D9')    
to_char(numeric, text)   text   数字转换为字符串   to_char(-125.8, '999D99S')    
to_date(text, text)   date   字符串转换为日期   to_date('05 Dec 2000', 'DD Mon YYYY')    
to_number(text, text)   numeric   转换字符串为数字   to_number('12,454.8-', '99G999D9S')    
to_timestamp(text, text)   timestamp   转换为指定的时间格式 time zone convert string to time stamp   to_timestamp('05 Dec 2000', 'DD Mon YYYY')    
to_timestamp(double precision)   timestamp   把UNIX纪元转换成时间戳   to_timestamp(1284352323)    
参考文章和手册

1.PostgreSQL菜鸟手册
2.PostgreSQL中文手册
3.一些其他零散的博客~

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxfpw.html