开启事务使用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.一些其他零散的博客~