php – Oracle Gotchas for a Experienced Newb
有些Oracle对于新的平台来说是一些棘手的问题,但对于关系型数据库( MySQL,MS SQL Server,Postgres等)来说并不是新鲜事. 我正在寻找的事情的两个例子 >许多关系数据库产品处理为您创建一个auto_increment密钥. Oracle不会,您必须手动创建序列,然后创建触发器 PHP相关的积分奖励,因为这是这个假设经验的newb将使用的平台. 注意:我只是在这里解释问题,即Oracle的行为不如其他系统那样. Oracle与其他RDBMS相比有许多优点,但它们不是该主题.>你不能没有FROM SELECT. SELECT 1 将失败,您需要: SELECT 1 FROM dual >空字符串和NULL是一样的. SELECT * FROM dual 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 这是个问题. SELECT * FROM ( SELECT * FROM mytable ORDER BY col ) WHERE rownum < 10 ,除非col被标记为NOT NULL. 注意,它不是没有索引的NULL值,而不是列.您可以在可空列中创建索引,非NULL值将进入索引. 但是,当查询条件假定NULL值可能满足它时,索引将不会被使用. 在上面的示例中,您希望返回所有值(包括NULL).那么索引不知道非NULL值,因此无法检索它们. 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 ,因为非NULL值不能满足条件. 这个查询: 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顺序(如上所述) SELECT * FROM mytable -- wihout quotes 将从前者中选出,而不是后者.如果前者不存在,查询将失败. CREATE TABLE mytable 创建“MYTABLE”而不是“mytable”. 作家绝对不会阻止读者(反之亦然). 要锁定整个表,您应该发出一个显式的LOCK TABLE语句. 行锁存储在数据页上. 在Oracle世界中,“集群存储”意味着组织几个表,以便共享公共密钥(来自多个表)的行也共享一个数据页. 单个数据页可以从多个表中托管多个行,这使得该键上的连接超级快速. (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |