SQL 命令Word文档下载推荐.docx
《SQL 命令Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《SQL 命令Word文档下载推荐.docx(68页珍藏版)》请在冰豆网上搜索。
![SQL 命令Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/3/5d85f944-5efb-4512-b1b8-ded693222e78/5d85f944-5efb-4512-b1b8-ded693222e781.gif)
CREATETYPE--定义一个新的数据类型
CREATEUSER--创建一个新的数据库用户帐户
CREATEVIEW--定义一个视图
DECLARE--定义一个游标
DELETE--删除一个表中的行
DROPAGGREGATE--删除一个用户定义的聚集函数
DROPDATABASE--删除一个数据库.
DROPFUNCTION--删除一个用户定义的函数
DROPGROUP--删除一个用户组
DROPINDEX--删除一个索引
DROPLANGUAGE--删除一个用户定义的过程语言
DROPOPERATOR--删除一个用户定义操作符
DROPRULE--删除一个重写规则
DROPSEQUENCE--删除一个序列
DROPTABLE--删除一个表
DROPTRIGGER--删除一个触发器定义.
DROPTYPE--删除一个用户定义数据类型
DROPUSER--删除一个数据库用户帐号
DROPVIEW--删除一个视图
END--提交当前的事务
EXPLAIN--显示语句执行规划
FETCH--用游标从表中抓取行
GRANT--定义访问权限
INSERT--在表中创建新行
LISTEN--监听一个通知
LOAD--装载或重载一个共享库文件
LOCK--明确地锁定一个表
MOVE--把游标放到表中的特定的行
NOTIFY--生成一个通知
REINDEX--恢复一个损坏了的索引
RESET--把一个运行时参数值恢复为缺省值
REVOKE--删除访问权限.
ROLLBACK--退出当前事务
SELECT--从表或视图中取出若干行.
SELECTINTO--从一个查询的结果中创建一个新表
SET--改变运行时参数
SETCONSTRAINTS--设置当前事务的约束模式
SETSESSIONAUTHORIZATION--为当前会话设置会话用户标识符和当前用户标识符
SETTRANSACTION--设置当前事务的特性
SHOW--显示运行时参数的数值
TRUNCATE--清空一个表
UNLISTEN--停止监听通知信息
UPDATE--更新一个表中的行
VACUUM--垃圾收集以及可选地分析一个数据库
--------------------------------------------------------------------------------
ABORT退出当前事务
ABORTName
Synopsis
ABORT[WORK|TRANSACTION]
输入
无
输出
ROLLBACK成功的返回信息.
NOTICE:
ROLLBACK:
notransactioninprogress
如果当前没有任何正在处理的事务存在.
描述
ABORT回卷当前事务并且废弃所有当前事务中做的更新.这个命令和命令ROLLBACK完全一样,只是由于历史原因而保留下来.
注意
用COMMIT语句可以成功地结束/提交一个事务.
用法
取消所有更改:
ABORTWORK;
兼容性SQL92
此命令是PostgreSQL基于历史原因做的扩展.ROLLBACK是中等价的命令.
ALTERGROUP向组中增加用户或从组中删除用户
ALTERGROUP
Name
ALTERGROUP--向组中增加用户或从组中删除用户
ALTERGROUPnameADDUSERusername[,...]
ALTERGROUPnameDROPUSERusername[,...]
要更改的组名称。
Username
准备向组中增加或从组中删除的用户名。
用户名必须已经存在。
更改成功的返回信息。
ALTERGROUP用于向组中增加用户或者从组中删除用户。
只有数据库超级用户才能使用这条命令。
向组中增加用户并不创建用户。
同样从组中删除用户也不删除用户本身。
使用CREATEGROUP创建新组以及DROPGROUP删除一个组。
向组中增加用户:
ALTERGROUPstaffADDUSERKarl,john;
从组中删除用户:
ALTERGROUPworkersDROPUSERBeth;
里没有ALTERGROUP语句。
角色(roles)的概念与之类似。
ALTERTABLE修改表的定义
ALTERTABLE
ALTERTABLE--修改表的定义
ALTERTABLE[ONLY]table[*]
ADD[COLUMN]columntype[columnconstraint[...]]
ALTER[COLUMN]column{SETDEFAULTvalue|DROPDEFAULT}
ALTER[COLUMN]columnSETSTATISTICSinteger
RENAME[COLUMN]columnTOnewcolumn
RENAMETOnewtable
ADDtableconstraintdefinition
ALTERTABLE[ONLY]table
DROPCONSTRAINTconstraint
{RESTRICT|CASCADE}
ALTERTABLEtable
OWNERTOnewowner
table
试图更改的现存表的名称.
column
现存或新的列名称.
type
新列的类型.
newcolumn
现存列的新名称.
newtable
表的新名称.
tableconstraintdefinition
表的新的约束定义.
Newuser
该表的新所有者的用户名.
ALTER
从被改名的列或表返回的信息.
ERROR
如果一个列或表不存在返回的信息.
ALTERTABLE变更一个现存表的定义.
ADDCOLUMN形式使用与CREATETABLE一样的语法向表中增加一个新列/字段。
ALTERCOLUMNSET/DROPDEFAULT形式允许你从列/字段中设置或者删除缺省(值)。
注意缺省(值)只适用于随后的INSERT命令。
它们不会改变已经存在于表中的行.
ALTERCOLUMNSETSTATISTICS形式允许你为随后的ANALYZE操作设置收集统计信息的对象.
RENAME子句可以在不影响任何相关数据的情况下更改一个表,字段,索引或者序列名称。
因此,在此命令执行后数据仍将是相同尺寸和类型。
ADDtableconstraintdefinition子句使用与CREATETABLE一样的语法向表中增加一个新的约束。
DROPCONSTRAINTconstraint子句删除所有表上匹配constraint的CHECK约束(以及其子表)
OWNER把该表的所有者改为用户newuser.
如果要改变表的纲要,你必须是表的所有者.
COLUMN关键字是多余的,可以省略.
在目前的ADDCOLUMN实现里还不支持新列/字段的缺省(值)和NOTNULL子句。
不过你可以随后用ALTERTABLE的SETDEFAULT形式设置缺省(值)。
(你可能还想用UPDATE把已存在行更新为缺省值。
)
目前只有CHECK约束可以从表中删除.RESTRICT关键字是必须的,尽管并不检查依赖性.还不支持CASCADE选项.要删除一个PRIMARY或者UNIQUE约束,用DROPINDEX命令删除相关的索引.要删除FOREIGNKEY约束,你需要重新创建并重新装载该表,创建的时候使用CREATETABLE命令的其它参数.
比如,要删除在表distributors上的所有约束∶
CREATETABLEtempASSELECT*FROMdistributors;
DROPTABLEdistributors;
CREATETABLEdistributorsASSELECT*FROMtemp;
DROPTABLEtemp;
要修改表的结构,你必须是表的所有人。
不允许更改系统表结构的任何部分。
PostgreSQL用户手册里有关于继承的更多信息.
请参考CREATETABLE部分获取更多有效参数的描述.
向表中增加一个varchar列:
ALTERTABLEdistributorsADDCOLUMNaddressVARCHAR(30);
对现存列改名:
ALTERTABLEdistributorsRENAMECOLUMNaddressTOcity;
更改现存表的名字∶
ALTERTABLEdistributorsRENAMETOsuppliers;
给一个表增加一个检查约束∶
ALTERTABLEdistributorsADDCONSTRAINTzipchkCHECK(char_length(zipcode)=5);
删除一个表和它的所有子表的监查约束∶
ALTERTABLEdistributorsDROPCONSTRAINTzipchk;
向表中增加一个外键约束:
ALTERTABLEdistributorsADDCONSTRAINTdistfkFOREIGNKEY(address)REFERENCESaddresses(address)MATCHFULL;
给表增加一个(多字段)唯一约束∶
ALTERTABLEdistributorsADDCONSTRAINTdist_id_zipcode_keyUNIQUE(dist_id,zipcode);
ADDCOLUMN形式是兼容的,除了上面说的缺省(值)和NOTNULL约束外。
ALTERCOLUMN形式是完全兼容的。
对ALTERTABLE声明了一些附加的PostgreSQL目前还不直接支持的功能:
ALTERTABLEtableDROP[COLUMN]column{RESTRICT|CASCADE}
从一个表中删除一个列.目前,要删除一个现存的列,表必须重新创建和重新装载:
CREATETABLEtempASSELECTdid,cityFROMdistributors;
CREATETABLEdistributors(
didDECIMAL(3)DEFAULT1,
nameVARCHAR(40)NOTNULL
);
INSERTINTOdistributorsSELECT*FROMtemp;
重命名表,列/字段,索引,和序列的名字是PostgreSQL对的扩展。
ALTERUSER
ALTERUSERusername[[WITH]option[...]]
这里option可以是∶
[ENCRYPTED|UNENCRYPTED]PASSWORD'
password'
|CREATEDB|NOCREATEDB
|CREATEUSER|NOCREATEUSER
|VALIDUNTIL'
abstime'
username
想进行更改的用户的名字。
[encrypted|unencrypted]password
此帐号所使用的新口令。
Encrypted/unencrypted控制该口令在数据库里是否以加密形式存储.
CREATEDB
NOCREATEDB
这个子句定义该用户创建数据库的能力。
如果声明了CREATEDB,该用户可以创建她自己的数据库。
用NOCREATEDB将剥夺一个用户创建数据库的能力。
CREATEUSER
NOCREATEUSER
这个子句决定一个用户能否创建新用户。
这个选项同样还令该用户成为超级用户,可以超越所有访问限制。
abstime
该用户帐号口令的有效日期(和可选的时间)。
更改成功的返回信息.
ERROR:
ALTERUSER:
user"
username"
doesnotexist
如果数据库不认识你所声明的用户返回的信息.
ALTERUSER用于更改用户的PostgreSQL帐号的属性.没有在该命令中出现的属性保持原值.
只有一个数据库超级用户可以用这个命令更改权限和口令有效期。
普通用户只能更改他们自己的口令。
ALTERUSER无法改变一个用户的组的成员性.用ALTERGROUP实现这个目地.
使用CREATEUSER创建新用户和DROPUSER删除用户。
更改一用户口令:
ALTERUSERdivideWITHPASSWORD'
hu8jmn3'
;
更改一用户有效期
ALTERUSERManuelVALIDUNTIL'
Jan312030'
更改一用户有效期,声明其权限应该在用比UTC早一小时的时区记时的1998年5月4日正午失效
ALTERUSERChrisVALIDUNTIL'
May412:
00:
001998+1'
赋予一用户创建新用户和新数据库的权限:
ALTERUSERMiriamCREATEUSERCREATEDB;
里没有ALTERUSER.该标准将用户定义部分交给具体数据库实现处理.
ANALYZE
ANALYZE[VERBOSE][table[(column[,...])]]
VERBOSE
打开处理过程信息的显示.
要分析的特定表的名字.缺省是所有表.
要分析的特定行的名字.缺省是所有列.
命令已经结束了.
ANALYZE收集有关PostgreSQL表的内容的统计,然后把结果保存在系统表pg_statistic里.随后,查询规划器就可以使用这些统计帮助判断查询的最有效的规划.
如果没有参数,ANALYZE检查在当前数据库里的所有表.如果有参数,ANALYZE只检查那个表.你还可以给出一列字段名字,这个时候只有那些字段的统计信息被更新.
周期性地运行ANALYZE,或者在对表的大部分内容做了更改之后马上运行它是个好习惯,准确的统计信息将帮助规划器选择最合适的查询规划,并因此而改善查询处理的速度.一种比较经常采用的策略是每天在低负荷的时候运行一次VACUUM和ANALYZE.
和VACUUMFULL不同的是,ANALYZE只需要在目标表上有一个读取锁,因此它可以和表上的其它活动并行地运行.
对于大表,ANALYZE采集表内容的一个随机的抽样做统计,而不是检查每一行.这样即使是很大的表,我们也只需要很少的一些时间就可以完成分析.不过要注意的是统计只是近似的结果,而且每次运行ANALYZE都会有一些小变化,即使表内容实际上没有改变也这样.这样会导致EXPLAIN所显示的规划器计算的开销有一些小变化,
收集的统计信息通常包括一个每字段最常用数值的列表以及一个包线图,显示每个字段里数据的近似分布.如果ANALYZE认为它们都没有什么用,(比如,在一个唯一键字的字段上没有公共的数值)或者是该字段数据类型不支持相关的操作符,那么它们都可以忽略.在用户手册中有关于统计的更多信息.
分析的广度可以通过用ALTERTABLEALTERCOLUMNSETSTATISTICS(参阅ALTERTABLE调整每字段的统计目标来控制.目标数值设置最常用数值列表中的记录的最大数目以及包线图中的最大块数.缺省的目标数值是10,不过我们可以调节这个数值获取规划器计算精度和ANALYZE运行所需要的时间以及pg_statistic里面占据的空间数目之间的平衡.特别是,把统计目标设置为零就关闭了该字段的统计收集.对那些从来不参与到查询的WHERE,GROUPBY,或者ORDERBY子句里的字段是很有用的,因为规划器不会使用到这样的字段上的统计.)
在被分析的字段中最大的统计目标决定为统计采样的表中的行的数目.增大目标会导致做ANALYZE的时候成比例地增大对时间和空间的需求.
里没有ANALYZE语句.
BEGIN
BEGIN[WORK|TRANSACTION]
WORK
TRANSACTION
可选关键字。
没什么作用。
这表明一个新的事务已经开始.
BEGIN:
alreadyatransactioninprogress
这表明该事务已经运行,当前事务不受影响.
缺省时,PostgreSQL以非链接模式(unchainedmode)(在其他数据库系统里也称之为"
自动提交("
autocommit"
))"
。
换句话说,每个用户语句都是在其自身的事务中运行并且在语句结束时隐含的调用一个提交(commit)(如果执行成功则提交,否则调用一个回卷)。
BEGIN以链接模式(chainedmode)初始化一个用户事务,也就是说所有BEGIN命令后的用户语句都将在一个事务里面执行直到一个明确的COMMIT,ROLLBACK,或执行退出(abort)。
在链接模式里执行的语句很明显地快得多,因为事务开始/提交(start/commit)需要大量的CPU和磁盘活动。
在一个事务内部执行多条语句时因为可能修改若干个相关的表因而同样需要一致性。
在PostgreSQL里缺省的事务隔离级别是READCOMMITTED,这时在事务内部的查询只看到查询提交之前的(数据)修改。
所以,如果你需要更严格的事务隔离,你必须在BEGIN后马上使用SETTRANSACTIONISOLATIONLEVELSERIALIZABLE。
在SERIALIZABLE模式里,查询将只能看到整个事务开始之前的修改。
(实际上是在一个可串行化事务内部第一个DML语句执行前的数据)。
如果提交了事务,PostgreSQL将保证要么实现所有更新,要么所有更新都没有实现。
事务有标准的ACID(原子性,一致性,隔离性,持续性)(atomic,consistent,isolatable,anddurable)属性。
请参考LOCK语句获取关于在事务内部锁定一个表的详细信息.
使用COMMIT或者ROLLBACK结束一个事务.
开始一个用户事务:
BEGINWORK;
BEGIN是PostgreSQL语言的扩展.在中没有明确的BEGIN的定义;
事务初始化总是隐含的而且使用一个COMMIT或者ROLLBACK语句终止.
注意:
许多关系型数据库为了方便提供一个自动提交(autocommit)特性。
顺便说一句,BEGIN关键字在嵌入SQL里用于不同的目的。
我们建议你在移植数据库应用时仔细检查事务的语意