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;