1. 程式人生 > 實用技巧 >Oracle資料庫教程-資料定義語言(表操作)

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;