表是數據庫中核心的數據存儲對象。掌握表的創建、修改、復制、重命名、截斷與刪除等 DDL 操作,是 DBA 與開發人員的必備基本功。本文系統梳理常用數據類型、創建語法及六大核心操作場景。
| 類型 | 說明 | 示例 |
|---|---|---|
| NUMBER(p,s) | 定點數,p=精度(1-38),s=小數位 | NUMBER(10,2) |
| VARCHAR2(n) | 變長字符串,最大 4000 字節 | VARCHAR2(50) |
| DATE | 日期時間,精度至秒 | DEFAULT SYSDATE |
| CLOB | 大文本,最大 4GB | 存儲長文檔 |
| BLOB | 二進制大對象 | 存儲圖片/文件 |
| TIMESTAMP | 高精度時間戳,含毫秒/時區 | TIMESTAMP(6) |
CREATE TABLE [schema.]table_name (
column_name datatype [DEFAULT expr] [constraint],
...
);
命名規則: 1-30 字符,字母開頭,可含字母/數字/_/$/#,不可為保留字。
CREATE TABLE member (
mid NUMBER(5),
name VARCHAR2(50) DEFAULT '無名氏',
age NUMBER(3),
birthday DATE DEFAULT SYSDATE,
note CLOB
);
INSERT INTO member(mid, name, age, birthday, note)
VALUES (1, 'test1', 30, TO_DATE('1984-09-23','YYYY-MM-DD'), 'bdqn1');
DESC member; -- 查看結構
SELECT * FROM member;
CREATE TABLE myemp AS SELECT * FROM emp; -- 復制結構+數據
SELECT * FROM myemp;
CREATE TABLE employee AS SELECT * FROM emp WHERE 1=2;
DESC employee; -- 結構一致,0 行
RENAME member TO mldnuser;
SELECT * FROM tab; -- 驗證
TRUNCATE TABLE mldnuser; -- DDL,不可回滾,釋放高水位,速度極快
-- 對比:DELETE FROM mldnuser; -- DML,產生 UNDO,可回滾,不釋放高水位
DROP TABLE myemp; -- 移至回收站(10g+)
DROP TABLE myemp PURGE; -- 直接永久刪除,不進回收站
SELECT * FROM tab; -- 當前用戶所有表/視圖
SELECT table_name FROM user_tables; -- 僅表
DROP TABLE,必須先 RENAME ... TO _bak_yyyymmdd 並驗證無影響後再清理。TRUNCATE 會重置高水位(HWM),導致後續全表掃描極快,但也會使依賴 HWM 的統計信息失效,建議截斷後重新收集統計。DROP/TRUNCATE PARTITION,避免大量 UNDO/REDO 產生。