PHP   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php – Oracle Gotchas for a Experienced Newb大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
有些Oracle对于新的平台来说是一些棘手的问题,但对于关系型数据库( MySQL,MS sql Server,POSTGRes等)来说并不是新鲜事.

我正在寻找的事情的两个例子

>许多关系数据库产品处理为您创建一个auto_increment密钥. Oracle不会,您必须手动创建序列,然后创建触发器
>当通过sql Developer界面插入数据时,必须手动提交数据

PHP相关的积分奖励,因为这是这个假设经验的newb将使用的平台.

注意:我只是在这里解释问题,即Oracle的行为不如其他系统那样. Oracle与其他RDBMS相比有许多优点,但它们不是该主题.

>你不能没有FROM SELECT.

SELECT  1

将失败,您需要:

SELECT  1
FROM    dual

>空字符串和NULL是一样的.

SELECT  *
FROM    dual
WHERE   '' = ''

没有回报.
>没有TOP或LIMIT.您将结果限制在WHERE子句中:

SELECT  *
FROM    (
        SELECT  *
        FROM    myTable
        ORDER BY
                col
        )
WHERE   rownum < 10

正是这样,使用子查询,因为ROWNUM在ORDER BY之前被评估.
>您无法将相关子查询嵌套多于一个级别.这将失败:

SELECT  (
        SELECT  *
        FROM    (
                SELECT  dummy
                FROM    dual di
                WHERE   di.dummy = do.dummy
                ORDER BY
                        dummy
                )
        WHERE   rownum = 1
        )
FROM    dual do

这是个问题.
> NULL值不被索引.此查询将不会使用索引进行排序:

SELECT  *
FROM    (
        SELECT  *
        FROM    myTable
        ORDER BY
                col
        )
WHERE   rownum < 10

,除非col被标记为NOT NULl.

注意,它不是没有索引的NULL值,而不是列.您可以在可空列中创建索引,@R_262_7128@将进入索引.

但是,当查询条件假定NULL值可能满足它时,索引将不会被使用.

在上面的示例中,您希望返回所有值(包括NULL).那么索引不知道@R_262_7128@,因此无法检索它们.

SELECT  *
FROM    (
        SELECT  *
        FROM    myTable
        ORDER BY
                col
        )
WHERE   rownum < 10

但这个查询将使用索引:

SELECT  *
FROM    (
        SELECT  *
        FROM    myTable
        WHERE   col IS NOT NULL
        ORDER BY
                col
        )
WHERE   rownum < 10

,因为@R_262_7128@不能满足条件.
>认情况下,NULL最后排序,而不是首先(如POSTGResql中,但与MysqLsql Server不同)

这个查询

SELECT  *
FROM    (
        SELECT  1 AS id
        FROM    dual
        union all
        SELECT  NULL AS id
        FROM    dual
        ) q
ORDER BY
        id

将返回

id
---
1
NULL

要像sql Server和MysqL一样排序,请使用:

SELECT  *
FROM    (
        SELECT  1 AS id
        FROM    dual
        union all
        SELECT  NULL AS id
        FROM    dual
        ) q
ORDER BY
        id NULLS FIRST

请注意,除非后者没有从子查询中使用,否则它会破坏rownum顺序(如上所述)
>“myTABLE”和“myTable”(双引号)是不同的对象.

SELECT  *
FROM    myTable -- wihout quotes

将从前者中选出,而不是后者.如果前者不存在,查询将失败.

create table myTable

创建“myTABLE”而不是“myTable”.
>在Oracle中,所有隐式锁(由DML操作产生的)都是行级,并且不会升级.那就是没有行不受事务的影响可以隐式锁定.

作家绝对不会阻止读者(反之亦然).

要锁定整个表,您应该发出一个显式的LOCK TABLE语句.

行锁存储在数据页上.
>在Oracle中,没有“CLUSTERED索引”,有“索引组织表”.认情况下,表是堆组织的(与InnoDB不同的是sql Server和MysqL).

在Oracle世界中,“集群存储”意味着组织几个表,以便共享公共密钥(来自多个表)的行也共享一个数据页.

单个数据页可以从多个表中托管多个行,这使得该键上的连接超级快速.

大佬总结

以上是大佬教程为你收集整理的php – Oracle Gotchas for a Experienced Newb全部内容,希望文章能够帮你解决php – Oracle Gotchas for a Experienced Newb所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:oraclephp