Ala*_*orm 12 php mysql sql-server oracle postgresql
对于刚接触平台的人来说,Oracle有什么问题,但对于关系数据库(MySQL,MS SQL Server,Postgres等)来说并不陌生.
我正在寻找的那种事情的两个例子
许多关系数据库产品处理为您创建auto_increment键.Oracle没有,您必须手动创建序列,然后创建触发器
通过SQL Developer界面插入数据时,您必须手动提交数据
PHP相关问题的奖励积分,因为这是我假设有经验的newb将使用的平台.
Qua*_*noi 23
Oracle行为不像其他系统那样的情况.Oracle比其他RDBMS人有很多好处,但他们不是帖子的主题.你不能SELECT没有FROM.
SELECT 1
Run Code Online (Sandbox Code Playgroud)
会失败,你需要:
SELECT 1
FROM dual
Run Code Online (Sandbox Code Playgroud)空字符串和NULL是一样的东西.
SELECT *
FROM dual
WHERE '' = ''
Run Code Online (Sandbox Code Playgroud)
没有回报.
既没有TOP也没有LIMIT.您在WHERE条款中限制结果:
SELECT *
FROM (
SELECT *
FROM mytable
ORDER BY
col
)
WHERE rownum < 10
Run Code Online (Sandbox Code Playgroud)
正是这样,使用子查询,因为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
Run Code Online (Sandbox Code Playgroud)
这是个问题.
NULL值未编入索引.此查询不会使用索引进行排序:
SELECT *
FROM (
SELECT *
FROM mytable
ORDER BY
col
)
WHERE rownum < 10
Run Code Online (Sandbox Code Playgroud)
,除非col标记为NOT NULL.
请注意,它不是索引的NULL 值,而不是列.您可以在可空列上创建索引,非NULL值将进入索引.
但是,当查询条件假定NULL值可能满足它时,将不使用索引.
在上面的示例中,您希望返回所有值(包括NULLs).然后索引不知道非NULL值,因此无法检索它们.
SELECT *
FROM (
SELECT *
FROM mytable
ORDER BY
col
)
WHERE rownum < 10
Run Code Online (Sandbox Code Playgroud)
但是这个查询将使用索引:
SELECT *
FROM (
SELECT *
FROM mytable
WHERE col IS NOT NULL
ORDER BY
col
)
WHERE rownum < 10
Run Code Online (Sandbox Code Playgroud)
因为非NULL价值不能满足条件.
默认情况下,NULLs的最后排序,不是第一个(像PostgreSQL,但不像MySQL和SQL Server)
这个查询:
SELECT *
FROM (
SELECT 1 AS id
FROM dual
UNION ALL
SELECT NULL AS id
FROM dual
) q
ORDER BY
id
Run Code Online (Sandbox Code Playgroud)
将返回
id
---
1
NULL
Run Code Online (Sandbox Code Playgroud)
要有点像在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
Run Code Online (Sandbox Code Playgroud)
请注意,rownum除非后者未在子查询中使用(如上所述),否则它会中断顺序
"MYTABLE"和"mytable"(双引号)是不同的对象.
SELECT *
FROM mytable -- wihout quotes
Run Code Online (Sandbox Code Playgroud)
将从前者中选择,而不是从后者中选择.如果前者不存在,则查询将失败.
CREATE TABLE mytable
Run Code Online (Sandbox Code Playgroud)
创造"MYTABLE",而不是"mytable".
在Oracle,所有隐式锁(由DML操作产生)都是行级的,永远不会升级.也就是说,不受事务影响的行可以被隐式锁定.
作家永远不会阻止读者(反之亦然).
要锁定整个表,您应该发出一个显式LOCK TABLE语句.
行锁存储在数据页上.
在Oracle,没有" CLUSTERED索引",有"索引组织表".默认情况下,表是堆组织(不像SQL Server和MySQL带InnoDB).
在Oracle世界上,"集群存储"意味着组织多个表,以便共享公共密钥(来自多个表)的行也共享数据页.
单个数据页承载多个表中的多行,这使得此键上的连接速度非常快.
| 归档时间: |
|
| 查看次数: |
834 次 |
| 最近记录: |