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;