|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
因此,我们的第一个“米”,就是二进制日志binlog必须是rowbased的。在rowbase下,二进制日志binlog同时记录了更新前后的整行记录。server利用SQLServer开辟使用程序
编写存储历程与触发器
存储历程和触发器是由用户创立的、驻留在服务器的一组TransactSQL查询语句。触发器是体系在特定前提下实行的。存储历程可以改良使用程序的功能。当客户程序必要会见数据时,一样平常要经由5个步骤才干会见到数据:
1)查询语句被发送到服务器。
2)服务器编译SQL代码。
3)优化发生查询的实行企图。
4)数据引擎实行查询。
5)了局发还客户程序。
存储历程是在创立时编译的,当存储历程第一次实行时,SQLServer发生查询实行企图并将其存储出去,以利于未来利用。当经由过程存储历程收回一个哀求时,上述的第2和第3步就没有了,这能年夜年夜改良体系的功能。即便在第1步上也能进步功能。由于此时发送到服务器的语句只是一条存储历程的EXECUTE语句,而不是复杂的、庞大的查询。这类特征能下降收集的流量。
除功能方面的改良外,存储历程还供应了便利地会合保护使用程序的功效。假如将查询嵌进到使用程序中。而又必要对查询举行改动,则使用程序必要从头编译,偏重新公布到一切的客户端。而在存储过程当中,修正对用户而言是通明的,它只必要在服务器上从头编译存储历程。
存储历程还能供应平安机制,只管用户大概无权实行存储过程当中的命令,但它却大概有权实行存储历程自己。偶然候,体系办理员不会给用户以数据修正(UPDATE、INSERT和DELETE)的权利。创立的存储历程却能举行这些操纵。固然用户必要具有实行该存储历程的权利。
创建存储历程
存储历程能够到达以下目标:
・带参数。
・前往形态值。
・挪用别的存储历程。
・在远程服务器上实行。
存储历程在“sysobjects”体系表中有一个表项,其范例为“P”。存储历程的文本存储在“syscomments”体系表中。创立存储历程必要利用TransactSQL命令CREATEPROCEDURE。
比方:
USEpubs
GO
CREATEPROCEDUREap_GetAuthorsForPublisher
AS
SELECTa.au_lname,a.au_fname
FROMauthorsa,titleauthorta,titlest,publishersp
WHEREa.au_id=ta.Au_id
ANDta.Title_id=t.title_id
ANDt.pub_id=p.pub_id
ANDp.pub_name=’NewMoonBooks’
GO
CREATEPROCEDURE语句的语法以下:
CREATEPROC[DURE]procedure_name[;number]
[@parameter_name][OUTPUT][,_n]]
[WITH{RECOMPILE|ENCRYPTION}]
[FORREPLICATION]
AS
Number是用来对不异名字的历程举行分组的整数。分组是将一切的历程经由过程dropprocedure语句组合到一个分组中。
@parameter_name指定参数的称号。
RECOMPILE暗示每次实行历程时都要举行编译。
ENCRYPTION暗示历程的文本在“syscomments”表中要加密。
FORREPLICATION暗示历程不克不及在提交服务器上实行。
将参数传送给存储历程
存储历程可以承受参数。
注重:历程的参数也能够是用户界说的数据范例。
给参数一个缺省值
用户还能够为存储过程当中的参数界说缺省值。当在实行时没有供应所需的参数时,体系就利用缺省值作为参数。假如既没有界说缺省值,又没有在实行时供应参数,则SQLServer就会前往一个毛病。在存储过程当中界说缺省值,并利用一些逻辑检测是不是指定了参数从而接纳响应的举动,这是一种很好的习气。
比方:
USEpubs
GO
CREATEPROCEDUREap_GetAuthorsForPublisher
@PublisherNamevarchar(40)=‘NewMoonBooks’
AS
SELECTa.au_lname,a.au_fname
FROMauthorsa,titleauthorta,titlest,publishersp
WHEREa.au_id=ta.Au_id
ANDta.Title_id=t.title_id
ANDt.pub_id=p.pub_id
ANDp.pub_name=@PublisherName
GO
由MySQL用来存储数据的文件格式以已经被广泛地测试过,但是总是有外部情况可以导致数据库表被破坏: |
|