Oracle創建表語句(Create table)語法詳解及示例
創建表(Create table)語法詳解
1. ORACLE常用的字段類型
ORACLE常用的字段類型有
VARCHAR2 (size) 可變長度的字符串, 必須規定長度
CHAR(size) 固定長度的字符串, 不規定長度默認值為1
NUMBER(p,s) 數字型p是位數總長度, s是小數的長度, 可存負數
最長38位. 不夠位時會四舍五入.
DATE 日期和時間類型
LOB 超長字符, 最大可達4G
CLOB 超長文本字符串
BLOB 超長二進制字符串
BFILE 超長二進制字符串, 保存在數據庫外的文件里是只讀的.
數字字段類型位數及其四舍五入的結果
原始數值1234567.89
數字字段類型位數 存儲的值
Number 1234567.89
Number(8) 12345678
Number(6) 錯
Number(9,1) 1234567.9
Number(9,3) 錯
Number(7,2) 錯
Number(5,-2) 1234600
Number(5,-4) 1230000
Number(*,1) 1234567.9
2. 創建表時給字段加默認值 和約束條件
創建表時可以給字段加上默認值
例如 : 日期字段 DEFAULT SYSDATE
這樣每次插入和修改時, 不用程序操作這個字段都能得到動作的時間
創建表時可以給字段加上約束條件
例如: 非空 NOT NULL
不允許重復 UNIQUE
關鍵字 PRIMARY KEY
按條件檢查 CHECK (條件)
外鍵 REFERENCES 表名(字段名)
3. 創建表的例子
CREATE TABLE DEPT(
EPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14),
LOC VARCHAR2(13)) ;
CREATE TABLE region(
ID number(2) NOT NULL PRIMARY KEY,
postcode number(6) default '0' NOT NULL,
areaname varchar2(30) default ' ' NOT NULL);
4. 創建表時的命名規則和注意事項
1)表名和字段名的命名規則:必須以字母開頭,可以含符號A-Z,a-z,0-9,_,$,#
2)大小寫不區分
3)不用SQL里的保留字, 一定要用時可用雙引號把字符串括起來.
4)用和實體或屬性相關的英文符號長度有一定的限制
注意事項:
1)建表時可以用中文的字段名, 但最好還是用英文的字段名
2)創建表時要把較小的不為空的字段放在前面, 可能為空的字段放在后面
3)建表時如果有唯一關鍵字或者唯一的約束條件,建表時自動建了索引
4)一個表的最多字段個數也是有限制的,254個.
5. 約束名的命名規則和語法
約束名的命名規則約束名如果在建表的時候沒有指明,系統命名規則是SYS_Cn(n是數字)
約束名字符串的命名規則同於表和字段名的命名規則
6. 使用約束時的注意事項
約束里不能用系統函數,如SYSDATE和別的表的字段比較
可以用本表內字段的比較
想在事務處理后, 做約束的
檢查
SQL> alter session set constraints deferred.
7. 由實體關系圖到創建表的例子 s_dept
前提條件:已有region表且含唯一關鍵字的字段id
SQL> CREATE TABLE s_dept
(id NUMBER(7)
CONSTRAINT s_dept_id_pk PRIMARY KEY,
name VARCHAR2(25)
CONSTRAINT s_dept_name_nn NOT NULL,
region_id NUMBER(7)
CONSTRAINT s_dept_region_id_fk REFERENCES region (id),
CONSTRAINT s_dept_name_region_id_uk UNIQUE(name, region_id));
8. 較復雜的創建表例子
SQL> CREATE TABLE s_emp
(id NUMBER(7)
CONSTRAINT s_emp_id_pk PRIMARY KEY,
last_name VARCHAR2(25)
CONSTRAINT s_emp_last_name_nn NOT NULL,
first_name VARCHAR2(25),
userid VARCHAR2(8)
CONSTRAINT s_emp_userid_nn NOT NULL
CONSTRAINT s_emp_userid_uk UNIQUE,
start_date DATE DEFAULT SYSDATE,
comments VARCHAR2(25),
manager_id NUMBER(7),
title VARCHAR2(25),
dept_id NUMBER(7)
CONSTRAINT s_emp_dept_id_fk REFERENCES s_dept(id),
salary NUMBER(11,2),
commission_pct NUMBER(4,2)
CONSTRAINT s_emp_commission_pct_ck CHECK
(commission_pct IN(10,12.5,15,17.5,20)));
8. 通過子查詢建表
通過子查詢建表的例子
SQL>CREATE TABLE emp_41 AS SELECT id, last_name, userid, start_date
FROM s_emp WHERE dept_id = 41;
SQL> CREATE TABLE A as select * from B where 1=2;
只要表的結構.
10. 用子查詢建表的注意事項
1)可以關連多個表及用集合函數生成新表,注意選擇出來的字段必須有合法的字段名稱,且不能重復。
2)用子查詢方式建立的表,只有非空NOT NULL的約束條件能繼承過來, 其它的約束條件和默認值都沒有繼承過來.
3)根據需要,可以用alter table add constraint ……再建立其它的約束條件,如primary key等.
11. Foreign Key的可選參數ON DELETE CASCADE
在創建Foreign Key時可以加可選參數:
ON DELETE CASCADE它的含義是如果刪除外鍵主表里的內容,子表里相關的內容將一起被刪除.
如果沒有ON DELETE CASCADE參數,子表里有內容,父表里的主關鍵字記錄不能被刪除掉.
12. 如果數據庫表里有不滿足的記錄存在,建立約束條件將不會成功.
13. 給表創建和刪除同義詞的例子
SQL> CREATE SYNONYM d_sum
2 FOR dept_sum_vu;
SQL> CREATE PUBLIC SYNONYM s_dept
2 FOR alice.s_dept;
SQL> DROP SYNONYM s_dept;