子查询目标
子查询是一种把查询的结果作为参数返回给另一个查询的一种查询
子查询可以让你将多个查询绑定在一起
嵌套子查询
多层子查询
相关子查询
可接受外部的引用
exists/any/all
any:与子查询中的每一行与主查询进行比较 并对子查询中的每一行返回一个true值
some 结果与any一样
all 子查询结果都满足条件 才会返回true
DML
数据库插入
insert value
insert select
update update table set col=value
delete
DDL
创建和 *** 作表
create
存储参数 storage(initial size next size minextents value pctincrease value)初始分配空间 追加的长度 最小追加长度 每次追加的百分比或进行下一次追加
用已存在的表创建新表
create table new_t(num name amount) as(select from old_t where amount< )
alter
加入一列到已经存在的表中
修改已经存在的表中的某一列
ALTER TABLE BILLS MODIFY NAME CHAR( );将表中某字段改为长度 个字符
ALTER TABLE NEW_BILLS ADD MENTS CHAR( );向表中加一列
alter不能用于对一个数据库增加或删除字段 但可以将某列由not null改为null
drop
drop table table_name;
视图 常被称为虚表 create view 视图是一个数据库对象 他允许用户从一个表或一组表中建立一个 虚表 它本身没有数据 仅仅是一条查询语句 它可以方便的在各个表中进行联合查询 这对用户来说是很方便的 其次 可以增加安全性 屏蔽一些不想让无权限的用户看一些表中的数据即隐藏了基本表 这同时也可以隐藏着其中的复杂性 有时更改起来也很方便而不必涉及到应用程序 如一个表中有 列数据 我只想让其他用户看到 列 这时候视图就会显得十分方便 如表school 有ID name lesson三项 我只需要显示其中 项 实例如下
子查询目标 子查询是一种把查询的结果作为参数返回给另一个查询的一种查询子查询可以让你将多个查询绑定在一起嵌套子查询多层子查询相关子查询可接受外部的引用exists/any/allany:与子查询中的每一行与主查询进行比较 并对子查询中的每一行返回一个true值some 结果与any一样all 子查询结果都满足条件 才会返回true
DML 数据库插入 insert valueinsert selectupdate update table set col=valuedelete
DDL 创建和 *** 作表create存储参数 storage(initial size next size minextents value pctincrease value)初始分配空间 追加的长度 最小追加长度 每次追加的百分比或进行下一次追加用已存在的表创建新表 create table new_t(num name amount) as(select from old_t where amount< )alter 加入一列到已经存在的表中 修改已经存在的表中的某一列ALTER TABLE BILLS MODIFY NAME CHAR( );将表中某字段改为长度 个字符ALTER TABLE NEW_BILLS ADD MENTS CHAR( );向表中加一列alter不能用于对一个 数据库 增加或删除字段 但可以将某列由not null改为nulldropdrop table table_name;
创建视图和索引视图 常被称为虚表 create view 视图是一个数据库对象 他允许用户从一个表或一组表中建立一个 虚表 它本身没有数据 仅仅是一条查询语句 它可以方便的在各个表中进行联合查询 这对用户来说是很方便的 其次 可以增加安全性 屏蔽一些不想让无权限的用户看一些表中的数据即隐藏了基本表 这同时也可以隐藏着其中的复杂性 有时更改起来也很方便而不必涉及到应用程序 如一个表中有 列数据 我只想让其他用户看到 列 这时候视图就会显得十分方便 如表school 有ID name lesson三项 我只需要显示其中 项 实例如下
所以在适当的时候 十分有必要在众多表中建立视图
索引 索引是与磁盘上数据的存储方式不同的另外一组数据的方法 索引的特例是表中记录一句其在磁盘上的存储位置显示 索引可以在表内创建一个列或列的组合 通过对正确的 特定的两个表的归并字段进行索引可以获得明显的好处 create index
ps 视图和索引是两个完全不同的对象 但有一点是相同的 它们都与一个表或数据库相关联 尽管每一个对象只能与一个特定的表相关联 但它们还是通过对数据的预排序和预定义显著地提高了表的工作性能
使用视图 create view view_name(col col ……) as select table_name(col col ……) from table_name;
select规则 不能使用union 不能使用order by 但使用group by有其相同功能
DML的规则 对于多表视图不能使用delete
除非非空列都出现在视图中 否则不能使用insert
对于一个归并(merger)的表插入或更新 所有被更新的记录必须属于同一个物理表
如果创建视图时使用dintinct子句 就不能插入或更新这个视图
不能更新视图中 的虚拟列(它是用计算字段得到的)
删除视图:drop view view_name;
使用索引
索引可以让存储于磁盘上的数据进行重新排序
使用索引的原因 在使用unique关键字时前执行的保证数据的完整性
可以容易的用索引字段或其他字段进行排序
提高查询执行速度
索引的概念
两种方法从数据库中获得数据 顺序访问方式 需要sql检查每一个记录以找到与之匹配的 此法效率很低 但它是使记录准确定位的唯一方法 使用索引的的直接访问方式 sql采用树形结构来存储和返回所以数据 用以指示的数据存储在树的最末端(也就是叶子) 它们被称为结点(也可以叫叶 子) 每个结点中有一个指向其他结点的指针 结点左边的值只是它的双亲结点 结点右边的值则是孩子结点或叶子 sql将从根结点开始找到所需的数据
ps 当查询没有使用索引的表时 查询通常是全表搜索后才会得到结果 全表搜索会让数据库服务程序遍历过表中的所有记录然后返回给定条件的记录 索引可以让数据库服务程序快速的定位到表中的确定行
create index index_name on table_name(column_name [column_name ] );
SQL Server 和ORACLE允许你创建成簇的索引 Informix和ORACLE允许你指明列名是按升序排列还是按降序排列
使用索引不会对表中的物理存储造成影响
order by和索引的区别
使用order by子句时 每次运行它都需要重新进行排序 而使用索引时 数据库会建立一个物理索引对象(树结构) 每次运行查询时都访问同一个索引
当表被删除时 所有与之相关的索引也将被删除
使用索引的技巧
对于小表来说 使用索引对于性能不会有任何提高
当你的索引列中有极多的不同数据和空值时 索引会使性能有极大的提高
当查询要返回的数据很少时(少于全部数据的 %) 索引可以优化你的查询 如果要返回的数据很多时 索引会加大系统开销
索引可以提高数据的返回速度 但它使得数据的更新 *** 作变慢 (对记录和索引进行更新时请不要忘记先删除索引 当执行完更新 *** 作后 恢复索引即可 对于一次特定的 *** 作 系统可以保存删除的索引 个小时 在这个时间内数据更新完成后你可以恢复它 )
索引会占用数据库空间
可以提高归并速度
大多数数据库系统不允许对视图使用索引
不要对经常需要更新或修改的字段创建索引 否则会降低性能
不要将索引与表存储在同一个驱动器上 分开存储会去掉访问冲突从而使结果返回的更快
复合索引
对多个字段进行索引(一个索引包含多个列)
CREATE INDEX ID_CMPD_INDEX ON BILLS( ACCOUNT_ID AMOUNT );尽量将经常在查询中使用的字段放在最前边
复合索引的性能与单个字段的索引相比是无法判定的
创建索引时使用unique关键字
复合索引通常使用unique关键字来防止有相同数据的多个记录多次出现 (oracle 不支持 从 i开始支持)
索引与归并
当查询中使用了复杂的归并时 你的select语句会好用很长时间
在归并时对字段创建索引可以显著得提高查询反应速度 但创建太多的索引 会使性能下降而不是提高
作为一个规 则你应该对表中的唯一属性的字段或你用以归并 *** 作的字段来创建索引
群集(簇)的使用
当 使用群集索引时 数据在表中的物理排序方式会被修改 使用群集索引通常比传统的不使用群集索引速度要快 ORACLE 中群集的概念与此不同 当使用ORACLE 关系数据库系统时 群集就是一个像数据或表一样的对象 群集一般是存储了表的共有字段以提高对表的访问速度
oracle 的例子
CREATE CLUSTER [schema ]cluster (column datatype [ column datatype] )
[PCTUSED integer] [PCTFREE integer] [SIZE integer [K|M] ]
[INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace]
[STORAGE storage_clause] [!!under!!INDEX | [HASH IS column] HASHKEYS integer]
你随后创建的其于该表的群集的索引会被加入到群集中 然后把表也加入群集中 你应该只将经常需要归并的表加入到群集 不要向群集中加入只需要用简单的SELECT 语句进行个别访问的表
事务处理控制
事务控制
事务控制(事务处理)指关系数据库系统执行数据库事务的能力 (逻辑分组 它有自己的开始和结束)
事务 逻辑上必须完成的一命令序列的单位
单元工作期 事务的开始和结束时期
开始事务处理
SET TRANSACTION {READ ONLY | USE ROLLBACK SEGMENT segment}
可以在下列语句中使用READ ONLY选项 SELECT LOCK TABLE SET ROLE ALTER SESSION ALTER SYSTEM
有些数据库支持SET AUTOMIT [ON | OFF]
结束事务处理
MIT [WORK][ MENT text | FORCE text [ integer] ] ;
MIT (TRANSACTION | TRAN | WORK) (TRANSACTION_NAME)
取消事务处理
这必须是在MIT 之前 ROLLBACK 语句必须在一个事务之中运行 它可以一直撤消到事务的开始
在事务中使用保存点
SAVEPOINT savepoint_name;
ROLLBACK TO SAVEPOINT savepoint_name;
数据库安全
技巧要带着下边的问题去规划你数据库系统的安全性
谁应该得到数据库管理员权限?
有多少个用户需要访问数据库系统?
每个用户应该得到什么样的权限与角色
当一个用户不再访问数据库时应该如何去删除它
oracle使用三个结构来实现安全性 用户 角色 权限
用户
CREATE USER user
IDENTIFIED {BY password | EXTERNALLY}
[DEFAULT TABLESPACE tablespace]
[TEMPORARY TABLESPACE tablespace]
[QUOTA {integer [K|M] | UNLIMITED} ON tablespace]
[PROFILE profile]
如 果选择了EXTERNALLY 选项 ORACLE 将会依赖于你登录进入计算机系统的用户名和密码 也就是说当你登录进行计算机时你就已经登录进行了ORACLE 我们推荐你使用IDENTIFIED BY 子句强制用户在登录进行系统时输入密码IDENTIFIED BY PASSWORD
角色
GRANT role TO user [WITH ADMIN OPTION];
REVOKE role from user;
lishixinzhi/Article/program/Oracle/201311/16734
这篇文章主要介绍如何使用jdbc配置连接数据库(oracle的RAC配置的数据库)达到负载均衡的情况 该例子是以 个NODE的情况说明 希望对大家有所帮助
我的问题是我需要设置oracle x的thin客户端连接到oracle的RAC环境上
注:这样连接可以通过RAC自动平衡负载
原文如下:
Hi Tom
I couldn t find this information easily on the net So I m submitting it hereand hope you make it available for anyone else looking for this information
My problem was I needed to configure the Oracle x thin driver (type IV) toconnect to an Oracle Real Application Cluster (RAC) environment
For example assuming you have a database called RAC_DB with o nodes node and node
You would need to configure your tnsnames ora with the following information inthe following way:
RAC_DB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = node )(PORT = )) (ADDRESS = (PROTOCOL = TCP)(HOST = node )(PORT = )) (LOAD_BALANCE = yes) (FAILOVER = on) ) (CONNECT_DATA = (SERVICE_NAME = RAC_DB) (FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) (RETRIES = ) (DELAY = ) ) ) )
Now if you start a SQLPLUS session then you should see a connection on thenode instance If you start another SQLPLUS session then Oracle shouldconnect you to the node instance (automatic load balancing) It s actuallypretty cool to see the first time
To pass this same information to the Oracle s JDBC thin driver you essentiallyconcatenate a shorten version of the tnsnames information above and pass this tothe driver
String userid = scott ; String password = tiger ;
String tnsnames_info = (DESCRIPTION=(ADDRESS_LIST= + (ADDRESS=(PROTOCOL=TCP)(HOST=node )(PORT= )) + (ADDRESS=(PROTOCOL=TCP)(HOST=node )(PORT= )) + (LOAD_BALANCE=yes)(FAILOVER=on)) + (CONNECT_DATA=(SERVICE_NAME=rac_db))) ;
String url = jdbc:oracle:thin:@ + tnsnames_info;
DriverManager registerDriver(new oracle jdbc OracleDriver()); Connection dbConnection = DriverManager getConnection(url userid password);
That s it If your application creates multiple connection to the database then you should see these connections load balance across the o instances
One last note Oracle only supports connection to a RAC configuration with the i drivers so you should try to get the latest Oracle JDBC thin driver
HTH Peter
and we said
you made it really hard you just needed the service! the load balancing andall could be/should be setup on the listener side!
you have one listener both databases register with it as a service
that would be another option
Reviews
I think we tried that and it didn t work September Reviewer: Peter Tran from Houston TX USA
Hi Tom
I m pretty sure we tried that but it didn t work with the thin driver Thatapproach will work if you use the OCI driver but not with the thin driver
Please send me an example of what you mean or what files I should configure totest it out
I m always opened to easier options
Thanks Peter
Followup:you need to set up mts and a single listener thats it
pmon on each of the rac instances will tell the listener about the load and awayit goes you might not see the round robin right off (both are not yetloaded ) so it ll be an unbalanced load balance initially but as the systemramps it ll balance out
Unknown territory September Reviewer: Peter Tran from Houston TX USA
I m sorry but I really lost you with that last remendation Rather thanfrustrate you with my ignorance can you remend the Oracle documentation thatI should read to brush up on this information
I ll read this first and e back with questions if I m still lost
For example I don t understand why you want me to setup the database as MTS Why can t I use dedicated server mode
Thanks for the quick response
Peter
Followup:in order for a single listener to service many instances on differentmachines the listener must be servicing shared server connections thelistener cannot fork/exec a dedicated server since the listener may well notbe running on the machine the instance is on it needs to know dispatcheraddresses to redirect the client request to
lishixinzhi/Article/program/Oracle/201311/17131
以上就是关于oracle对表的基本 *** 作全部的内容,包括:oracle对表的基本 *** 作、关于JDBC客户端如何连接ORACLE数据库RAC的负载均衡、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)