Oracle資料庫教程-數據定義語言(表操作)

創建表

建表語法:

CREATE TABLE 表名 (

 列1 數據類型 [primary key],

 列2 數據類型 default 默認值 [not null],

  …,
 constraint 約束名 約束類型(列),
 …
)
/

例如,創建學生資訊表:

--創建表
CREATE TABLE INFOS(
STUID VARCHAR2(7) NOT NULL, --學號 學號=『S』+班號+2位序號
STUNAME VARCHAR2(10) NOT NULL, --姓名
GENDER VARCHAR2(2) NOT NULL, --性別
AGE NUMBER(2) NOT NULL, --年齡
SEAT NUMBER(2) NOT NULL, --座號
ENROLLDATE DATE, --入學時間
STUADDRESS VARCHAR2(50) DEFAULT '地址不詳', --住址
CLASSNO VARCHAR2(4) NOT NULL --班號 班號=學期序號+班級序號
)

注意:在 Oracle 程式碼中, 「/」 執行快取區中的語句,由於緩衝區中只存儲一條剛剛保存過語句,由於每條語句沒有用分號結尾,只是保存在緩衝區,因此每條語句後面都有單獨一行「/」 。

數據類型

Oracle資料庫中常用的數據類型有CHAR、VARCHAR2、NUMBER、DATE、TIMESTAMP、CLOB、BLOB、LONG。

類型

含義

CHAR(length)

存儲固定長度的字元串。參數length指定了長度,如果存儲的字元串長度小於length,用空格填充。默認長度是1,最長不超過2000位元組。

VARCHAR2(length)

存儲可變長度的字元串。length指定了該字元串的最大長度。默認長度是1,最長不超過4000字元。

NUMBER(p,s)

既可以存儲浮點數,也可以存儲整數,p表示數字的最大位數(如果是小數包括整數部分和小數部分和小數點,p默認是38為),s是指小數位數。 Number(10,3)

DATE

存儲日期和時間,存儲紀元、4位年、月、日、時、分、秒,存儲時間從公元前4712年1月1日到公元後4712年12月31日。TO_DATE()系統函數,格式化日期。

TIMESTAMP

不但存儲日期的年月日,時分秒,以及秒後6位,同時包含時區。

CLOB

存儲大的文本,比如存儲非結構化的XML文檔

BLOB

存儲二進位對象,如圖形、影片、聲音等。

LONG

LONG 數據類型中存儲的是可變長字元串,最大長度限制是2GB。對於超出一定長度的文本,基本只能用LONG類型來存儲,數據字典中很多對象的定義就是用LONG來存儲的。LONG 數據類型中存儲的是可變長字

   能夠操作 LONG 的 SQL 語句:

    1、Select語句

    2、Update語句中的SET語句

    3、Insert語句中的VALUES語句

  數據類型的限制:

    1、一個表中只能包含一個 LONG 類型的列。

    2、不能索引LONG類型列。

    3、不能將含有LONG類型列的表作聚簇。

    4、不能在SQL*Plus中將LONG類型列的數值插入到另一個表格中,如insert into …select。

    5、不能在SQL*Plus中通過查詢其他表的方式來創建LONG類型列,如create table as select。

    6、不能對LONG類型列加約束條件(NULL、NOT NULL、DEFAULT除外),如:關鍵字列(PRIMARY KEY)不能是 LONG 數據類型。

    7、LONG類型列不能用在Select的以下子句中:where、group by、order by,以及帶有distinct的select語句中。

    8、LONG類型列不能用於分布查詢。

約束類型

【】內是慣性命名法

--主鍵約束 
ALTER TABLE 表名 ADD CONSTRAINT 主鍵約束名【PK_表名】 PRIMARY KEY(列名)

--唯一約束 
ALTER TABLE 表名 ADD CONSTRAINT 唯一約束名【UN_表名_列名】 UNIQUE(列名)

--默認約束 
ALTER TABLE 表名 MODIFY 列名 DEFAULT 默認值

--檢查約束 
ALTER TABLE 表名 ADD CONSTRAINT 檢查約束名【CK_表名_列名】 CHECK(列名 條件)

--外鍵約束 
ALTER TABLE 表名 ADD CONSTRAINT 外鍵約束名【FK_子表名_主表名_列名】 FOREIGN KEY REFERENCES 主表名(列名)

例如:為學生資訊表添加約束

--為INFOS 添加主鍵約束
ALTER TABLE INFOS ADD CONSTRAINT PK_INFOS PRIMARY KEY(STUID)

--為INFOS 添加唯一約束
ALTER TABLE INFOS ADD CONSTRAINT UN_INFOS_CLASSNO UNIQUE(CLASSNO)

--為INFOS 添加默認約束
ALTER TABLE INFOS MODIFY ENROLLDATE DEFAULT TO_DATE('2018-01-01','YYYY-MM-DD')

--為INFOS 添加檢查約束
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_GENDER CHECK(GENDER='' OR GENDER='')

--為INFOS 添加外鍵約束
ALTER TABLE SCORES ADD CONSTRAINT FK_SCORES_INFOS_STUID FOREIGN KEY(STUID) REFERENCES INFOS(STUID)

刪除約束

--刪除約束  
ALTER TABLE 表名 DROP 約束名

修改表

--添加列(加欄位)

--語法: alter table 表名 add(列名 數據類型 [not null], …);

alter table person add address01 varchar2(300);

alter table person add address02 varchar2(300);

​
--修改列的類型

--語法: alter table 表名 modify(列名 數據類型 [not null], …);

alter table person modify address01 varchar2(500);

​
--修改列名

--語法: alter table 表名 rename column 舊列名 to 新列名;

alter table person rename column address02 to address;

​
--刪除列

--語法: alter table 表名 drop(列名 1, 列名 2, …);

alter table person drop column address;

刪除表

--語法(如果沒有指定 purge 參數,被刪除的表就會保存在回收站中)
drop table 表名 [purge];


--刪除 userinfo表
--保存在回收站中,可以從回收站中恢復.
drop table userinfo;

--永久刪除表,不會保存在回收站中
drop table userinfo purge;

複製表

--語法:
create table 表名 as select 列名 from 表名 [where 條件];


--複製表的結構和數據:

--創建一個 userinfo表的備份表(複製表的結構和數據)

create table userinfo as select * from user;


--只複製表的結構:

create table userinfo as select * from user where 1=2;