Oracleѧϰ±Ê¼Ç ÏÂÔر¾ÎÄ

Îð´«ÍøÉÏ£¡ÑϽûıÀû£¡ Oracleѧϰ±Ê¼Ç

³£Ñ岩

Ê®Æß¡¢ÊÂÎñ

17.1 transaction

½»Ò×£¬ÊÂÎñ£»£¨Ò»±Ê£©½»Ò×£¬£¨Ò»ÏÊÂÎñ¡£

client¶Ë½¨Á¢Á¬½Ó connect jsd1304/jsd1304(sqlplus/sql developer/jdbc) DDL²Ù×÷£º create table (column ÁÐ datatype Êý¾ÝÀàÐÍ constraintÔ¼Êø)£» alter table ¶ÔÁС¢Ô¼ÊøµÈµÄ²Ù×÷ drop table cascade constraint purge; DML²Ù×÷£ºinsert¡¢update¡¢delete TCL²Ù×÷£ºcommit¡¢rollback£¬Êý¾Ý²ÅÕæÕýÈë¿â table:account column id,balanceÓà¶î row£ºA B update account set balance = balance-1000 where id='A'; update account set balance = balance+1000 where id='B'; ½»Ò×£º°üº¬2¸öupdate£¬Ò»±Ê½»Ò×Ó¦¿´×÷Ò»¸öÔ­×Ó²Ù×÷£ºÒª×öÒ»Æð×÷£¬ÒªÃ´¶¼²»×÷ ÕÊƽ£¬²»Êǵ¥ÌõDML£¬¶øÊÇÒ»×éDML+commin¡¢rollback£¨transaction£© 17.2¶¨Òå ÊÂÎñÊÇÓÉÒ»×éDMLÓï¾äºÍcommit/rollback(TCL)×é³É£¬ÊǸıäÊý¾Ý¿âÊý¾ÝµÄ×îСÂß¼­µ¥Ôª¡£ 1£©Èç¹ûÊÇcommit£¬±íʾÊý¾ÝÈë¿â£»Èç¹ûÊÇrollback£¬±íʾȡÏûËùÓеÄDML²Ù×÷¡£ 2£©ÊÂÎñµÄ½áÊø£ºcommin/rollback£¬DDLÓï¾ä×Ô¶¯Ìá½»£¬DMLÒ»¶¨ÒªÓÐÏÔʽcommit¡£ÓóÌÐò´«Êý¾ÝÈë¿âÒ²Òª´«Ò»¸öÊÂÎñ£¡ 3£©ÊÂÎñµÄ¿ªÊ¼£ºÉÏÒ»¸öÊÂÎñµÄ½áÊø¾ÍÊÇÏÂÒ»¸öÊÂÎñµÄ¿ªÊ¼¡£ ? ×¢ÒâÊÂÏÎÒÃÇ´«Ë͵ÄÊÇÒ»¸öÊÂÎñ£¬¶ø²»ÊǼòµ¥µÄDMLÓï¾äÁË£¡Êý¾Ý¿âÖÐÒ²¶¼ÊÇÒ»¸ö¸öÊÂÎñ¡£Çмǣ¡£¡ 17.3ÊÂÎñµÄÌØÐÔ£ºACID 1£©Ô­×ÓÐÔ£¨atomicity£©£ºÒ»¸öÊÂÎñ»òÕßÍêÈ«·¢Éú£¬»òÕßÍêÈ«²»·¢Éú¡£ÓÉDMLºÍTCL¹²Í¬Íê³ÉµÄ£¡£¡ 2£©Ò»ÖÂÐÔ£¨consistency£©£ºÊÂÎñ°ÑÊý¾Ý¿â´ÓÒ»¸öÒ»ÖÂ״̬ת±äµ½ÁíÒ»¸ö״̬¡£ 3£©¸ôÀëÐÔ£¨isolation£©£ºÔÚÊÂÎñÌύ֮ǰ£¬ÆäËûÊÂÎñ¾õ²ì²»µ½ÊÂÎñµÄÓ°Ïì¡£ 4£©³Ö¾ÃÐÔ£¨durability£©£ºÒ»µ©ÊÂÎñÌá½»£¬ËüÊÇÓÀ¾ÃµÄ¡£

17.4ÊÂÎñµÄ¸ôÀ뼶±ð

Êý¾Ý¿âÓ¦ÓóÌÐòÖÐ×î³£ÓõĸôÀ뼶±ð¡£

Read committed£ºÒ»¸öÊÂÎñÖ»¿ÉÒÔ¶ÁÈ¡ÔÚÊÂÎñ¿ªÊ¼Ö®Ç°Ìá½»µÄÊý¾ÝºÍ±¾ÊÂÎñÕýÔÚÐ޸ĵÄÊý¾Ý¡£

17.5Êý¾Ý¿â¿ª·¢µÄ¹Ø¼üÌôÕ½

ÔÚ¿ª·¢¶àÓû§¡¢Êý¾Ý¿âÇý¶¯µÄÓ¦ÓóÌÐòÖУ¬¹Ø¼üÐÔµÄÌôÕ½Ö®Ò»ÊÇҪʹ²¢ÐеķÃÎÊÁ¿´ïµ½

35

Îð´«ÍøÉÏ£¡ÑϽûıÀû£¡ Oracleѧϰ±Ê¼Ç

×î´ó»¯£¬Í¬Ê±»¹Òª±£Ö¤Ã¿Ò»¸öÓû§£¨»á»°£©¿ÉÒÔÒÔÒ»Öµķ½Ê½¶ÁÈ¡²¢ÐÞ¸ÄÊý¾Ý¡£

1£©Ëø£¨lock£©»úÖÆ£ºÓÃÀ´¹ÜÀí¶ÔÒ»¸ö¹²Ïí×ÊÔ´µÄ²¢ÐзÃÎÊ 2£©¶à°æ±¾Ò»Ö¶Á£º

¢Ù·Ç×èÈû²éѯ£ºÐ´²»×èÈû¶Á£¬¶Á²»×èÈûд ¢ÚÒ»Ö¶Á²éѯ£ºÔÚijһʱ¿Ì²éѯ²úÉúÒ»Ö½á¹û

³£Ñ岩

17.6ËøµÄ¸ÅÄî

1£©ÅÅËûËø£¨XËø£©£ºÈç¹ûÒ»¸ö¶ÔÏóÉϼÓÁËXËø£¬ÔÚÕâ¸öËø±»²ÉÓúó£¬Ö±µ½commit»òrollbackÊÍ·ÅËü֮ǰ£¬¸Ã¶ÔÏóÉϲ»ÄÜÊ©¼ÓÈκÎÆäËûÀàÐ͵ÄËø¡£

2£©¹²ÏíËø£¨SËø£©£ºÈç¹ûÒ»¸ö¶ÔÏó±»¼ÓÉÏÁËSËø£¬¸Ã¶ÔÏóÉÏ¿ÉÒÔ¼ÓÆäËûÀàÐ͵ÄSËø£¬µ«ÊÇ£¬ÔÚ¸ÃËøÊÍ·Å֮ǰ£¬¸Ã¶ÔÏó²»Äܱ»¼ÓÈκÎÆäËûÀàÐ͵ÄXËø¡£

17.7 OracleµÄËø»úÖÆ

Ϊȷ±£²¢·¢Óû§ÄÜÕýȷʹÓÃÓë¹ÜÀí¹²Ïí×ÊÔ´£¬Èç±íÖеļǼ£¬OracleÒý½øËø»úÖÆ¡£ 1£©¶Ô±íµÄÊý¾Ý½øÐÐд²Ù×÷ʱ£¬ÏµÍ³»á×Ô¶¯¼ÓÁ½À࣬¹²3ÖÖËø¡£ ¢ÙDMLËø£ºÓÃÓÚ±£»¤Êý¾ÝµÄÍêÕûÐÔ£¬»á¼ÓÒÔÏÂÁ½ÖÖËø£¨¶ÔDML²Ù×÷¶øÑԵģ¬ÓÃÅŶӻúÖÆwait£©¡£

TXËø£º¼´ÊÂÎñËø£¨Ðм¶Ëø£©£¬ÀàÐÍΪXËø£»²Ù×÷ÄÄÐмǼ¾Í¼ÓÅÅËûËø TMËø£º¼´ÒâÏòËø£¨±í¼¶Ëø£©£¬ÊôÓÚÒ»ÖÖSËø£»²Ù×÷Äĸö±í¾Í¼Ó¹²ÏíËø

? ×¢ÒâÊÂÏ

? ²»Ìá½»£¬Ëø²»»á±»ÊÍ·Å£¡¾Í»á°Ñ±ðÈ˶ÂÈûס£¡

? ²»Ìá½»£¬Ëø²»»á±»ÊÍ·Å£¡±ðÈËÒ²¿´²»µ½Äã¶ÔÊý¾ÝµÄ²Ù×÷¡£ ? selectÓï¾äÊǶÁ²Ù×÷£¬Ã»ÓÐÉÏËø¡£ ¢ÚDDLËø£ºÓÃÓÚ±£»¤Êý¾Ý¿â¶ÔÏóµÄ½á¹¹£¨ÀýÈç±í¡¢Ë÷ÒýµÄ½á¹¹¶¨Ò壩£¨ÕýÔÚд²Ù×÷

ʱ£¬²»¿ÉÐ޸ıíµÄ½á¹û£¬·ñÔòÖ±½Ó±¨´íerror£©¡£ XÀàÐ͵ÄDDLËø£ºÕâЩËø¶¨·ÀÖ¹ÆäËûµÄ»á»°£¬×Ô¼º»ñµÃDDLËø¶¨»òTM£¨DML£©

Ëø¶¨¡£ÕâÒâζ×Å¿ÉÒÔÔÚDDLÆä¼ä²éѯһ¸ö±í£¬µ«²»¿ÉÒÔÒÔÈκη½Ê½½øÐÐÐ޸ġ£

? ×¢ÒâÊÂÏ³öÏÖwaitºÍno wait£¨¼´DDL±¨´í£©¶¼ÊÇÒòΪ²»ÄÜÔÙ¼ÓXËøµ¼Öµġ£

17.8ÊÂÎñ²»Ìá½»µÄºó¹û

1£©ÆäËûÊÂÎñ¿´²»¼ûËüµÄ²Ù×÷½á¹û¡£ 2£©±íºÍÐÐÉϵÄËø²»ÊÍ·Å£¬»á×èÈûÆäËûÊÂÎñµÄ²Ù×÷¡£ 3£©ËüËù²Ù×÷µÄÊý¾Ý¿ÉÒÔ»Ö¸´µ½Ö®Ç°µÄ״̬¡£

4£©Õ¼ÓõĻعö¶Ë×ÊÔ´²»ÊÍ·Å£¬rollback segment/undo segment»á¹ö¶Î£¨¹«¹²¿Õ¼ä£©¡£

17.9»Ø¹öÊÂÎñrollback 1£©Êý¾ÝµÄ¸Ä±ä¾ÍÏñ´Óδ·¢Éú¹ýÒ»Ñù

2£©²åÈëµÄÊý¾ÝûÓÐÁË£¬¸üÐÂÇ°ºÍɾ³ýÇ°µÄÊý¾Ý¶¼»Ö¸´³öÀ´¡£

3£©Ëø±»ÊÍ·Å¡£

17.10±£Áôµãsavepoint

ÓÃsavepointÔÚµ±Ç°ÊÂÎñÀï´´½¨Ò»¸ö±£Áôµã£¬ÓÃrollback to savepointÃüÁÊÂÎñ»Ø¹öµ½±ê¼Çµã¡£ SQL>insert??; savepoint created. SQL>insert??; 36

SQL>update??; SQL>savepoint update_done; rollback complete. SQL>rollback to update_done; Îð´«ÍøÉÏ£¡ÑϽûıÀû£¡ Oracleѧϰ±Ê¼Ç

³£Ñ岩

Ê®°Ë¡¢Êý¾Ý¿â¶ÔÏó£ºÊÓͼview

18.1´ø×Ó²éѯµÄcreate table

create table tabname[column(,column?)] as subquery;

1£©¸ù¾Ý×Ó²éѯÓï¾ä´´½¨±í²¢²åÈëÊý¾Ý£¨¸ù¾ÝÒÑÓÐµÄ±í´´½¨ÐÂ±í£©¡£

2£©±í½á¹¹ÓÉ×Ó²éѯµÄselectÓï¾ä¾ö¶¨£¬create tableÖ¸¶¨µÄÁеÄÊýÁ¿Òª¸úselectÓï¾äÖ¸¶¨µÄÁеÄÊýÁ¿Ò»Ö¡£

3£©create table ¶¨ÒåÁÐÖ»Äܶ¨ÒåÁÐÃû¡¢È±Ê¡Öµ¡¢ÍêÕûÐÔÔ¼Êø£¬²»Äܶ¨ÒåÊý¾ÝÀàÐÍ¡£ 4£©Ô¼Êø²»Äܱ»¸´ÖƹýÀ´£¬µ«·Ç¿ÕÔ¼Êø²»ÐèÒª¶¨Òå¿ÉÒÔÖ±½Ó¸´ÖƹýÀ´¡£

eg1:20»úÆ÷ÉϵÄÒµÎñÐÅÏ¢ create table service_20 as select * from service where unix_host='192.168.0.20'; eg2£º´´½¨Ò»Õűíaccount_90£¬±í½á¹¹ÓëaccountÒ»Ö£¬Ã»ÓÐÊý¾Ý create table account_90 as select * from account where 1 = 2 ; ? ×¢ÒâÊÂÏwhere 1=2;ÊÇͨÓõģ¬ËùÒԼǼ²»·ûºÏÌõ¼þ£»Èô×Ó²éѯµÄ·µ»Ø¼Ç¼ÊýΪ0£¬Ð½¨µÄ±í¾ÍÖ»Óнṹ¡£1 = 2ÊÇÓÀ¼Ùʽ£¬ÈÎºÎ±í¶¼²»»á·µ»Ø¼Ç¼¡£where 1=1;ËùÓмǼ·ûºÏÌõ¼þ 18.2´ø×Ó²éѯµÄinsert insert into new_tab(colname1,colname2,?colnamen) select colname1,colname2,?colnamen from old_tab where condition; 1£©¸ù¾Ý×Ó²éѯÓï¾äÏò±íÖвåÈëÊý¾Ý¡£ 2£©insertÖ¸¶¨µÄÁеÄÊýÁ¿Òª¸úselectÓï¾äÖ¸¶¨µÄÁеÄÊýÁ¿Ò»Ö¡£ 3£©Ò»´Î¿ÉÒÔ²åÈë¶àÌõ¼Ç¼£¬²»ÄÜÓÃvalues×Ӿ䡣 ? ×¢ÒâÊÂÏÈô²åÈë¶à¸öÁУ¬ÔòÐèÒª°ÑËùÓеķǿÕÁж¼Ñ¡³ö£¬·ñÔò±¨´í£¬ÒòΪ·Ç¿ÕÔ¼ÊøÖ±½Ó¸´ÖƹýÀ´ÁË¡£ eg£ºaccount_90±íÖаüº¬ËùÓеÄ90ºó¿Í»§ insert into account_90_chang select * from account where to_char(birthdate,'yyyy') between 1990 and 1999; 18.3¶¨Òåȱʡֵ£ºdefault

?colname date default sysdate,?

1£©È±Ê¡ÖµµÄÊý¾ÝÀàÐͱØÐëÆ¥ÅäÁеÄÊý¾ÝÀàÐÍ¡£

2£©ÓÐЧµÄȱʡֵΪÎÄ×ÖÖµ£¬±í´ïʽ¡¢sqlº¯Êý£ºsysdate¡¢userµÈ¡£ 3£©ÎÞЧµÄȱʡֵΪÁíÒ»¸öÁеÄÁÐÃû»òαÁС£ 4£©default¿ÉÒÔÓÃÓÚinsertÓï¾ä¡¢updateÓï¾ä¡£

? ×¢ÒâÊÂÏinsertÓï¾ä¡¢updateÓï¾ä¶¼¿Éд·Ç¹ØÁª×Ô²éѯ¡£ eg1£º°¸Àý1 drop table test purge; create table test( c1 number default 1,c2 number);

37

Îð´«ÍøÉÏ£¡ÑϽûıÀû£¡ Oracleѧϰ±Ê¼Ç

insert into test (c2) values (2); insert into test values (default,3); eg2£º°¸Àý2 insert into test values (4,4); update test set c1 = default where c1=4;°Ñc1ÁеÈÓÚ4µÄ¶¼»»³ÉĬÈÏÖµ ³£Ñ岩

18.4 ÊÓͼview

1£©ÊÓͼÔÚÊý¾Ý¿âÖв»´æ´¢Êý¾ÝÖµ£¬¼´²»Õ¼¿Õ¼ä¡£ 2£©Ö»ÔÚϵͳ±íÖд洢¶ÔÊÓͼµÄ¶¨Òå¡£ 3£©ÊÓͼʵ¼Ê¾ÍÊÇÒ»ÌõselectÓï¾ä¡£ 4£©ÀàËÆwindowsÖеĿì½Ý·½Ê½¡£

? ×¢ÒâÊÂÏ¶ÔÏóÀàÐͶ¼°´´óд´æ´¢µÄ£¬ËùÒÔ²éÕÒҲд´óд¡£ eg1£º´´½¨view create of replace view test_v1 as select * from test where c1=2 eg2£º²éÕÒview test_v1ÊÇÈçºÎ¶¨ÒåµÄ£¬ÕÒ¶ÔÓ¦µÄselectÓï¾ä select view_name,text from user_views where view_name = 'TEST_V1'; eg3£º²éÕÒview test_v1µ±Ç°µÄ״̬£¬ÈôΪinvalidÔòÔ´±í³öÎÊÌâÁË select object_name,object_type,status from user_objects where object_name = 'TEST_V1'; eg4£ºµ±ÊÓͼÎÞЧʱ alter view test_v1 compile; //µ±ÊÓͼÎÞЧʱ£¬³¢ÊÔÏȱàÒëÊÓͼ£¬Èô²»ÄܱàÒ룬ÔòÔ´±í²»´æÔÚ£¬Òª´´½¨±í¡£ create table test(c1 number,c2 number);//´Ëʱϵͳ²»»á×Ô¶¯±àÒë¡£ select * from test_v1;//µ±´ÓÊÓͼÖвéѯʱ£¬ÏµÍ³»á×öalter view test_v1 compile¼´±àÒë²Ù×÷£¬´ËʱÊÓͼ¾ÍÓÐЧÁË¡£ 18.5ÊÓͼµÄÓ¦Óó¡¾° 1£©¼ò»¯²Ù×÷£¬ÆÁ±ÎÁ˸´ÔÓµÄSQLÓï¾ä£¬Ö±½Ó¶ÔÊÓͼ²Ù×÷¡£ 2£©¿ØÖÆȨÏÞ£¬Ö»ÔÊÐí²éѯһÕűíÖеIJ¿·ÖÊý¾Ý¡£½â¾ö°ì·¨£º¶ÔÆä´´½¨ÊÓͼ£¬ÊÚÓèÓû§¶ÁÊÓͼµÄȨÏÞ£¬¶ø·Ç¶Á±íµÄȨÏÞ¡£ eg£ºÔÊÐíÊÚȨaccount±í²¿·ÖÊý¾Ý¸øjsd1304 create or replace view account_1304 as select * from account where Ìõ¼þ±í´ïʽ grant select on account_1304 to jsd1304; 3£©Í¨¹ýÊÓͼ½«¶àÕűíunion all³ÉÒ»ÕÅÂß¼­±í£¬×÷Ϊµ¥¶ÀÒ»¸öÊý¾Ý¿â¶ÔÏó£¬ÊµÏÖ±íµÄ³¬¼¯¡£

eg£ºÊý¾Ý¿âÖÐÓзÖÇø±í

table heap table¶Ñ±í£¬ÎÒÃǵ±Ç°ÓõÄÕâЩÎÞÐòµÄÒ»°ã±í table partition table·ÖÇø±í create table haidian create table haidian1 create table xicheng create table changping ??

38