仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 886|回复: 7
打印 上一主题 下一主题

[学习教程] MYSQL网页编程之Oracle数据库表与视图

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:43:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
DBaaS向客户提供了许多与其他云服务相类似的优势:一个灵活的、可扩展的MySQL学习教程、按需服务的平台,它以自助服务和便捷管理为导向,可以对环境中的资源进行调配。oracle|视图|数据|数据库Oracle数据库数据工具中最基础的是表和视图,其他另有束缚、序列、函数、存储历程、包、触发器等。对数据库的操纵能够基础回结为对数据工具的操纵,了解和把握Oracle数据库工具是进修Oracle的捷径。

  表和视图

  Oracle中表是数据存储的基础布局。ORACLE8引进了分区表和工具表,ORACLE8i引进了一时表,使表的功效更壮大。视图是一个或多个表中数据的逻辑表达式。本文我们将会商如何创立和办理复杂的表和视图。

  办理表

  表能够看做有行和列的电子数据表,表是干系数据库中一种具有数据的布局。用CREATETABLE语句创建表,在创建表的同时,必需界说表名,列,和列的数据范例和巨细。比方:

CREATETABLEproducts
  (PROD_IDNUMBER(4),
   PROD_NAMEVAECHAR2(20),
   STOCK_QTYNUMBER(5,3)
  );
  如许我们就创建了一个名为products的表,关头词CREATETABLE后紧跟的表名,然后界说了三列,同时划定了列的数据范例和巨细。

  在创立表的同时你能够划定表的完全性束缚,也能够划定列的完全性束缚,在列上一般的束缚是NOTNULL,关于束缚的会商我们在今后举行。

  在创建或变动表时,能够给表一个缺省值。缺省值是在增添行时,增添的数据行中某一项值为null时,oracle即以为该值为缺省值。

  以下数据字典视图供应表和表的列的信息:

   .DBA_TABLES
   .DBA_ALL_TABLES
   .USER_TABLES
   .USER_ALL_TABLES
   .ALL_TABLES
   .ALL_ALL_TABLES
   .DBA_TAB_COLUMNS
   .USER_TAB_COLUMNS
   .ALL_TAB_COLUMNS

  表的定名划定规矩

  表名标识一个表,以是应尽量在表名中形貌表,oracle中表名或列名最长能够达30个字符串。表名应当以字母入手下手,能够在表名中包括数字、下划线、#、$等。

  从别的表中创建表

  可使用查询从基于一个或多个表中创建表,表的列的数据范例和巨细有查询了局决意。创建这类情势的表的查询能够选择其他表中一切的列大概只选择部排列。在CREATETABLE语句中利用关头字AS,比方:

SQL>CREATETABLEempASSELECT*FROMemployee

TABLECREATED

SQL>CREATETABLEYASSELECT*FROMXWHEREno=2
  必要注重的是假如查询触及LONG数据范例,那末CREATETABLE....ASSELECT....将不会事情。

  变动表界说

  在创建表后,偶然候我们大概必要修正表,好比变动列的界说,变动缺省值,增添新列,删除列等等。ORACLE利用ALTERTABLE语句来变动表的界说

  1、增添列

  语法:

ALTERTABLE[schema.]table_nameADDcolumn_definition
  例:

ALTERTABLEordersADDorder_dateDATE;

TABLEALTER
  关于已存在的数据行,新列的值将是NULL.

  2、变动列

  语法:

ALTERTABLE[schema.]table_nameMODIFYcolumn_namenew_attributes;
  例:

ALTERTABLEordersMODITY(quantitynumber(10,3),statusvarchar2(15));
  这个例子中我们修正了表orders,将STATUS列的长度增添到15,将QUANTITY列减小到10,3;

  修正列的划定规矩以下:

   .能够增添字符串数据范例的列的长度,数字数据范例列的精度。

   .削减列的长度时,该列应当不包括任何值,一切数据行都为NULL.

   .改动数据范例时,该列的值必需是NULL.

   .关于十进制数字,能够增添或削减但不克不及下降他的精度。

  3、删除数据列

  优化ORACLE数据库,独一的办法是删除列,从头创建数据库。在ORACLE8i中有良多办法删除列,你能够删除未用数据列大概能够标示该列为未用数据列然后删除。

  删除数据列的语法是:

ALTERTABLE[schema.]table_nameDROP{COLUMcolumn_names|(column_names)}[CASCADECONSTRAINS]
  要注重的是在删除列时关于该列的索引和完全性束缚也同时删除。注重关头字CASCADECONSTRAINS,假如删除的列是多列束缚的一部分,那末这个束缚前提相对其他列也同时删除。

  假如用户忧虑在年夜型数据库中删除列要花太多工夫,能够先将他们标志为未用数据列,标志未用数据列的语法以下:

ALTERTABLE[schema.]table_nameSETUNUSED{COLUMcolumn_names|(column_names)}[CASCADECONSTRAINS]
  这个语句将一个或多个数据列标志为未用数据列,但其实不删除数据列中的数据,也不开释占用的磁盘空间。可是,未用数据列在视图和数据字典中其实不显现,而且该数据列的称号将被删除,新的数据列可使用这个称号。基于该数据列的索引、束缚,统计等都将被删除。

  删除未用数据列的语句是:

ALTERTABLE[schema.]table_nameDROP{UNUSEDCOLUM|COLUMNCONTINUE}
删除表和变动表名

  删除表十分复杂,但它是一个不成逆转的举动。

  语法:

DROPTABLE[schema.]table_name[CASCADECONSTRAINTS]  
  删除表后,表上的索引、触发器、权限、完全性束缚也同时删除。ORACLE不克不及删除视图,或其他程序单位,但oracle将标示他们有效。假如删除的表触及援用主键或独一关头字的完全性束缚时,那末DROPTABLE语句就必需包括CASCADECONSTRAINTS子串。

  变动表名

  RENAME命令用于给表和其他数据库工具更名。ORACLE体系主动将基于旧表的完全性束缚、索引、权限转移到新表中。ORACLE同时使一切基于旧表的数据库工具,好比视图、程序、函数等,为分歧法。

  语法:

RENAMEold_nameTOnew_name;
  例:

SQL>RENAMEordersTOpurchase_orders;

TABLERENAMED

  截短表

  TRUNCATE命令与DROP命令类似,但他不是删除全部数据表,以是索引、完全性束缚、触发器、权限等都不会被删除。缺省情形下将开释部分表和视图空间,假如用户不但愿开释表空间,TRUNCATE语句中要包括REUSESTORAGE子串。TRUNCATE命令语法以下:

TRUNCATE{TABLE|CLUSTER}[schema.]name{DROP|REUSESTORAGE}
  例:

SQL>TRUNCATETABLEt1;

TABLEtruncate.
  办理视图

  视图是一个或多个表中的数据的简化形貌,用户能够将视图当作一个存储查询(storedquery)或一个假造表(virtualtable).查询仅仅存储在oracle数据字典中,实践的数据没有寄存在任何别的中央,以是创建视图不必损耗其他的空间。视图也能够埋没庞大查询,好比多表查询,但用户只能瞥见视图。视图能够有与他所基于表的列名分歧的列名。用户能够创建限定其他用户会见的视图。

  创建视图

  CREATEVIEW命令创立视图,界说视图的查询能够创建在一个或多个表,或其他视图上。查询不克不及有FORUPDATE子串,在初期的ORACLE8i版本中不撑持ORDERBY子串,如今的版本中CREATEVIEW能够具有ORDERBY子串。

  例:

SQL>CREATEVIEWTOP_EMPAS
SELECTempnoEMPLOYEE_ID,enameEMPLOYEE_NAME,salary
FROMemp
WHEREsalary>2000
  用户能够在创立视图的同时变动列名,办法是在视图名后当即加上要定名的列名。从头界说视图必要包括ORREPLACE子串。

SQL>CREATEVIEWTOP_EMP
(EMPLOYEE_ID,EMPLOYEE_NAME,SALARY)AS
SELECTempno,ename,salary
FROMemp
WHEREsalary>2000
  假如在创立的视图包括毛病在一般情形下,视图将不会被创立。但假如你必要创立一个带毛病的视图必需在CREATEVIEW语句中带上FORCE选项。如:

CREATEFORCEVIEWORDER_STATUSAS
SELECT*FROMPURCHASE_ORDERS
WHERESTATUS=APPPOVE;

SQL>/

warning:Viewcreatewithcompilationerrors
  如许将创立了一个名为ORDER_STATUS的视图,但如许的视图的形态是分歧法的,假如今后形态产生变更则能够从头编译,其形态也酿成正当的。

  从视图中取得数据

  从视图中取得数据与从表中取得数据基础一样,用户能够在毗连和子查询中利用视图,也能够利用SQL函数,和一切SELECT语句的字串。

  拔出、更新、删除数据

  用户在必定的限定前提下能够经由过程视图更新、拔出、删除数据。假如视图毗连多个表,那末在一个工夫里只能更新一个表。一切的能被更新的列能够在数据字典USER_UPDATETABLE_COLUMNS中查到。

  用户在CREATEVIEW中可使用了WITH子串。WITHREADONLY子串暗示创立的视图是一个只读视图,不克不及举行更新、拔出、删除操纵。WITHCHECKOPTION暗示能够举行拔出和更新操纵,但应当满意WHERE子串的前提。这个前提就是创立视图WHERE子句的前提,好比在下面的例子顶用户创立了一个视图TOP_EMP,在这个视图顶用户不克不及拔出salary小于2000的数据行。

  删除视图

  删除视图利用DROPVIEW命令。同时将视图界说从数据字典中删除,基于视图的权限也同时被删除,其他触及到该视图的函数、视图、程序等都将被视为不法。

  例:

DROPVIEWTOP_EMP;
这些过程被存储和运行在数据库服务器上,以减少在客户端的处理过程,从而最大限度地提高了处理能力,因为通常情况下数据库服务器会运行地更快。存储过程并不是MySQL独有的功能,但是这个最近新增加的功能使得这个数据库比以前更具吸引力了。
乐观 该用户已被删除
沙发
发表于 2015-1-28 07:58:19 | 只看该作者
备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
活着的死人 该用户已被删除
板凳
发表于 2015-2-5 14:07:56 | 只看该作者
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
金色的骷髅 该用户已被删除
地板
发表于 2015-2-12 03:27:12 | 只看该作者
也可谈一下你是怎么优化存储过程的?
精灵巫婆 该用户已被删除
5#
发表于 2015-3-2 21:48:05 | 只看该作者
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
小女巫 该用户已被删除
6#
发表于 2015-3-11 06:38:56 | 只看该作者
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
谁可相欹 该用户已被删除
7#
发表于 2015-3-17 22:48:43 | 只看该作者
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
8#
发表于 2015-3-25 04:49:22 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 12:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表