接上新手學習詳解一知識點。每天學習一點,給自己加油!
(正文):添加列
語法 : alter table 表名 add (字段 字段類型) [ default '輸入默認值'] [null/not null]
在空表中可以直接添加非空列
SQL> ALTER TABLE trouble ADD(
condition VARCHAR2(9) NOT NULL DEFAULT 'no',
wind NUMBER(3)
);
在有數據的表中添加非空列會出現 table must be empty to add mandatory (NOT NULL) column 錯誤,因為新添加的列為空,可以先不添加 NO NULL 增加完列後修改這列使之有數據然後再修改列增加 NO NULL
SQL> ALTER TABLE trouble ADD(
condition VARCHAR2(9),
wind NUMBER(3)
);
SQL> UPDATE trouble SET condition='no';
SQL> ALTER TABLE trouble MODIFY(condition VARCHAR2(9) NOT NULL);
更改列
SQL> DESCRIBE trouble;
Name Type Nullable Default Comments
------------- ------------ -------- ------- --------
CITY VARCHAR2(13)
SAMPLE_DATE DATE
NOON NUMBER(4,1) Y
MIDNIGHT NUMBER(4,1) Y
PRECIPITATION NUMBER Y
CONDITION VARCHAR2(9)
WIND NUMBER(3) Y
SQL> ALTER TABLE trouble MODIFY(city VARCHAR2(17));
SQL> DESCRIBE trouble;
Name Type Nullable Default Comments
------------- ------------ -------- ------- --------
CITY VARCHAR2(17)
SAMPLE_DATE DATE
NOON NUMBER(4,1) Y
MIDNIGHT NUMBER(4,1) Y
PRECIPITATION NUMBER Y
CONDITION VARCHAR2(9)
WIND NUMBER(3) Y
設置表只讀
設置表只讀這樣就可以限制表的 INSERT、UPDATE 和 DELETE 操作
SQL> INSERT INTO trouble(city,sample_date) VALUES('武漢',SYSDATE);
1 row inserted
SQL> ALTER TABLE trouble READ ONLY;
Table altered
SQL> INSERT INTO trouble(city,sample_date) VALUES('成都',SYSDATE);
INSERT INTO trouble(city,sample_date) VALUES('成都',SYSDATE)
ORA-12081: update operation not allowed on table "C##CHENSHUN"."TROUBLE"
# 恢復表可讀可寫
SQL> ALTER TABLE trouble READ WRITE;
Table altered
SQL> INSERT INTO trouble(city,sample_date) VALUES('成都',SYSDATE);
1 row inserted
刪除列
刪除列比添加或修改列更復雜,因為 Oracle 必須執行一些額外工作。刪除表中一列很簡單,複雜的是恢復列佔用的空間。將該列標記為 "unused" 稍後再刪除,不會影響性能。如果立即刪除,該操作會影響性能。可以使用 ALTER TABLE命令
SQL> SELECT* FROM trouble;
CITY SAMPLE_DATE NOON MIDNIGHT PRECIPITATION CONDITION WIND
----------------- ----------- ----- -------- ------------- --------- ----
Pleasant Lake 2011-3-21 40.0 -1.3 3.6 no
Pleasant Lake 2011-9-23 92.9 79.6 1.00003 no
Pleasant Lake 2011-12-22 -17.4 -10.4 2.4 no
武漢 2018-1-29 1
成都 2018-1-29 1
SQL> ALTER TABLE trouble DROP COLUMN wind; # 刪除多列 ALTER TABLE trouble DROP (wind,condition);
Table altered
SQL> SELECT * FROM trouble;
CITY SAMPLE_DATE NOON MIDNIGHT PRECIPITATION CONDITION
----------------- ----------- ----- -------- ------------- ---------
Pleasant Lake 2011-3-21 40.0 -1.3 3.6 no
Pleasant Lake 2011-9-23 92.9 79.6 1.00003 no
Pleasant Lake 2011-12-22 -17.4 -10.4 2.4 no
武漢 2018-1-29 1
成都 2018-1-29 1
標記列為 UNUSED,此時該列無法讀取但空間不會釋放,除非使用 DROP 刪除列
SQL> SELECT * FROM trouble;
CITY SAMPLE_DATE NOON MIDNIGHT PRECIPITATION CONDITION
----------------- ----------- ----- -------- ------------- ---------
Pleasant Lake 2011-3-21 40.0 -1.3 3.6 no
Pleasant Lake 2011-9-23 92.9 79.6 1.00003 no
Pleasant Lake 2011-12-22 -17.4 -10.4 2.4 no
武漢 2018-1-29 1
成都 2018-1-29 1
SQL> ALTER TABLE trouble SET UNUSED COLUMN condition;
Table altered
SQL> SELECT * FROM trouble;
CITY SAMPLE_DATE NOON MIDNIGHT PRECIPITATION
----------------- ----------- ----- -------- -------------
Pleasant Lake 2011-3-21 40.0 -1.3 3.6
Pleasant Lake 2011-9-23 92.9 79.6 1.00003
Pleasant Lake 2011-12-22 -17.4 -10.4 2.4
武漢 2018-1-29 1
成都 2018-1-29 1
SQL> ALTER TABLE trouble DROP UNUSED COLUMNS;
Table altered
根據一個表創建另一個表,同時拷貝對應的數據
SQL> CREATE TABLE rain_table AS SELECT city,precipitation FROM trouble WHERE city IS NOT NULL;
Table created
SQL> SELECT * FROM rain_table;
CITY PRECIPITATION
----------------- -------------
Pleasant Lake 3.6
Pleasant Lake 1.00003
Pleasant Lake 2.4
武漢
成都
閱讀更多 三感video 的文章