隨筆-159  評論-114  文章-7  trackbacks-0

          表的建立有4個步驟

          1.表名
          2.列名
          3.主鍵,外鍵,非空,唯一約束
          4.外鍵表,外鍵列
          5.數據類型
          6.數據


          建表語句

          create table lujl11
          (id number(7),
          start_date DATE DEFAULT SYSDATE)

          在同一個用戶表空間,不能有同名的表。


          ========================================


                                           RDBMS
          ---|---------------------------|-------------------|
          DB1(TLAB1)
          |-----------------------------|-------------------------|
          Table Space(users)         T.S(temp)                    
          |---------------------|
          schema(s0510)         (j0510)其他用戶的目錄讀權限
          |---------|
          s_emp    s_dept

          為什么sqlplus,一登陸就是某個庫,1個用戶只能登陸一個庫,那么這個庫在.cshrc環境變量中,ORACLE_SID表明。在登錄到對應用戶,使用對應用戶的表空間。

          openlab上。

          SQL> !more .cshrc
          # @(#)cshrc 1.11 89/11/29 SMI
          umask 022
          setenv ORACLE_BASE /tarenadb
          setenv ORACLE_HOME /tarenaora/software/9.0.1
          setenv ORACLE_SID TARENADB

          =======================================

          數據類型

          VARCHAR2(size)
          CHAR(size)
          NUMBER(p,s)  p為有效位數,s為小數位數,那么NUMBER(5,2),整數位為3位。
          DATE 日期與時間值。
          LONG 大文本
          RAW和LONG RAW 圖像或者聲音

          約束類型

          NOT NULL
          UNIQUE
          PRIMARY KEY
          FOREIGN KEY
          CHECK

          約束起名,如果不起名,系統會分配一個名字,SYS_Cxxxx。
          約束 最好是 表名_列名_約束類型 
          lujl11_dept_id_fk 外鍵
          lujl11_id_pk主鍵
          lujl11_name_nn非空
          lujl11_title_uk唯一
          lujl11_salary_ckCHECK約束

          定義,有列一級定義也有表一級定義,但是效果完全一樣。

          約束與數據是一對矛盾。誰先存在,誰有理,數據已存在,那么得添加約束要符合數據情況。

          非空約束,列級約束。

          create table friend
          (phone varchar2(15) constraint friend_phone_nn NOT NULL,
          )

          create table lujl04
          (
          id number(5) constraint lujl04_id_uk unique,
          last_name varchar2(10),
          first_name varchar2(20),
          salary number(10,2),
          constraint lujl04_first_last_name_uk
          unique(last_name,first_name)
          );

          表一級約束,constraint開頭。

          constraint lujl11_dept_id_fk
          foreign key(dept_id)
          references s_dept(id)
          on delete cascade
          級聯刪除
          沒有級聯更新。


          create table emp_41
          as
          select id,last_name..
          from s_emp
          where..

          除了非空約束存在,其他丟失。



          數據字典

          user                               users
          all     ------->_-------->views
          dba                                indexs
                                               constraints

          user_tables
          user_views
          user_indexs
          user_constraints
          user_sequeces

          DML

          insert into table
          values (102,null,....)

          insert into table(id)
          values(102)

          時間問題,依然要重視

          insert into s_emp(id,first_name,last_name,start_date)
          values
          (25,'Donna','Smith',TO_DATE('01-JAN-99 09:00','DD-MON-YY HH:MI'));

          update s_emp
          set dept_id = 100
          where id = 2;


          delete from s_emp;

          delele from s_emp
          where start_date>TO_DATE('01.01.1996','DD.MM.YYYY')

          Transaction 事務

          一個事務
          多個DML語句
          但是一旦遇到DCL(grant),DDL(alter,drop)就會自動提交事物

          或者COMMIT提交,

          或者ROLLBACK回滾到事物開始。

          也就是說,如果先插入了很多記錄,再刪很多記錄,沒有commit或者退出,或者DCL,DDL,那么ROLLBACK可以回滾到插入數據之前。

          sqlplus--->另外的buff保存著,當前事務涉及到的行,這是操作修改的是buff中的數據,但是這些行記錄被鎖定,行級所,所以可以rollback,一旦提交,就更新到數據庫中了。

          除非實時修復DBA能恢復數據。

          可以SAVEPOINT,保存事物中間某個標志為,回滾到該標志地方。




          ALTER table s_emp
          ADD
          MODIFY
          DROP

          約束只能添加和刪除,不能修改(除了alter table jerry03 modify (id null))。

          ALTER TABLE s_dept
          DROP PRIMARY KEY CASCADE

          一個表一個主鍵約束,可以不指定列。正常有外鍵關聯主鍵,主鍵約束不能刪除,除非CASCADE。

          ALTER TABLE s_emp
          ENABLE CONSTRAINT s_emp_id_pk;

          恢復需要一個一個將外鍵的表恢復外鍵約束。

          DROP TABLE table CASCADE CONSTRAINTS

          Truncate table s_emp;
          刪除所有數據,不同于delete from s_emp;,它釋放了表占據的空間。磁盤空間。

          建Sequences,序列獨立于表,沒關系,,誰都能用該序列。

          create sequence lujl11_id
          increment by 1
          start with 54
          maxvalue 9999999
          nocache
          nocycle

          user_sequences

          drop sequence lujl11_id;




          View

          一面墻上有一幅畫(數據),前面是一面墻,墻上有窗,那就是視圖,不是數據本身,就是select語句,

          兩類,簡單視圖(可以DML),復雜視圖(不能DML)。

          CREATE OR REPLACE VIEW empvu45
          (id_number,employee,job)
          as select id,last_name,title
          from s_emp
          where dept_id = 45


          CREATE OR REPLACE VIEW empvu44
          AS SELECT *
          FROM s_emp
          WHERE dept_id = 41
          WITH CHECK OPTION CONSTRAINT empvu41_ck;一個約束!

          就是條件中(where)出現的列不能修改。

          WITH READ ONLY 只讀


          INDEX

          B*Tree,就是平分法排序,實現快速查找。

          索引會提高查詢速度,但會降低插入速度。

          1.值分散
          2.空值多
          3.多列
          4.表大
          5.更多索引不能提速更多。


            1  select rowid,s_dept.*
            2* from s_dept
          SQL> /

          ROWID                      ID NAME                       REGION_ID
          ------------------ ---------- ------------------------- ----------
          AAAIlTAAIAAABeqAAA         10 Finance                            1
          AAAIlTAAIAAABeqAAB         31 Sales                              1
          AAAIlTAAIAAABeqAAC         32 Sales                              2
          AAAIlTAAIAAABeqAAD         33 Sales                              3
          AAAIlTAAIAAABeqAAE         34 Sales                              4
          AAAIlTAAIAAABeqAAF         35 Sales                              5

          rowid是地址,天生的主鍵。非空,唯一。




          posted on 2005-11-22 22:57 北國狼人的BloG 閱讀(438) 評論(0)  編輯  收藏 所屬分類: 達內學習總結
          主站蜘蛛池模板: 东明县| 临夏市| 江源县| 江津市| 丰镇市| 青岛市| 长乐市| 新野县| 鹤庆县| 亳州市| 胶南市| 准格尔旗| 鲁甸县| 云浮市| 涞源县| 枣阳市| 东台市| 文化| 海林市| 什邡市| 清河县| 连云港市| 澄江县| 白银市| 彭山县| 乐山市| 贵德县| 通渭县| 井陉县| 增城市| 腾冲县| 四会市| 乐昌市| 蕲春县| 云霄县| 长兴县| 清苑县| 宾川县| 灌南县| 台江县| 长汀县|