1. 程式人生 > >4、建表操作

4、建表操作

學習目標:

1、掌握Oracle提供的資料型別

2、掌握PL/SQL的建表語法

學習過程:

一、什麼是表

表是Oracle資料庫最基本的物件,他是儲存使用者資料,關係資料庫的所有操作最終都是圍繞使用者資料(表)進行的。

表對應於現實世界中的物件(例如部門和僱員)。當進行資料庫的設計時,需要構造E-R圖(實體關係圖),在將E-R圖轉變成為資料庫物件的時候,實體最終轉換為資料庫表。表由行和列兩部分組成,其中列用於描述實體的屬性,行則用於表現實體的資料。

二、資料型別

和學習java一樣,我們首先學習資料庫支援那些基本資料型別。其實oracle資料庫的資料型別比java的還要簡單。

1、字元型,主要有三個  

char(

varchar(

varchar2(

  佔用空間可變化

2、數值型

number(

,),p實質有效數位,s是指小數位,比如number(5,2)。

 

Integer/int其實也是number型別,和number(38)表示的意思是一樣的。

在定義整數型別的時候,可以直接使用number的子型別int、float。

3、日期型  date,預設格式為DD-MON-YY。

timestamp[秒小數位數],是date 的擴充套件。

 

這裡我想和大家說說Char、varchar和varchar2之間的區別:

1.CHAR的長度是固定的,而VARCHAR2的長度是可以變化的,比如,儲存字串“abc",對於CHAR (20),表示你儲存的字元將佔20個位元組(包括17個空字元),而同樣的VARCHAR2 (20)則只佔用3個位元組的長度,20只是最大值,當你儲存的字元小於20時,按實際長度儲存。

2.CHAR的效率比VARCHAR2的效率稍高。

3.目前VARCHAR是VARCHAR2的同義詞。工業標準的VARCHAR型別可以儲存空字串,但是Oracle不這樣做,儘管它保留以後這樣做的權利。Oracle自己開發了一個數據型別VARCHAR2,這個型別不是一個標準的VARCHAR,它將在資料庫中varchar列可以儲存空字串的特性改為儲存NULL值。假如你想有向後相容的能力,Oracle建議使用VARCHAR2而不是VARCHAR。

何時該用CHAR,何時該用varchar2?

CHAR與VARCHAR2是一對矛盾的統一體,兩者是互補的關係。VARCHAR2比CHAR節省空間,在效率上比CHAR會稍微差一些,即要想獲得效率,就必須犧牲一定的空間,這也就是我們在資料庫設計上常說的‘以空間換效率’。 VARCHAR2雖然比CHAR節省空間,但是假如一個VARCHAR2列經常被修改,而且每次被修改的資料的長度不同,這會引起‘行遷移’(Row Migration)現象,而這造成多餘的I/O,是資料庫設計和調整中要盡力避免的,在這種情況下用CHAR代替VARCHAR2會更好一些。

三、建表

有了上面的基礎那麼我們就可以建表了。

1、命名規則

建表之前先了解一下資料庫在定義時的命名規則。

(1)必須以字母開頭 n字元長度在1-30之間,只能包含A-Z,a-z,0-9,_,$和#,

(2)被同一個使用者擁有的物件不能有重複的名字。

(3)不能是Oracle伺服器保留字

2、建表語法

create table 表名

(

   列名   型別    約束等

)

示例

1

2

3

4

5

6

7

8

9

10

11

12

13

  --建表

create table people

(

    --列名   型別  約束

       --number(有效數位,小數位)  

          --主鍵 int  number(38,0)

    people_id  number(5,2) primary key,

        --char  固定大小  varchar2可變大小

             --   abc

    people_name   varchar2(20),

    people_birthd  date

 

)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

  3、修改表等語法

n如果表結構不符合實際情況,那麼在建表後, 可以使用 alter table語句改變表結構, 例如增加列,改變列定義,刪除列等. ,我們還可以為表重新命名,恢復表等操作。示例如下:

--修改表

-- 新增一個列

alter table people add peopele_gender char(2);

-- 刪除一個列

alter table people drop column  peopele_gender;

-- 修改一個列

alter table people modify people_name varchar2(50)

--刪除表

drop table ttt;

--改名  rename old_table to new_table 

rename people to new_people;

 

--恢復表

flashback table ttt to before drop;