Oracle的表

一、表的概念

表是數據庫最基本的邏輯結構,一切數據都存放在表中,其它數據庫對象(索引、視圖、同義詞等)都是爲了更方便的操作表中的數據。Oracle數據庫是由若干個表組成,每個表由列和行組成,如下表所示。

編號 姓名 顏值 身材 體重 身高 出生時間 備註
0101 西施 漂亮 火辣 48.5 170 2000-01-01 01:12:35 這是一個非常漂亮姑娘,老公是夫差,男朋友是范蠡。
0102 貂禪 漂亮 火辣 45.2 168 1997-08-02 12:20:38 王允真不是男人,幹不過董卓就把美人往火坑裏推,千古罪人啊。
0103 妲已 漂亮 豐滿 53.6 172 1998-03-03 10:50:33 如果商真的因我而亡,您們男人做什麼去了?
0104 芙蓉 姐姐 豬扒 膘肥 體壯 85.8 171 1980-05-05 10:11:55 如果不努力學習技術,將來就會娶個芙蓉姐姐,哼哼。
0105 神密 貓女 48.5 171 1989-12-08 12:10:35 不知道是什麼人,她臉上有一個%符號,很神密。

1、表的列

表的結構是由列組成,習慣上把列也稱之爲字段,字段的基本屬性如下:

1)字段名:字段的名稱。

2)數據類型:該字段存放數據的類型和長度。

3)是否允許空值:該字段是否爲必填,如果不是必填,表示可以爲空。

2、列的數據類型

表的每個列一定會有它的數據類型,表示該列存放的是什麼數據,常用的數據類型如下:

1)字符串類型:char和varchar2,可表達任何字符串。

2)數字類型:number(m,n),可表達任何數字,m是數字的總長度,n是小數點後的位數,如果n爲0則表示是存放整數。

3)日期類型:date,存放日期和時間,包括年(yyyy)、月(mm)、日(dd)、小時(hh24)、分(mi)、秒(ss)。

4)clob類型,存放單字節字符串或多字節字符數據,如文本文件、xml文件。

5)blob類型,存放非結構化的二進制數據,如圖片、音頻、視頻、office文檔等。

6)rowid類型,存放表中記錄在數據庫中的物理地址。

更詳細的介紹請閱讀《Oracle數據類型》文章。

3、表的行

表中的數據是由行組成的,每一行就是一條數據,也稱之爲記錄,數據越多,記錄就越多。

二、創建表

1、創建表

Oracle數據庫創建表是用create table命令來完成的,我們通過創建T_GIRL表(超女基本信息表)來講解create table 命令的使用。

建表命令如下:

create table 表名
(
  字段名1 數據類型 null,
  字段名2 數據類型 not null,
  ......,
  字段名n 數據類型 null
);

表名是標識符,從語法上來說,表名只要符合Oracle的規定就行了,但是,在實際開發中,我會遵守兩個原則:1)表名以T_打頭,可讀性比較好;2)表名儘可能有意義,用完整的英文單詞或簡寫、或中文拼音都可以,方便理解和記憶就好。

創建超女基本信息表:

create table T_GIRL
(
  id        char(4)         not null,   -- 編號
  name      varchar2(30)    not null,   -- 姓名
  yz        varchar2(20)        null,   -- 顏值
  sc        varchar2(20)        null,   -- 身材
  weight    number(4,1)     not null,   -- 體重
  height    number(3)       not null,   -- 身高
  birthday  date            not null,   -- 出生時間
  memo      varchar2(1000)      null    -- 備註
);

注意:1)在Oracle數據庫的SQL命令中,關鍵字、表名和字段名都不區分大小寫,CREATE和create沒有區別,表名T_GIRL和t_girl也沒有區別,字段名ID和id也沒有區別;2)兩根短線“--”是說明文字,就像C/C++語言中的“//”。

2、創建表的主鍵

在現實世界中,很多數據具有唯一的特性,例如身份證號碼,在國家人口基本信息表中,一定不會存在多個人用同一個身份證號碼的情況,再例如手機號碼、QQ號碼、銀行帳號等等,還有學生管理系統,學生的年級、班級和學號三個字段組合起來是唯一的標識。

如果表中一個字段或多個字段組合起來的值是唯一的,就可以作爲表的主鍵,在創建或修改表時用primay key關鍵字來指定主鍵。一個表只能有一個主鍵,而且組成主鍵的每個字段值都不能爲空。

主鍵的作用:

1)體現數據結構設計的合理性。

2)提升數據操作的速度。

3)保證數據的完整性,在表中添加或修改記錄時,數據庫會檢查該記錄主鍵的值,不允許與其它記錄主鍵的值重複,這種做法有個專業的名詞:主鍵約束。

例如超女基本信息表,編號的字段名是id,在超女選秀活動中,每個超女的編號肯定是唯一的,不可能存在兩個編號相同的超女,否則會引起混亂,我們可以把id字段設置爲T_GIRL表的主鍵,後面的工作交給數據庫,如果試圖往表中插入多條id相同的記錄,數據庫將拒絕。

指定表的主建有兩種方法。

1)在create table時指定。

create table T_GIRL
(
  id        char(4)         not null,   -- 編號
  name      varchar2(30)    not null,   -- 姓名
  yz        varchar2(20)        null,   -- 顏值
  sc        varchar2(20)        null,   -- 身材
  weight    number(4,1)     not null,   -- 體重
  height    number(3)       not null,   -- 身高
  birthday  date            not null,   -- 出生時間
  memo      varchar2(1000)      null,   -- 備註
  primary key(id)                       -- 指定id爲表的主鍵
);

2)修改已經建好的表,增加主鍵約束。

alter table 表名 add constraint 主鍵名 primary key(字段名1,字段名2,......字段名n);

例如:

alter table T_GIRL add constraint PK_GIRL primary key(id);

在Oracle數據庫中,雖然主鍵不是必需的,但是最好爲每個表都設置一個主鍵,不管是單字段主鍵還是多字段主鍵(複合主鍵),它的存在代表了表結構的完整性,主鍵還可以用於其他表的外鍵關聯,外鍵的知識以後再介紹。

三、表記錄的插入、修改和刪除

1、向表中插入記錄

insert into命令用於向表中插入記錄,語法如下:

insert into 表名 (字段名1, 字段名2,...... 字段名n) values (字段1的值, 字段2的值,..... 字段n的值);

注意,表名後的字段名列表與values後面字段值列表必須一一對應。

例如:

insert into T_GIRL(id,name,yz,birthday,sc,weight,height,memo)
  values('0101','西施','漂亮',to_date('2000-01-01 01:12:35','yyyy-mm-dd hh24:mi:ss'),
         '火辣',48.5,170,'這是一個非常漂亮姑娘,老公是夫差,男朋友是范蠡。');
insert into T_GIRL(id,name,yz,birthday,sc,weight,height,memo)
  values('0102','貂禪','漂亮',to_date('1997-08-02 12:20:38','yyyy-mm-dd hh24:mi:ss'),
         '苗條',45.2,168,'王允真不是男人,幹不過董卓就把美人往火坑裏推,千古罪人啊。');
insert into T_GIRL(id,name,yz,birthday,sc,weight,height,memo)
  values('0103','妲已','漂亮',to_date('1998-03-03 10:50:33','yyyy-mm-dd hh24:mi:ss'),
         '火辣',53.6,172,'如果商真的因我而亡,您們男人做什麼去了?');
insert into T_GIRL(id,name,yz,birthday,sc,weight,height,memo)
  values('0104','芙蓉姐姐','豬扒',to_date('1980-05-05 10:11:55','yyyy-mm-dd hh24:mi:ss'),
         '膘肥體壯',85.8,166,'如果不努力學習技術,將來就會娶個芙蓉姐姐,哼哼。');
insert into T_GIRL(id,name,yz,birthday,sc,weight,height,memo)
  values('0105','神密貓女',null,to_date('1989-12-08 12:10:35','yyyy-mm-dd hh24:mi:ss'),
         null,48.5,171,'不知道是什麼人,她臉上有一個%符號,很神密。');

在上面的insert語句中,字段的值如果是字符串,要用單引號包含起來,日期字段要用to_date函數轉換,數字直接書寫。

插入數據的SQL語句還有一種寫法,如下:

insert into 表名 values (字段1的值, 字段2的值,..... 字段n的值);

這種寫法省略了字段名列表,但是,這種寫法一定不能出現在程序中,因爲只要表結構發生改變,或字段的位置改變,SQL語句就會出錯。

2、查詢表中的記錄

insert into命令用於從表中查詢記錄,語法如下:

select 字段名1,字段名2,......字段名n from 表名 where 條件1 and 條件2 ...... 條件n;
select * from 表名 where 條件1 and 條件2 ...... 條件n;

例如:

select name,to_char(birthday,'yyyy-mm-dd hh24:mi:ss') from T_GIRL where yz='漂亮' and sc='火辣';

在select關鍵字之後,可以用星號表示全部的字段。

select * from T_GIRL where yz='漂亮' and sc='火辣';

在上面的SQL語句中,用星號*表示列出全部的字段,這種寫法一定不能出現在程序中,因爲只要表結構發生改變,或字段的位置改變,程序就會出現混亂。

where關鍵字後面的條件表達式涉及的知識非常多,以後再詳細介紹。

3、修改表中的記錄

update命令用於修改表中的記錄,語法如下:

update 表名 set 字段名1=值1,字段名2=值2,......字段名n=值n where 條件1 and 條件2 ...... 條件n;

在set關鍵字之後把需要修改的字段名和新的值一一列出來。

where關鍵字後面是條件表達式,如果沒有條件表達式,就會更新表中全部的記錄。

超女選秀活動開始後,芙蓉姐姐體重反彈了3公斤,像個大恐龍,出生日期也有隱瞞,組委會修改了她的基本資料,如下:

update T_GIRL set weight=89.5,yz='恐龍',birthday=to_date('1978-01-01 01:12:35','yyyy-mm-dd hh24:mi:ss') where name='芙蓉姐姐';

4、刪除表中的記錄

delete命令用於刪除表中的記錄,語法如下:

delete from 表名 where 條件1 and 條件2 ...... 條件n;

where關鍵字後面是條件表達式,如果沒有條件表達式,就刪除表中全部的記錄。

隨着超女選秀活動的繼續,芙蓉姐姐的體重在持續反彈中,組委會實在受不了了,決定把芙蓉姐姐除名。

delete from T_GIRL where name='芙蓉姐姐';

四、表的約束

表的約束有非空約束、唯一性約束、檢查約束、主建約束和外鍵約束四種,主鍵約束和外鍵約束涉及到數據結構方面的知識,以後再介紹。

1、非空約束

創建表的時候,可以指定字段的值是否允許爲空,缺省是null允許爲空(表示是可選字段),not null不允許爲空(表示是必填字段)。

例示:

create table tt (c1 varchar2(10),c2 varchar2(10) not null);

創建表tt,c1字段允許爲空,c2字段不允許爲空。

在這裏插入圖片描述

2、唯一性約束

唯一性約束有兩種,一種是表的主鍵,另一種是表的唯一索引,唯一索引以後再介紹。

表的主鍵字段不允許存在值相同的記錄。

create table tt (id varchar2(10),name varchar2(10),primary key(id));

創建表tt,id字段是主鍵。

在這裏插入圖片描述

3、檢查約束

檢查約束是指檢查字段的值是否合法。

示例:

create table TT  
(
   c1   number(6) constraint CKC_C1_TT check (c1 >= 10), 
   c2   number(6) constraint CKC_C2_TT check (c2 <= 20), 
   c3   number(6) constraint CKC_C3_TT check (c3 in (1,2,3))
);

創建表TT,c1字段的最小值是10,c2字段的最大值是20,C3字段的取值必須在(1,2,3)中取其一。

在這裏插入圖片描述

在這裏插入圖片描述

五、字段的缺省值

在創建表的時候,可以爲字段指定缺省值。

示例:

create table TT
(
   name     varchar2(10) not null,
   crttime  date         default sysdate not null,
   rsts     number(1)    default 1 not null constraint CKC_RSTS_TT check (rsts in (1,2))
);

創建表,字段crttime的缺省值是sysdate(當前時間),rsts的缺省值是1。

在這裏插入圖片描述

六、表的存儲空間

每個數據庫用戶有一個缺省表空間,創建的表、主鍵和索引存放在缺省表空間中,也可以指定其它的表空間。

1、查看當前用戶的缺省表空間

從數據字典USER_USERS中可以查看當前用戶的缺省表空間。

在這裏插入圖片描述

2、指定表的表空間

指定表空間的語法如下:

create table 表名
(
  ......   -- 字段列表
) tablespace 表空間名;

例如創建T_GIRL表,指定使用USERS表空間。

create table T_GIRL
(
  id        char(4)         not null,   -- 編號
  name      varchar2(30)    not null,   -- 姓名
  yz        varchar2(20)        null,   -- 顏值
  sc        varchar2(20)        null,   -- 身材
  weight    number(4,1)     not null,   -- 體重
  height    number(3)       not null,   -- 身高
  birthday  date            not null,   -- 出生時間
  memo      varchar2(1000)      null    -- 備註
) tablespace USERS;

表還有其它與存儲相關的選項,但應用場景比較少,本文就不介紹了。

七、修改表結構

Oracle修改表的命令是alter table,它的選項非常多,本文只介紹修改表結構的相關知識。

1、增加字段

語法:

alter table 表名 add 字段名 數據類型 其它選項;

例如:

alter table T_GIRL add address varchar2(50) null;
alter table T_GIRL add rsts number(1) constraint CKC_RSTS_GIRL check (rsts in (1,2));

2、修改字段的屬性

語法:

alter table 表名 modify 字段名 數據類型 其它選項;

例如:

alter table T_GIRL modify address varchar2(100);
alter table T_GIRL modify address varchar2(100) not null;
alter table T_GIRL drop constraint CKC_RSTS_GIRL;
alter table T_GIRL modify rsts constraint CKC_RSTS_GIRL check (rsts in (1,2,3));

修改字段屬性的時候要注意一個問題,如果表中已存在數據,修改可能會失敗,包括但不限於以下的情況:

1)把字段由null改爲not null時,表中記錄存在null的情況。

2)把字段的取值範圍由較大(例如number(10))改較小(例如number(5)),表中記錄存在大於較小取值範圍的情況,例如已經存在123456的值,如果把數據類型改爲number(5),無法存放123456。

3)把字段的數據類型時,表中存在記錄並且新舊數據類型不兼容的情況。例如原來的數據類型是varchar2(10),表中存在記錄的值是'freecplus',如果要修改爲number(10),Oracle無法把'freecplus'轉換爲number(10)。

3、修改字段名

語法:

alter table 表名 rename column 列名 to 新列名;

例如:

alter table T_GIRL rename column memo to remark;

4、刪除字段

語法:

alter table 表名 dorp column 字段名;

例如:

alter table T_GIRL drop column rsts;
alter table T_GIRL drop column address;

八、修改表名

語法:

alter table 表名 rename to 新表名;

例如:

alter table T_GIRL rename to T_BEAUTY;

注意,如果修改了表名,表的約束、索引、主鍵的名稱不會改變。

九、刪除表

語法:

drop table 表名;

示例:

drop table T_GIRL;

十、版權聲明

C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道

如果這篇文章對您有幫助,請點贊支持,或在您的博客中轉發我的文章,謝謝!!!
如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章