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

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

create or replace view beijing as select * from haidian union all select * from haidian1 union all select * from xicheng union all select * from changping eg£ºÃ¿¸ö¿Í»§Ñ¡ÔñÁËÄÄЩ×ʷѱê×¼ ·½Ê½Ò»£º create or replace view cost_account_service as select a.real_name,s.unix_host,c.name from account a join service s on a.id=s.account_id join cost c on s.cost_id=c.id; ·½Ê½¶þ£º create or replace view cost_account_service as select a.real_name,s.unix_host,c.name from account a left join service s on a.id=s.account_id left join cost c on s.cost_id=c.id; ·½Ê½Èý£º create or replace view cost_account_service as select a.real_name,t.unix_host,t.name from account a left join (select s.account_id,s.unix_host,c.name from service s join cost c on s.cost_id = c.id) t on a.id = t.account_id; ³£Ñ岩

18.6ÊÓͼµÄ·ÖÀà 1£©¼òµ¥ÊÓͼ£º»ùÓÚµ¥ÕÅ±í²¢ÇÒ²»°üº¬º¯Êý»ò±í´ïʽµÄÊÓͼ£¬ÔÚ¸ÃÊÓͼÉÏ¿ÉÒÔÖ´ÐÐDMLÓï¾ä£¨¼´¿ÉÖ´ÐÐÔö¡¢É¾¡¢¸Ä²Ù×÷£©¡£ 2£©¸´ÔÓÊÓͼ£º°üº¬º¯Êý¡¢±í´ïʽ»òÕß·Ö×éÊý¾ÝµÄÊÓͼ£¬ÔÚ¸ÃÊÓͼÉÏÖ´ÐÐDMLÓï¾äʱ±ØÐëÒª·ûºÏÌØ¶¨Ìõ¼þ¡£ ÔÚ¶¨Ò帴ÔÓÊÓͼʱ±ØÐëΪº¯Êý»ò±í´ïʽ¶¨Òå±ðÃû¡£

3£©Á¬½ÓÊÓͼ£º»ùÓÚ¶à¸ö±í½¨Á¢µÄÊÓͼ£¬Ò»°ãÀ´Ëµ²»»áÔÚ¸ÃÊÓͼÉÏÖ´ÐÐinsert¡¢update¡¢delete²Ù×÷£¨¼´²»¿É½øÐÐDML²Ù×÷£©¡£

18.7ÊÓͼµÄά»¤

1£©ÊÓͼÖеÄwith check optionÔ¼Êø

create or replace view test_ck as select * from test where c1=1 with check option;

ͨ¹ý¡°ÊÓͼ¡±²åÈëÊý¾Ýʱ£¬±ØÐë·ûºÏÌõ¼þ²ÅÄܲåÈ루±ÜÃâ²»·ûºÏÂß¼­µÄÎÊÌ⣺Äܲå

ÈëÆäËûÖµ£¬µ«Í¨¹ýÊÓͼ²éѯʱ¿´²»µ½ÆäËûÖµµÄÇé¿ö£¬¼´ÄܲÙ×÷È´²»ÄÜ¿´£©¡£

39

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

2£©ÊÓͼÖеÄwith read onlyÔ¼Êø

create or replace view test_ck as select * from test where c1=1 with read only;

Ö»¶ÁÊÓͼ£¬Ö»ÄÜ¿´²»ÄܲÙ×÷£¬±¨´íÌáʾÕâЩÊÇÐéÄâÁС£ 3£©ÊÓͼµÄDDLÓï¾ä

create or replace view view_name alter view drop view

³£Ñ岩

40

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

³£Ñ岩

Ê®¾Å¡¢Êý¾Ý¿â¶ÔÏó£ºË÷Òýindex

19.1´´½¨index

create index index_name on table_name(colname); eg£º´´½¨service±íÖеÄaccount_idË÷Òý create index service_account_id_idx on service(account_id); 19.2ɨÃè±íµÄ·½Ê½

1£©È«±íɨÃèFTS(Full Table Scan)

¸ßˮλÏßHWM(High Water Mark)£ºÔø¾­²åÈëÊý¾ÝµÄ×îÔ¶¿é£¨Êý¾Ý´æ´¢µÄ×îСµ¥ÔªÊý1¡õ2£ü¿Ú¿Ú£¬1¡¢2±»É¾µôºó£¬¸ßˮλÏß²»¶¯£¬ËùÒÔ½ÐÔø¾­?? ¾Ý¿é£©¡£Êý¾Ý¿é£º¿Ú¿Ú¿Ú¡õdelete from tabnameÖÐdeleteҲͬÀí£¬Çå³ýÊý¾Ýµ«²»Êͷſռ䣬¸ßˮλÏß²»¶¯£¬count(*)»¨ºÜ³¤Ê±¼ä£¬µ«½á¹ûΪ0£»Í¬Ê±Êý¾ÝҲҪдÈërollback»Ø¹ö¶Î£¬Òò´Ëʱ¼äÓÖ³¤ÁË£¬µ«ºÃ´¦ÊDz»Ìá½»Êý¾ÝÊǿɻָ´µÄ£»ÈôµÈÁ˰ëÌ죬³öÏֻعö¶Î¿Õ¼ä²»×㣬ÔòÓÖ»á°ÑÊý¾Ý·µ»Ø±íÖÐ -_-£¡ËùÒÔ£¬delete²»ÊʺÏɾ³ý´ó±íµÄËùÓÐÊý¾Ý£¡ truncate table tabname£»DDL²Ù×÷£¬¿Õ¼äÊÍ·Å£¬¸ßˮλÏßÇ°ÒÆ£¬Ê±¼ä¶Ì£¬²»Ð´»Ø¹ö¶Î£¬Êý¾ÝÊDz»¿É»Ö¸´µÄ£¨É¾³ý±íÖеÄËùÓÐÐУ¬µ«±í½á¹¹¼°ÆäÁС¢Ô¼Êø¡¢Ë÷ÒýµÈ±£³Ö²»±ä£©¡£ eg£º½«É¨Ãè¸ßˮλÏßÒÔϵÄËùÓÐÊý¾Ý¿é select real_name from account where id=1010;²»½¨Á¢Ë÷Òý£¬Ôò»áɨÃèÈ«±í 2£©Í¨¹ýrowid£¨Î±ÁУ©À´É¨ÃèÊý¾Ý rowid£º±êʶһÌõ¼Ç¼µÄÎïÀíλÖã¨Î¨Ò»±êʶ£©£¬rowidµÄÊý¾ÝÀàÐ;ÍÊÇrowid£¬»áÒþʽ°Ñ×Ö·ûת³ÉrowidÀàÐÍ¡£ rowid°üº¬ÈçÏÂÐÅÏ¢£º ¢Ù¸Ã¼Ç¼ÊôÓÚÄÄÕűíµÄ£¨ÄĸöÊý¾Ý¿â¶ÔÏ󣩣ºdata_object_id ¢Ú¸Ã¼Ç¼ÔÚÊý¾ÝÎļþµÄµÚ¼¸¸öÊý¾Ý¿éÀblock_id ¢Û¸Ã¼Ç¼ÔÚÊý¾Ý¿éÀïÊǵڼ¸Ìõ¼Ç¼£ºrow_id ¶øË÷ÒýÔò»á¼Ç¼£ºkey£¬rowid¼üÖµ¶Ô£¬¼´Îªindex entryË÷ÒýÏî¡£ 19.3Ë÷ÒýµÄ½á¹¹ Ò¶×Ó¿é1 ·ÖÖ§¿é1 Ò¶×Ó¿é2 ¸ù¿é Ò¶×Ó¿é3 ·ÖÖ§¿é2 Ò¶×Ó¿é4 B*treeË÷ÒýÓɸù¿é(root block)¡¢·ÖÖ§¿é(branch block)¡¢Ò¶×Ó¿é(leaf block)×é³É¡£

1£©¸ù¿éÏÂÃæÊÇ·ÖÖ§¿é£¬ÓÃÓÚµ¼º½½á¹¹£¬°üº¬ÁËË÷ÒýÁз¶Î§ºÍÁíÒ»·Ç¸ù¿é(¿ÉÒÔÊÇ·ÖÖ§¿é»òÒ¶×Ó¿é)µÄµØÖ·¡£

2£©×îµ×²ãΪҶ×ӿ飬°üº¬Ë÷ÒýÏî(index entry)£¬Ë÷ÒýÓÉkeyÖµ(±»Ë÷ÒýÁеÄÖµ)ºÍ¸ÃÁÐËùÔÚÐеÄrowid×é³É¡£

3£©Ò¶×Ó¿éʵ¼ÊÉÏÊÇË«ÏòÁ´±íµÄ±í¡£Ò»µ©ÕÒµ½Ò¶×Ó¿éµÄ¡°¿ªÊ¼¡±µã(Ò»µ©ÕÒµ½µÚÒ»¸öÖµ)£¬

41

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

³£Ñ岩

¶ÔÖµ½øÐÐ˳ÐòɨÃ裨Ë÷Òý·¶Î§É¨Ã裩ÊǺÜÈÝÒ׵ġ£²»±ØÔÙ×ö½á¹¹µ¼º½£¬Ö»ÒªÍ¨¹ýÒ¶×Ó¿éת·¢¾ÍÐС£×îÖ÷ÒªµÄ¾ÍÊÇË÷Òý¶ÔÊý¾Ý½øÐÐÁËÅÅÐò¡£

19.4ΪʲôҪʹÓÃË÷Òý

1£©Oracle serverͨ¹ýrowid¿ìËÙ¶¨Î»ÒªÕÒµÄÐС£

2£©Í¨¹ýrowid¶¨Î»Êý¾ÝÄÜÓÐЧ½µµÍ¶ÁÈ¡Êý¾Ý¿é£¨data block£©µÄÊýÁ¿¡£ 3£©Ë÷ÒýµÄʹÓúÍά»¤ÊÇ×Ô¶¯µÄ£¬Ò»°ãÇé¿öϲ»ÐèÒªÓû§¸ÉÔ¤¡£

19.5ÄÄЩÁÐÊʺϽ¨Ë÷Òý

1£©¾­³£³öÏÖÔÚwhere×Ó¾äµÄÁС£ 2£©¾­³£ÓÃÓÚ±íÁ¬½ÓµÄÁС£ ? ×¢ÒâÊÂÏA¡¢BÁ½±íÁ¬½Ó£¬B±íÓÐÒýÓÃA±íµÄÍâ¼ü£¬Ôò´ÓÍâ¼üÔ¼Êø½Ç¶È¿´A±íΪ¸¸±í£¬B±íΪ×Ó±í£»Ò»°ã¸¸±íÊý¾ÝÁ¿Ð¡£¬×Ó±íÊý¾ÝÁ¿´ó£¬ËùÒÔ´Ó±íÁ¬½Ó½Ç¶È¿´A±íÓ¦×÷ΪÇý¶¯±í£¬B±íÓ¦×÷Æ¥Åä±í£¬°ÑÆ¥Åä±í×÷Ë÷Òý£¬ÔòÆ¥Åäʱ²»ÔÙ½øÐÐÈ«±íɨÃ裬ЧÂʽ«Ìá¸ß¡£ 3£©¸ÃÁÐÊǸ߻ùÊýÊý¾ÝÁУ¨¸ß»ùÊýÊý¾ÝÁÐÊÇÖ¸Óкܶ಻ͬµÄÖµ£©¡£ 4£©¸ÃÁаüº¬Ðí¶ànullÖµ¡£ ? ×¢ÒâÊÂÏwhere is nullÒ»¶¨ÊÇÈ«±íɨÃ裬ÒòΪË÷Òý²»¼Ç¼nullÖµ¡£ 5£©±íºÜ´ó£¬²éѯµÄ½á¹û¼¯Ð¡¡£ 6£©Ö÷¼ü£¨PK£©ÁС¢Î¨Ò»¼ü£¨UK£©ÁС£ 7£©Íâ¼ü£¨FK£©ÁС£ 8£©¾­³£ÐèÒªÅÅÐò£¨order by£©ºÍ·Ö×飨group by£©µÄÁС£ ? ×¢ÒâÊÂÏ ? Ë÷Òý²»ÊÇÍòÄܵ쬽á¹û¼¯ºÍÔ´±íÊý¾Ý²î²»¶àʱ£¬Ê¹ÓÃË÷Òý¾Í²»ºÃÁË£¬ÒòΪϵͳ»¹ÒªÈ¥¶ÁË÷Òý¡£ ? µ«Ã»ÓÐË÷ÒýÊÇÍòÍò²»Äܵġ£ 19.6Ë÷ÒýµÄÀàÐÍ 1£©Î¨Ò»ÐÔË÷Òý£¨unique£©£ºµÈ¼ÛÓÚΨһÐÔÔ¼Êø£¬Î¨Ò»ÐÔÔ¼ÊøÓÃΨһÐÔË÷ÒýʵÏֵġ£ 2£©·ÇΨһÐÔË÷Òý£ºÓÃÓÚÌá¸ß²éѯЧÂÊ eg£º´´½¨Î¨Ò»ÐÔË÷Òý create unique index test_c1_uniidx on test(c1); insert into test values (1); insert into test values (1); ERROR at line 1: ORA-00001: unique constraint (JSD1302.TEST_C1_UNIIDX) violated ×¢Ò⣺ΨһÐÔÔ¼ÊøµÄÃû×ÖÊÇΨһÐÔË÷ÒýµÄÃû×Ö ½áÂÛ£ºÎ¨Ò»ÐÔÔ¼ÊøÊÇͨ¹ýΨһÐÔË÷ÒýʵÏֵ쬶þÕßÊǵȼ۵ġ£ 3£©µ¥ÁÐË÷Òý£ºË÷Òý½¨ÔÚÒ»ÁÐÉÏ 4£©ÁªºÏË÷Òý£ºË÷Òý½¨ÔÚ¶àÁÐÉÏ eg£º´´½¨ÁªºÏË÷Òý create unique index srt_cour_pkid on stu_cour(sid,cid);ÁªºÏÖ÷¼üË÷Òý£ºÔò index entry´æ´¢µÄΪ1011£¬10£¬rowid where c1=2 and c2=1;ÁªºÏÁÐË÷Òý£ºÔòindex entry´æ´¢µÄΪ2£¬1£¬rowid 42