|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
支持多线程,充分利用CPU资源计划|数据|数据库开辟者们应当晓得,利用那些非尺度的SQL命令(好比Oracle、微软和MySQL等数据库体系)存在水平相称高的伤害。也就是说,从跨平台和恪守尺度的角度动身,你应当只管接纳ANSISQL,它是一种战争台有关的数据库言语。不论你在利用哪一种数据库体系,假如它完整撑持SQL那末它就应当撑持ANSISQL-92尺度。但是,“应当撑持”和“的确撑持”完整是两回事。在举行DBMS跨平台编程的时分,并非一切的体系都完整撑持ANSISQL尺度。这篇文章大旨就是提出利用非尺度SQL时所存在的风险及其相干的倡议。
别利用存储历程
在某些编程情况下,出于效力和平安等方面的缘故原由,存储历程成为程序员开辟数据库使用程序的独一办法。VisualBasic、C和Java程序员都其实不必要懂得SQL。但是,在其他某些编程情况下,存储历程又是完整禁用的。MySQL一般和ApacheWeb服务器组合利用,这是由于这两种软件不但收费、牢靠并且功效壮大,可是,恰好是MySQL不撑持存储历程。
--------------------------------------------------------------------------------
存储历程的界说
所谓存储历程就是构成一个逻辑单位并且实行出格义务的一组SQL语句。存储历程用来封装针对数据库服务器的一整套操纵或查询。
--------------------------------------------------------------------------------
Oracle和SQL服务器二者都包含了“内建”的存储历程,其利用也是很便利的。但是,假如明智的话万万别期望它们,你没法包管数据库办理员是不是锁定、删除或修正了这些存储历程。假如你发明可用的某些存储历程恰是你必要的,你这才能够在本人的代码中利用它们的功效。
一般,你能在Oracle或SQLServer上利用存储历程但在MySQL上则没法使用。假如你的确用到了它们,那末你得包管本人没有效到同特定平台相干的命令(今后会商)。
别利用毗连
毗连是Oracle和SQLServer这两种DBMS上使人头痛的一个成绩,由于这两种体系在毗连的观点上有基本的分歧。基础上,各个DBMS的毗连事情道理不老是一样的,并且你终极大概会失掉不测的了局汇合。在我们议论各个体系有干系接的观点不同和怎样办理这些成绩之前,你应当了解基础的毗连子句:
毗连
Join(毗连)是从多个数据源猎取数据的SQL数据表创立命令。
等毗连
Equi-Join从两个自力的数据源猎取数据并把它们组分解一个年夜表。
内/外毗连
内毗连(InnerJoin)把两个表的外部列毗连起来。外毗连把两个表的内部列毗连起来。
左/右毗连
左毗连(LeftJoin)毗连两个表右边的列。右毗连则毗连两个表右侧的列。
复合/庞大毗连
其他各类毗连—左/内、左/外、右/内和右/外等。
归正你得记分明了,假如你想要本人的使用程序能在各类数据库服务器上都能事情那末就别利用毗连。
ANSISQL:CREATE,DROP,ADD,UPDATE,DELETE,INSERT,SELECT
总之,你应该用到的独一命令以下:
数据界说言语(DDL)下的CREATE和DROP。
数据操纵言语(DML)下的ADD、UPDATE、DELETE和INSERT。
猎取数据的SELECT。
假如你在这些命令中利用了辨别巨细写的表格或字段名,大概这些名字包括了空格或别的特别字符,那末你最好用方括号把名字围起来。如许做有助于避免非尺度字符激发DBMS的不一般反响。
援用的完全性:键和数据范例
利用干系数据库的决意性缘故原由就是明白数据之间的干系并且保持那些干系的完全性。如许才干闪开发者以最小的冗余性、最高效的体例存储数据。键界说了干系。数据范例界说了存储和操纵数据的划定规矩。这些就是一个数据库的基础方面,可是详细的语法却大概由于数据库的分歧而分歧。
数据范例
只要很少部分的数据范例失掉一切数据库服务器的撑持。每种DBMS都有它本人的数据范例和为何要如许利用它们的缘故原由。某些专无数据范例(好比MicrosoftAccess的AUTONUMBER)用起来的确相称便利。
以下是ANSI数据范例:
BIT,CHARACTER,DATE,DECIMAL,DOUBLEPRECISION,FLOAT,INTEGER,INTERVAL,NUMERIC,REAL,SMALLINT,TIMESTAMP,TIME,VARBIT,VARCHAR,CHAR
以下是Oracle/Access/SQL不撑持的“尺度”数据范例:
INTERVAL,TIME,VARBIT
只要Oracle才撑持DATE,可是以下的“尺度”数据范例不被Oracle撑持:
BIT,DECIMAL,NUMERIC,TIMESTAMP
以下的“尺度”数据范例不被Access撑持:
BIT,CHARACTER,DATE,NUMERIC,SMALLINT,TIMESTAMP
如许,只要以下的数据范例能够包管在各种数据库上都能利用:
DOUBLEPRECISION,FLOAT,INTEGER,NUMERIC,REAL,SMALLINT,VARCHAR,CHAR
主/外键
假定某个表内有两个字段,创立这个表的语法以下:
CREATETABLE[MyTable]([FieldA]VARCHAR,[FieldB]VARCHAR);
为了增加主键以便表内的每笔记录都独一标识你能够接纳PRIMARYKEY表达式:
CREATETABLE[MyTableA]([RecordID]VARCHARPRIMARYKEY,[FieldA]VARCHAR,[FieldB]VARCHAR);
在创立另外一个表,个中一个字段索引第1个表,你能够把该字段界说为同第1个表的字段具有干系的外键:
CREATETABLE[MyTableB]([RecordID]VARCHARPRIMARYKEY,[FieldA]VARCHAR,[FieldB]VARCHAR,[FieldC]VARCHARREFERENCES[MyTableA]([FieldA]))
在以上例子中,一切的字段都是VARCHAR范例;可是你得记着,某一数据范例字段只能索引统一数据范例的字段。
ODBC和JDBC
假如你在编写的使用程序要用到SQL数据库毗连,那末你能够用ODBC完成该功效。假如它是一个Java使用程序则能够用JDBC(简而言之就是ODBC的Java接口)。
由于你但愿本人的使用程序最好不要引发办理员的注重,以是你应当为你用户的DBMS包含一切需要的ODBC驱动程序。如许,假如用户从一个平台转移到另外一个平台,它们所必要的驱动程序却已事前具有了。
你的使用程序应当经由过程编程的体例决意以后用到的ODBC驱动程序对应何种DBMS。如许你才干用上那些数据库服务器上壮大的、同特定平台相干的命令。
另类扫瞄器之战
最盛行的扫瞄器固然是微软的InternetExplorer和Netscape的Navigator了。可是,不论你手头用的是哪种,它能包管撑持现有的一切网站吗?错!良多花梢的器材,好比DHTML、框架和多媒体等等都各自遭到两类扫瞄器中非尺度的HTML标签的撑持。
由于程序在这两种国际尺度的岔道口莫衷一是,以是你必需为两种扫瞄器编写代码大概编写最具广泛性的功效代码而保持大批的静态内容。
数据库服务器也面对一样的成绩。ANSISQL-92是大家赞成的尺度。但是,Oracle、微软和其他数据库厂商还自作主意到场了良多损坏SQL代码的特征。因而,你不但得编写服从基础标准(SQL-92)的代码,并且的代码还得依据详细用到的产物完成分歧的特征。
在你本人的使用程序内,你必需准确地决意使用程序将利用甚么范例的数据库,并且数据库应当定位在那里。你还得干练地处置使用程序或用户发生的任何毛病。你固然不但愿仅仅由于文件被删除大概网线毗连松懈就招致程序溃散(或服务器溃散)。在经由经心计划的收集上,数据库服务器一般同事情站和Web服务器、使用服务器在物理上相分别,因而断开毗连是很罕见的。
小结
作为Web开辟者,你必要对使用程序利用非尺度SQL命令的伤害坚持高度的当心。这篇文章的中央头脑是倡议用ANSISQL编写跨平台的使用程序。使用ANSISQL削减贸易数据库体系的非尺度方言所带来的头疼成绩。
有了rowbase的binlog后,我们来分析一下怎么实现闪回。平时的DML无非三种操作,增删改,先说三种操作的日志格式。 |
|