1. 程式人生 > >oracle 數據庫基本操作——數據定義語言

oracle 數據庫基本操作——數據定義語言

columns enc margin 分數 索引 rom span 所有 html

  熟悉Oracle上機環境及Oracle客戶端的配置;熟練掌握和使用DDL語言,建立、修改和刪除數據庫表、主鍵、外鍵約束關系和索引。

  1. (建立數據庫表) 建立教學數據庫的四個數據庫表,其中Student表中不包含SSEX(C,2) 字段,Sname 字段為Sname(C,8)且可為空。
    create table student
       (sno char(5),
        sname varchar2(8),
        sage number(2) check(age between 12 and 60),
        sdept char(2),
        sclass char(2),
        
    constraint student_pk primary key(sno));
    create table course
       (cno char(3) not null primary key,
        cname char(16),
        ctime number(3));
    create table score
    (   Sno char(5),
        cno char(3),
        grade number(3),
        constraint score_pk primary key(sno,cno),
        constraint s_sno_fk foreign key
    (sno) references student(sno), constraint s_cno_fk foreign key(cno) references course(cno), constraint score_ck1 check (grade >= 0 and grade <= 100));
    create table teach
    (
        tname char(8) not null,
        tsex char(2) not null,
        cno char(3) not null ,
        tdate date not null,
        tdept 
    char(2) not null, constraint teach_pk primary key(cno), constraint teach_cno_fk foreign key(cno) references course(cno));
  2. (修改數據庫表) 在Student表中增加SEX(C,2) 字段。
    alter table student
    add(sex char(2)); 
  3. (修改列名) 將Student表中列名SEX修改為SSEX。
    alter table student
     rename column sex to ssex;
    modify(ssex char(2) check(ssex in (‘男‘,‘女‘)));
  4. (修改數據庫表) 將Student表中把Sname 字段修改為Sname(C,10)且為非空。
    alter table student
    modify(sname char(10)not null);
  5. (建立索引) 為Score表按課程號升序、分數降序建立索引,索引名為SC_GRADE。
    create index sc_grade on score(cno,grade desc);
  6. (刪除索引) 刪除索引SC_GRADE。
    drop index sc_grade;
  7. (建立數據庫表) 建立數據庫表S1(SNO,SNAME,SD,SA),其字段類型定義與Student表中的相應字段(SNO,SNAME,SDEPT,SAGE)的數據類型定義相同。
    create table s1(
      sno char(5) not null,
      sname char(10) not null unique,
      sd char(2),sa number(2));
  8. (修改數據庫表) 刪除成績表Score的參照完整性約束關系。
    alter table score drop constraint s_sno_fk;
    alter table score drop constraint s_cno_fk;
  9. (修改數據庫表) 添加成績表Score的參照完整性約束關系。
    alter table Score 
    add(constraint s_sno_fk foreign key(sno) references student(sno),
      constraint s_cno_fk  foreign key(cno) references course(cno));
  10. (修改數據庫表名) 將數據庫表S1改名為Student_Temp。

     rename S1 to student_temp;
  11. 查看表的約束條件
    select constraint_name, table_name, r_owner, r_constraint_name
    from all_constraints
    where table_name = score;
  12. 刪除表中的列
    alter table student
    drop column spec;
  13. 查看用戶下所有的表名
    select table_name from user_tables;  //當前用戶的表 
    select table_name from all_tables;  //所有用戶的表 
    select table_name from dba_tables;  //包括系統表 
    select * from user_indexes //可以查詢出所有的用戶表索引
  14. 查看表中所有的列名
  15. select column_name,data_type ,data_length,data_precision,data_scale from user_tab_columns where table_name=STUDENT;//表名必須大寫
    //或者
    desc student;

  在定義外鍵約束條件時,不能把其他表中沒有的屬性定義在本表的外鍵中,否則會生辰一個錯誤;

  在建表時,因為約束條件的名稱被重復定義,導致表建不起來:改進方法,將課本上的約束條件名稱家上表名前綴,避免重復性定義問題;

  經常會遺漏分號,導致cmd中格式臟亂;

  在設置一個屬性的類型時,如果設置為not null則不能再更改它的屬性為null;

  在oracle中漢字占得是三個字節,所以姓名出現四個字就超出了範圍,需要修改其範圍,性別應該修改為3個字節;

  姓名不可以設置為not null unique ,如果出現重名就會發生錯誤,因為當時設置了unique最後還得重建表,刪除此約束條件;

刪除表數據有兩種方法:delete和truncate。

delete的用法如下:

delete from <表名> [where條件]

truncate的用法如下:

truncate table <表名>

delete和truncate的區別如下:

1、delete可以刪除表中的一條或多條數據,也可以刪除全部數據;而truncate只能將表中的全部數據刪除。

2、delete刪除表數據後,標識字段不能復用。也就是說如果你把id=10(假如id是標識字段)的那行數據刪除了,你也不可能再插入一條數據讓id=10.

3、truncate刪除表數據後,標識重新恢復初始狀態。默認為初始值為1,也就是說,truncate之後,再插入一條數據,id=1.

但是在使用truncate刪除數據時可能受到外鍵的限制,必須從子集開始刪除,才可以刪除數據;

參考:http://www.cnblogs.com/laipDIDI/articles/2615210.html
http://www.jb51.net/article/82660.htm

oracle 數據庫基本操作——數據定義語言