oracle数据库和mysql数据库的区别

oracle数据库和mysql数据库的区别,第1张

Oracle数据库与MySQL数据库的区别是本文我们主要介绍的内容,希望能够对您有所帮助。

1组函数用法规则

mysql中组函数在select语句中可以随意使用,但在oracle中如果查询语句中有组函数,那其他列名必须是组函数处理过的,或者是group by子句中的列否则报错

eg:

select name,count(money) from user;这个放在mysql中没有问题在oracle中就有问题了。

2自动增长的数据类型处理

MYSQL有自动增长的数据类型,插入记录时不用 *** 作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。

CREATE SEQUENCE序列号的名称(最好是表名+序列号标记)INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;

其中最大的值按字段的长度来定,如果定义的自动增长的序列号NUMBER(6),最大值为999999

INSERT语句插入这个字段值为:序列号的名称NEXTVAL

3单引号的处理

MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。

4翻页的SQL语句的处理

MYSQL处理翻页的SQL语句比较简单,用LIMIT开始位置,记录个数;PHP里还可以用SEEK定位到结果集的位置。ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM<100,不能用ROWNUM>80。

以下是经过分析后较好的两种ORACLE翻页SQL语句(ID是唯一关键字的字段名):

语句一:

SELECT ID, [FIELD_NAME,] FROM

TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW, ID

FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) WHERE NUMROW > 80 AND NUMROW

< 100 ) ORDER BY 条件3;

语句二:

SELECT FROM (( SELECT ROWNUM AS

NUMROW, c from (select [FIELD_NAME,] FROM TABLE_NAME WHERE 条件1

ORDER BY 条件2) c) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY

条件3;

5长字符串的处理

长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可 *** 作的字符串长度小于等于4000个单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次 *** 作。

6日期字段的处理

MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为SYSDATE,精确到秒,或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)年-月-日24小时:分钟:秒的格式YYYY-MM-DD

HH24:MI:SS TO_DATE()还有很多种日期格式,可以参看ORACLE

DOC日期型字段转换成字符串函数TO_CHAR(‘2001-08-01’,’YYYY-MM-DD HH24:MI:SS’)

日期字段的数学运算公式有很大的不同。MYSQL找到离当前时间7天用DATE_FIELD_NAME

> SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE找到离当前时间7天用 DATE_FIELD_NAME

>SYSDATE - 7;

MYSQL中插入当前时间的几个函数是:NOW()函数以`'YYYY-MM-DD

HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。CURTIME()以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。例:insert

into tablename (fieldname) values (now())

而oracle中当前时间是sysdate

7空字符的处理

MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构,导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。

8字符串的模糊比较

MYSQL里用字段名like%‘字符串%’,ORACLE里也可以用字段名like%‘字符串%’但这种方法不能使用索引,速度不快,用字符串比较函数instr(字段名,‘字符串’)>0会得到更精确的查找结果。

9程序和函数里, *** 作数据库的工作完成后请注意结果集和指针的释放。

=======================================================================================

1 Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。

2 Oracle支持大并发,大访问量,是OLTP最好的工具。

3 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。

4Oracle也Mysql *** 作上的区别

主键

Mysql一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Oracle没有自动增长类型,主

键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。

②单引号的处理

MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。

③翻页的SQL语句的处理

MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用

ROWNUM<100, 不能用ROWNUM>80

④ 长字符串的处理

长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可 *** 作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,方法借用

ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次 *** 作。

⑤空字符的处理

MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产生错误。因此导数据时要对空字符

进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。

⑥字符串的模糊比较

MYSQL里用 字段名 like '%字符串%',ORACLE里也可以用 字段名 like '%字符串%' 但这种方法不能使用索引, 速度不快。

⑦Oracle实现了ANSII SQL中大部分功能,如,事务的隔离级别、传播特性等而Mysql在这方面还是比较的弱。

到NCBI官网,数据库选择protein,输入蛋白质名称,然后再结果里找物种为human的结果,拿到这个序列到NCBI的Blast里比对,程序选择Blastp,比对结果中肯定至少有一个是小鼠同源蛋白。或者直接用clustalX把human,mice的蛋白序列直接比较。

你可以上网搜索查询各种物种的引物序列,也可以使用一些数据库来查询,比如NCBI的Primer-BLAST,可以查询许多物种的引物序列,还有一些其他的数据库,比如PrimerBank,PrimerDesign等。

关于数据库的逻辑设计 是一个很广泛的问题 本文主要针对开发应用中遇到在MS SQL Server上进行表设计时 对表的主键设计应注意的问题以及相应的解决办法

主键设计现状和问题

关于数据库表的主键设计 一般而言 是根据业务需求情况 以业务逻辑为基础 形成主键

比如 销售时要记录销售情况 一般需要两个表 一个是销售单的概要描述 记录诸如销售单号 总金额一类的情况 另外一个表记录每种商品的数量和金额 对于第一个表(主表) 通常我们以单据号为主键;对于商品销售的明细表(从表) 我们就需要将主表的单据号也放入到商品的明细表中 使其关联起来形成主从关系 同时该单据号与商品的编码一起 形成明细表的联合主键 这只是一般情况 我们稍微将这个问题延伸一下 假如在明细中 我们每种商品又可能以不同的价格方式销售 有部分按折扣价格销售 有部分按正常价格销售 要记录这些情况 那么我们就需要第三个表 而这第三个表的主键就需要第一个表的单据号以及第二个表的商品号再加上自身需要的信息一起构成联合主键;又或者其他情况 在第一个主表中 本身就是以联合方式构成联合主键 那么也需要在从表中将主表的多个字段添加进来联合在一起形成自己的主键

数据冗余存储 随着这种主从关系的延伸 数据库中需要重复存储的数据将变得越来越庞大 或者当主表本身就是联合主键时 就必须在从表中将所有的字段重新存储一次

SQL复杂度增加 当存在多个字段的联合主键时 我们需要将主表的多个字段与子表的多个字段关联以获取满足某些条件的所有详细情况记录

程序复杂度增加 可能需要传递多个参数

效率降低 数据库系统需要判断更多的条件 SQL语句长度增加 同时 联合主键自动生成联合索引

WEB分页困难 由于是联合主键方式(对于多数的子表) 那么在WEB页面上要进行分页处理时 在自关联时 难于处理

解决方案

从上面 我们已经看到现有结构存在着相当多的弊端 主要是导致程序复杂 效率降低并且不利于分页

为解决上述问题 本文提出 当应用系统后台数据库表间存在主从关系时 数据库表额外增加一非业务字段作为主键 该字段为数值型;或者当该表需要在应用中进行分页查询时 也应考虑如此设计 一般地 我们也可以几乎为任何表增加一个与业务逻辑无关的字段作为该表的主键字段

由于该字段要作为表的主键 那么其首要条件是要保证在该表中要具有唯一性 同时 结合SQL Server数据库自身的特性 可以为其建立一个自增列

create TABLE T_PK_DEMO ( U_ID  BIGINT NOT NULL IDENTITY( ) –唯一标识记录的ID COL_OTHER VARchar( ) NOT NULL  –其他列 CONSTRAINT PK_T_PK_DEMO PRIMARY KEY NONCLUSTERED (U_ID)–定义为主键 )

但是 SQL Server中的自增列却存在一个比较尴尬的事实 那就是该字段一旦定义和使用 用户无法直接干预该字段的值 完全由数据库系统自身控制

完全数据库系统控制 用户无法修改值

在数据库的发布和订阅时 使用自增列会比较麻烦

恢复部分数据时 使用自增列会比较麻烦

该列的值必须在插入数据后才能获取

鉴于此 建议不以自增列的方式来定义 而是参考Oracle数据库系统中序列 在SQL Server系统中实现类似Oracle数据库系统序列功能 这个具体在下面的小节中介绍 我们只需要按照普通字段的定义方式修改表定义为

create TABLE T_PK_DEMO ( U_ID  BIGINT NOT NULL –唯一标识记录的ID COL_OTHER VARchar( ) NOT NULL –其他列 CONSTRAINT PK_T_PK_DEMO PRIMARY KEY NONCLUSTERED (U_ID)–定义为主键 )

参照Oracle序列的功能 我们需要在SQL Server数据库中创建一个新表 以管理序列值

create TABLE T_DB_SEQ ( SEQ_NAMEVARchar( ) NOT NULL  –序列名称 SEQ_OWNER  VARchar( ) NOT NULL DEFAULT ’DBO’ –序列所有者(SYSTEM_USER) SEQ_CURRENT BIGINT NOT NULL DEFAULT –序列当前值 SEQ_MIN BIGINT NOT NULL DEFAULT –序列最小值 SEQ_MAX BIGINT NOT NULL DEFAULT –序列最小值 SEQ_MAX BIGINT NOT NULL DEFAULT –序列最大值 SEQ_STEPINT NOT NULL DEFAULT –序列增长步长 IF_CYCLEINT NOT NULL DEFAULT –是否循环( 不循环; 循环) CONSTRAINT T_DB_SEQ PRIMARY KEY CLUSTERED (SEQ_NAME SEQ_OWNER)–主键 )

应用系统为需要创建自增列的表创建一个序列名称 在表“T_DB_SEQ”中反映为数据库中的一行

第一 需要为需要建立序列的表创建一个序列 采用方法 F_create_SEQ(序列名) 该函数传入序列的名称 在表“T_DB_SEQ”插入一行 序列的所有者 采用系统变量SYSTEM_USER

第二 获取下一个值 采用方法 F_GET_NEXT_SEQ_VAL(序列名) 该函数根据序列名获取该序列的下一个值 根据当前值与增长步长得到 同时 该函数保证在同时获取同一个序列时 应保证并发一致性

第三 将返回值返回到应用使用

此外 为保证应用的完整性 可能还需要提供一些方法的重载方法 同时提供一些其他方法

获取序列当前值 F_GET_SEQ_CUR_VAL(序列名)

设置序列值 F_SET_SEQ_VAL(序列名)

删除序列 F_DEL_SEQ(序列名)

判断序列是否存在 F_SEQ_exists(序列名)

在主从关系的表设计中 子表也使用序列字段作为唯一主键 将父表的序列字段作为外键关联

create TABLE T_PK_DEMO_C ( U_ID  BIGINT NOT NULL –唯一标识记录的ID COL_OTHER VARchar( ) NOT NULL –其他列 P_ID  INT NOT NULL –父表ID CONSTRAINT PK_T_PK_DEMO_C PRIMARY KEY NONCLUSTERED (U_ID)–定义为主键 CONSTRAINT FK_T_PK_DEMO_C FOREIGN KEY (P_ID) REFERENCES T_PK_DEMO(U_ID) ON delete CASCADE )

使用序列的问题及解决办法

由于系统使用一个额外增加一个字段作为主键 因此没有为业务逻辑建立主键约束 比如在企业用户信息表中 要求企业中用户登录名必须唯一 一般在创建表时 以登录名作为主键 这个时候在数据库层自然的创建另一个主键唯一性约束 而现在没有使用登录名作为主键 那么就没有这个约束 解决办法

一是在数据库层解决 可以为该表创建一个唯一(UNIQUE)约束或者唯一索引 如

alter TABLE T_PK_DEMO ADD CONSTRAINT C_T_PK_DEMO UNIQUE NONCLUSTERED(COL_OTHER) 唯一约束

create UNIQUE INDEX IX_T_PK_DEMO ON T_PK_DEMO(COL_OTHER) – 唯一索引

二是在应用端解决 也就是在应用中判断该列是否有重复值 然后根据判断结果来保证唯一性

我们注意到 在之前的例子中 主键采用了NONCLUSTERED(非聚蔟)的索引方式 关于如何设计索引 不是本文的重点 在这里仅提供一个建立索引时采用聚蔟方式还是非聚蔟方式的一个一般原则

作为非业务字段的主键列 是一个没有重复值的 基本不进行更新 *** 作的列 并且 在SQL Server数据库中 聚蔟索引在一个表中只能有一个 因此 聚蔟索引非常重要 需要留给更重要的字段来使用 因此 对照上表和根据聚蔟索引的重要程度 在此处采用非聚蔟方式创建其索引

具体应用

采用这种主键设计方式 有诸多好处 这已经在前文说明 现在就以一个具体的应用来说明如何使用这个主键

lishixinzhi/Article/program/SQLServer/201311/22342

1是作为生物信息学最重要的专门期刊了。2012年度IF=5468

2另外还有Briefingsin,这个杂志每年的发稿量少,最近几年IF波动很大,第一年24,后来到9,2012年度IF=5202。

3稍次一点的杂志,如BMC,也是生物信息学的专刊。2012年度IF=3447

4对于计算向的生物信息学,PLOSBiology是一个很好的期刊。2012年度IF=5215

5除此之外,NatureMethod,也会有生物信息学相关的方法发表。2012年度IF=19276

生物信息学相关的文章不一定要发到专门的生物信息学杂志,因为生物信息学作为一个工具,已经融入到很多生物问题的研究中,而不仅仅是一门孤立的学科了。

PLOSBiology也是很好的杂志,2012年度IF=11452。PLOSOne也会经常有生物信息学文章,但被批灌水太多,算不得牛刊,2012年度IF=4092。

两个方法:

1,重新创建一个表,然后创建一个序列,把老数据导入新表,删除老表,修改新表名字为老表

2,直接在原来表上增加一个字段,创建一个序列,通过更新的方式修改老数据的这个字段。

具体 *** 作主要是2点,首先是创建一个序列名sequence;

然后是,insert语句的时候:将自增的字段的位置,写成序列名nextval。

从创建表开始,然后创建sequence,到insert语句

1首先创建表

CREATE TABLE "FLOWCAL""T_USERINFO"

( "C_ID" NUMBER(,0),

"C_USER" VARCHAR2(20 BYTE),

"C_PASSWORD" VARCHAR2(20 BYTE),

"C_ROLE" VARCHAR2(20 BYTE),

"C_COMMENT1" VARCHAR2(20 BYTE),

"C_COMMENT2" VARCHAR2(20 BYTE)

)

现在想让C_ID自增一。

2首先创建一个oracle的sequence,sql语句如下:

create sequence 序列名

increment by 1

start with 1

maxvalue 999999999

cycle;

建立一个最小为1,最大为999999999的一个序列号会自动循环的序列

下面的sequence,如下:

CREATE SEQUENCE "FLOWCAL""SEQ_USERINFO"

MINVALUE 0

MAXVALUE 9999999999999999999999999999

INCREMENT BY 1

START WITH 24

CACHE 20

ORDER

CYCLE ;

3通过序列名nextval实现插入时,字段的自增一

当向表中插入数据时,SQL语句写法如下:

SQL> insert into 表名 values(,列1值,列2值,);

"序列名"可以替换为自己需要的名字

下面insert语句:

insert into T_USERINFO values(SEQ_USERINFONEXTVAL,'111','11','11','11','11')

方法1:最长ORF法

将每条链按6个读码框全部翻译出来,然后找出所有可能的不间断开放阅读框(ORF),只要找出序列中最长的ORF,就能相当准确地预测出基因。最长ORF法发现基因的一般过程(包括基因区域预测和基因功能预测2个层次):

步骤1:获取DNA目标序列

① 如果已有目标序列,可直接进入步骤2;

② 可以通过PubMed查找感兴趣的资料,通过GenBank或EMBL等数据库查找目标序列。

步骤2:查找ORF并将目标序列翻译成蛋白质序列

利用相应工具,如ORF Finder、Gene feature (Baylor College of Medicine)、GenLang (University of Pennsylvania)等查找ORF并将DNA序列翻译成蛋白质序列。

步骤3:在数据库中进行序列搜索

利用BLAST进行ORF核苷酸序列和ORF翻译的蛋白质序列搜索。

步骤4:进行目标序列与搜索得到的相似序列的全局比对(global alignment)

虽然步骤3已进行局部比对(local alignment)分析,但全局比对有助于进一步加深对目标序列的认识。

步骤5:查找基因家族

进行多序列比对(multiple sequence alignment),获得比对区段的基因家族信息。

步骤6:查找目标序列中的特定模序

分别在Prosite、BLOCK、Motif数据库中进行profile、模块(block)、模序(motif)检索。

步骤7:预测目标序列蛋白质结构

利用PredictProtein(EMBL)、NNPREDICT(University of California)等预测目标序列的蛋白质二级结构。

步骤8:获取相关蛋白质的功能信息

为了了解目标序列的功能,收集与目标序列和结构相似蛋白质的功能信息非常必要。可利用PubMed进行搜索。

方法2:利用编码区与非编码区密码子选用频率的差异进行基因预测

编码区的碱基组成不同于非编码区,这是由于蛋白质中20种氨基酸出现的概率、每种氨基酸的密码子兼并度和同一种氨基酸的兼并密码子使用频率不同(即密码子偏好)等原因造成的。该方法是目前各种预测程序中广泛应用的一种方法,如GCG(Genetic Computer Group研制的核酸、蛋白质分析软件包)的TestCode和Baylor Medcine College的BCM Gene Finder等程序均利用了这一方法。

方法3:利用ESTs预测基因

Expressed Sequence Tags (ESTs) 代表基因序列,若DNA序列和 EST严格匹配,这段DNA序列属于基因或假基因。此法对ESTs进行聚类和拼接,聚类和拼接的目的就是将来自同一个基因或同一个转录本的具有重叠部分(over-lapping)的ESTs整合到单一的簇(cluster)中。通过聚类可产生较长的一致性序列(consensus sequence),降低数据的冗余,纠正错误数据,并最终得到基因的全长序列。

随着信息学方法在基因预测中的进一步充分应用,一批新的基因预测方法被相继提出,如人工神经网络、隐马尔可夫模型(Hidden Markov Model, HMM)、动态规划法(dynamic programming)、法则系统(ruled-based system)、线性判别分析(Linear Discriminant Analysis, LDA)、决策树(decision tree)、傅立叶分析(Fourier analysis)等。这些方法是基于编码区所具有的独特信号,如剪接的供体和受体位点、起始和终止密码子、启动子特征、转录因子结合位点等进行预测。相关的基因预测软件包括:Procrustes、GeneID、GenScan、GRAIL等。

以上就是关于oracle数据库和mysql数据库的区别全部的内容,包括:oracle数据库和mysql数据库的区别、如何利用网上数据库查找一种人源性蛋白的一级结构序列,并与小鼠的该同源蛋白序列进行比较、不知道引物序列怎么查等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9549593.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存