接上新手学习详解一知识点。每天学习一点,给自己加油!
(正文):添加列
语法 : 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 的文章