提示:此文章下的code示例皆在cmd下运行,未借助可视化工具
文章目录
一、Note
1、认识表
1.1、二维表
-
每个列都有自己的名称、类型、宽度、含义
-
每行数据中的列也被称作字段(field)
-
每一行数据被称作一个 元组 或 记录(record)
- 与PL/SQL中的记录不是一个概念
1.2、表名
-
长度控制在30字节以内
-
必须以字母为开头
-
表名中可以包含字母、数字、 下划线、#、$、\
- 但是不赞成主动使用#、$、\
-
表名绝对不可以是单纯的 保留字(如:order / group / by / from / number)
-
表名在当前的命名空间(名称空间)中必须是唯一的
- 每个用户都有自己的namespace来保存自己的对象,namespace定义了一组对象类型,表和视图都存放在同一个namespace中,所以同一个用户的表和视图不能重复,表和索引放在不同的namespace,所以可重名
1.3、列名
- 长度必须控制在30字节以内
- 必须以字母为开头
- 列名中可以包含字母、数字、 下划线
- 列名绝对不可以是单纯的 保留字
- 列名在同一张表中必须是唯一的
1.4、查看表结构
DESCRIBE 表名 ;
DESC 表名 ;
1.5、相关数据字典
tab
user_tables
user_objects
all_tables
select * from all_tables ; 查看当前库的所有数据表
2、数据类型
-
NUMBER
-
表示数字类型
- 整数
- 浮点数
-
用法
NUMBER( precision [ , scale ])
- precision(精度)表示数值类型的最大有效位数,取值范围是 [ 1, 38 ]
- scale(标度)用来确定小数点的位置,取值范围是 [-84,127]
-
-
CHAR
-
表示长度固定的字符域
-
用法
CHAR ( size [ byte | char ])
- size表示字符域的长度(或宽度),其取值范围是 [ 1 , 2000 ]
- byte 或 char 表示单位
- byte 表示字节,char 表示字符
- 如果 size 后未显式指定 byte 或 char ,则默认是 byte
- 当实际位数不足时会自动补空格
-
-
NCHAR
-
VARCHAR2
-
表示长度可变的字符域
-
用法
VARCHAR2 ( size [ byte | char])
- size表示字符域的长度(或宽度),其取值范围是 [ 1 , 4000 ]
- byte 或 char 表示单位
- byte 表示字节,char 表示字符
- 如果 size 后未显式指定 byte 或 char ,则默认是 byte,例:varchar(50)
- 未显式指定 size ,则默认是5
- 当实际位数不足时不会自动填充
-
oracle特有,中英文都占2字节,空串当作null值处理
-
varchar
是标准SQL里的类型,汉字占2字节,英文占1字节,对空串不处理,存放固定长度字符串,范围 [ 1 , 2000 ],在MySQL里用的多
-
-
NVARCHAR2
-
DATE
- 采用 7字节的、长度固定的数字(整数)来表示日期/时间类型
- 7字节中存储了:世纪、年份、月份、小时、分钟、秒
- 用法:birthdate DATE(列名 类型)
-
TIMESTAMP
- 采用7字节或11字节的、长度固定的
- 前7字节的存储与Date类型相同
-
LONG
- 是字符类型
-
CLOB
- 是占位比Long还多的字符类型
-
BLOB
-
oracle有22种数据类型,PL/SQL还有一种
3、创建表
3.1、创建标准表
-
CREATE TABLE 表名( 列名 类型(宽度) [约束] [,列名 类型(宽度) [约束],......] );
3.2、创建临时表
- 所谓临时表是指表中的数据会在会话或事物结束时被清除
- 暂不关注
3.3、CTAS
- 通过查询创建表(备份表)
CREATE TABLE 表名 AS 查询语句 ;
create table t_stu1 as select name as '姓名' , age as '年龄' form t_stu2 where age<20 ;
- 利用t_stu2表中年龄小于20的数据 来 创建t_stu1表
- 新表t_stu1有两列,列名就是这条语句里的列别名
- SQL SERVER中,备份表语句:
select * into 备份表名 from 表名 where 条件;
4、更改表
4.1、增加列
-
ALTER TABLE 表名 ADD(列名 类型(宽度) [约束] ,......) ;
4.2、改列名
-
ALTER TABLE 表名 RENAME COLUMN 原列名 TO 新列名 ;
4.3、修改列类型及添加约束
-
ALTER TABLE 表名 MODIFY (原列名 新类型(新宽度) [新加约束名 新加约束类型] ,......) ;
-
可去掉 modify后面的 ()
-
可修改列的类型、宽度、添加此列约束名及约束类型
-
如果不改类型,只给列添加约束,则可以不写 新类型(宽度)
4.4、删除列
-
ALTER TABLE 表名 DROP (列名 ,......) [ CASCADE constraints ] ;
-
cascade constraints
级联删除约束
5、重命名表
-
ALTER TABLE 原表名 RENAME TO 新表名 ;
-
RENAME 原表名 TO 新表名 ;
6、删除表(回收站)
6.1、删除
-
DROP TABLE 表名 [ CASCADE CONSTRAINTS ] [PURGE] ;
-
cascade constraints
表示同时删除相关的约束 -
purge
表示彻底删除该表而不是将该表删除到回收站(recyclebin) -
如果没有用purge,则该表在回收站中,通过 user_tables 查不到这个表,但通过 tab 可以查到回收站里的表,注意此时回收站里的表名已经修改为默认的名字了
6.2、查看回收站
-
show recyclebin
-
使用 show recyclebin 时不要以 分号; 结束,否则可能导致 SQL*Plus 退出
6.3、清空回收站
-
purge recyclebin
6.4、恢复
-
flashback table 原表名 to before drop ;
-
只有在回收站中存在的表才可以被恢复,注意在回收站里的表的名字是已经被重新改过名了
7、截断表
-
作用
- 将整张表中所有数据全部删除的最好方法
- 就是仅仅保留表结构,其中所有数据统统舍弃(保留列名,删除记录)
-
用法
-
TRUNCATE TABLE 表名 ;
-
二、Code
1、管理表:创建表/CTAS/查看表结构/length()/定长数字域/变长数字域/改表名/删表/回收站/截断表
1、创建表
-
查看表结构 :
DESCRIBE emp ;
-
创建 学生表,其中包括 编号、姓名、性别、出生日期
CREATE TABLE t_students ( id NUMBER(5) , name VARCHAR2(50) , gender CHAR(6) , birthdate DATE );
-
简单插入一些数据
INSERT INTO t_students VALUES ( 1 , '张三丰' , 'male' , sysdate ) ;
2、使用 length 函数获取 name 和 gender 的长度
SELECT name , length( name ) , gender , length( gender ) from t_students ;
- length返回的是字符数,oracle安装时使用的是GBK编码,1个汉字作为1个字符占2字节,1个字母作为1个字符占1字节
- length( name ) ,name类型为varchar2(50),‘张三丰’ 占6字节算3字符,因此length函数返回3
- length( gender ),gender类型为char(6),定长6字节,因此数据 ‘male’ 的length函数返回 6(4字符+2补全的空白字符);数据 ‘男’ 的length函数返回 5 (1个字占2字节算1字符,1+补的4字节空白字符)
3、通过查询一张表创建新的表,CTAS
- 通过查询 emp 表创建一个新表
CREATE TABLE myemp1 AS SELECT empno , ename , job , sal FROM emp ;
- 还可以在查询语句中使用别名来影响新表的列名
CREATE TABLE myemp2 AS SELECT empno id , ename name , job , sal salary FROM emp ;
4、管理表(回收站)
-
尝试修改表名称
ALTER TABLE myemp1 RENAME TO myemp ;
RENAME myemp1 TO myemp ;
-
删除表
-
DROP TABLE t_employees ;
-
SELECT table_name FROM user_tables ;
查不到被删除的表 -
SELECT tname FROM tab ;
查得到被删除的表,此时表名已改变为BIN$XBpSakKxRq+k5r41TQzz+w==$0
,是回收站中的被删除的表,不能查看已删除表的结构 -
DESC BIN$XBpSakKxRq+k5r41TQzz+w==$0 ;
错误:非法的标识符。
-
-
查看回收站中的表 ( 注意,这个命令不要以分号结束,否则导致 SQL*Plus 退出 )
show recyclebin
-
从回收站中恢复已经被删除的表
FLASHBACK TABLE t_employees TO BEFORE DROP ;
-
当回收站中的表都不再被需要时,可以清空回收站
PURGE recyclebin ;
-
删除表时使用 PURGE 实现彻底删除(表不会存在回收站里)
DROP TABLE myemp PURGE ;
5、截断表,就是将表中所有数据统统删除,仅留下表结构(列名)
TRUNCATE TABLE myemp ;
SQL>
SQL> -- 管理表
SQL>
SQL> --
SQL> -- 查看表结构
SQL> DESCRIBE emp ;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> -- 创建 学生表,其中包括 编号、姓名、性别、出生日期
SQL> CREATE TABLE t_students (
2 id NUMBER(5) ,
3 name VARCHAR2(50) ,
4 gender CHAR(6) ,
5 birthdate DATE
6 );
表已创建。
SQL> -- 查看表结构
SQL> DESC t_students ;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
ID NUMBER(5)
NAME VARCHAR2(50)
GENDER CHAR(6)
BIRTHDATE DATE
SQL> -- 先简单插入一些数据
SQL> INSERT INTO t_students VALUES ( 1 , '张三丰' , 'male' , sysdate ) ;
已创建 1 行。
SQL> SELECT * FROM t_students ;
ID NAME GENDER BIRTHDATE
---------- -------------------------------------------------- ------ -------------------
1 张三丰 male 2020-06-19 16:18:43
SQL> -- 使用 length 函数获取 name 和 gender 的长度
SQL> SELECT name , length( name ) , gender , length( gender ) from t_students ;
NAME LENGTH(NAME) GENDER LENGTH(GENDER)
-------------------------------------------------- ------------ ------ --------------
张三丰 3 male 6
SQL> INSERT INTO t_students VALUES ( 2 , '阿里巴巴' , '男' , sysdate ) ;
已创建 1 行。
SQL> -- 使用 length 函数获取 name 和 gender 的长度
SQL> SELECT name , length( name ) , gender , length( gender ) from t_students ;
NAME LENGTH(NAME) GENDER LENGTH(GENDER)
-------------------------------------------------- ------------ ------ --------------
张三丰 3 male 6
阿里巴巴 4 男 5
SQL> -- 因为在 Oracle 创建数据库时使用的字符编码时默认的 GBK ,因此一个汉字占用 两个字节( byte )
SQL>
SQL> -- 汉字 "男" 占用 两个字节后,还差 4 个字节就可以将 gender 补充够 6 个字节,因此在 "男"之后补充了4个空白
SQL>
SQL> -- 所以最后使用 length 统计时,返回的是 5 个字符,因为有 一个汉字 和 四个空白字符
SQL>
SQL> INSERT INTO t_students VALUES ( 3 , '阿凡提' , '靓仔' , sysdate );
已创建 1 行。
SQL> -- 使用 length 函数获取 name 和 gender 的长度
SQL> SELECT name , length( name ) , gender , length( gender ) from t_students ;
NAME LENGTH(NAME) GENDER LENGTH(GENDER)
-------------------------------------------------- ------------ ------ --------------
张三丰 3 male 6
阿里巴巴 4 男 5
阿凡提 3 靓仔 4
SQL> INSERT INTO t_students VALUES ( 4 , '奥斯特洛夫斯基' , '靓仔啊' , sysdate );
已创建 1 行。
SQL> -- 使用 length 函数获取 name 和 gender 的长度
SQL> SELECT name , length( name ) , gender , length( gender ) from t_students ;
NAME LENGTH(NAME) GENDER LENGTH(GENDER)
-------------------------------------------------- ------------ ------ --------------
张三丰 3 male 6
阿里巴巴 4 男 5
阿凡提 3 靓仔 4
奥斯特洛夫斯基 7 靓仔啊 3
SQL>
SQL> -- 通过查询一张表创建新的表
SQL>
SQL> -- 通过查询 emp 表创建一个新表
SQL>
SQL> CREATE TABLE myemp1 AS SELECT empno , ename , job , sal FROM emp ;
表已创建。
SQL> DESC myemp1 ;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
SAL NUMBER(7,2)
SQL> SELECT * FROM myemp1 ;
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7369 SMITH CLERK 800
7499 ALLEN SALESMAN 1600
7521 WARD SALESMAN 1250
7566 JONES MANAGER 2975
7654 MARTIN SALESMAN 1250
7698 BLAKE MANAGER 2850
7782 CLARK MANAGER 2450
7788 SCOTT ANALYST 3000
7839 KING PRESIDENT 5000
7844 TURNER SALESMAN 1500
7876 ADAMS CLERK 1100
7900 JAMES CLERK 950
7902 FORD ANALYST 3000
7934 MILLER CLERK 1300
9257 HUA'AN CLERK 1300
8526 QIU'XIANG ANALYST 1400
已选择16行。
SQL> -- 还可以在查询语句中使用别名来影响新表的列名
SQL>
SQL> CREATE TABLE myemp2 AS SELECT empno id , ename name , job , sal salary FROM emp ;
表已创建。
SQL> DESC myemp2 ;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
ID NOT NULL NUMBER(4)
NAME VARCHAR2(10)
JOB VARCHAR2(9)
SALARY NUMBER(7,2)
SQL> SELECT * FROM myemp2 ;
ID NAME JOB SALARY
---------- ---------- --------- ----------
7369 SMITH CLERK 800
7499 ALLEN SALESMAN 1600
7521 WARD SALESMAN 1250
7566 JONES MANAGER 2975
7654 MARTIN SALESMAN 1250
7698 BLAKE MANAGER 2850
7782 CLARK MANAGER 2450
7788 SCOTT ANALYST 3000
7839 KING PRESIDENT 5000
7844 TURNER SALESMAN 1500
7876 ADAMS CLERK 1100
7900 JAMES CLERK 950
7902 FORD ANALYST 3000
7934 MILLER CLERK 1300
9257 HUA'AN CLERK 1300
8526 QIU'XIANG ANALYST 1400
已选择16行。
SQL> -- 尝试修改表名称
SQL>
SQL> ALTER TABLE myemp1 RENAME TO myemp ;
表已更改。
SQL> DESC myemp1 ;
ERROR:
ORA-04043: 对象 myemp1 不存在
SQL> DESC myemp ;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
SAL NUMBER(7,2)
SQL> RENAME myemp2 TO t_employees ;
表已重命名。
SQL> DESC myemp2 ;
ERROR:
ORA-04043: 对象 myemp2 不存在
SQL> DESC t_employees ;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
ID NOT NULL NUMBER(4)
NAME VARCHAR2(10)
JOB VARCHAR2(9)
SALARY NUMBER(7,2)
SQL>
SQL> -- 尝试删除 t_employees 表
SQL>
SQL> -- 在删除之前先查询当前用户所拥有的所有的表的表名
SQL> SELECT table_name FROM user_tables ;
TABLE_NAME
------------------------------
EMP
DEPT
BONUS
SALGRADE
DUMMY
S_CUSTOMER
S_DEPT
S_EMP
S_IMAGE
S_INVENTORY
S_ITEM
S_LONGTEXT
S_ORD
S_PRODUCT
S_REGION
S_TITLE
S_WAREHOUSE
TABLE_NAME
------------------------------
T_STUDENTS
MYEMP
T_EMPLOYEES
已选择20行。
SQL> DROP TABLE t_employees ;
表已删除。
SQL> -- 在删除之后再次查询当前用户所拥有的所有的表的表名
SQL> SELECT table_name FROM user_tables ;
TABLE_NAME
------------------------------
EMP
DEPT
BONUS
SALGRADE
DUMMY
S_CUSTOMER
S_DEPT
S_EMP
S_IMAGE
S_INVENTORY
S_ITEM
S_LONGTEXT
S_ORD
S_PRODUCT
S_REGION
S_TITLE
S_WAREHOUSE
TABLE_NAME
------------------------------
T_STUDENTS
MYEMP
已选择19行。
SQL> SELECT tname FROM tab ;
TNAME
------------------------------
BIN$XBpSakKxRq+k5r41TQzz+w==$0
BONUS
DEPT
DUMMY
EMP
MYEMP
SALGRADE
S_CUSTOMER
S_DEPT
S_EMP
S_IMAGE
S_INVENTORY
S_ITEM
S_LONGTEXT
S_ORD
S_PRODUCT
S_REGION
TNAME
------------------------------
S_TITLE
S_WAREHOUSE
T_STUDENTS
已选择20行。
SQL> DESC BIN$XBpSakKxRq+k5r41TQzz+w==$0 ;
SP2-0565: 非法的标识符。
SQL> -- 其中的 BIN$XBpSakKxRq+k5r41TQzz+w==$0 就是 回收站中的被删除的表
SQL>
SQL> -- 使用 show recyclebin 命令可以查看回收站中的表 ( 注意,这个命令不要以分号结束,否则导致 SQL*Plus 退出 )
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T_EMPLOYEES BIN$XBpSakKxRq+k5r41TQzz+w==$0 TABLE 2020-06-19:16:39:38
SQL>
SQL>
SQL> -- 如果需要从回收站中恢复已经被删除的表,可以使用 flashback table 语句实现
SQL> FLASHBACK TABLE t_employees TO BEFORE DROP ;
闪回完成。
SQL> -- 通过查询 tab 列出当前用户所拥有的表 ( 包括已经被删除到 回收站 的表 )
SQL> SELECT tname FROM tab ;
TNAME
------------------------------
BONUS
DEPT
DUMMY
EMP
MYEMP
SALGRADE
S_CUSTOMER
S_DEPT
S_EMP
S_IMAGE
S_INVENTORY
S_ITEM
S_LONGTEXT
S_ORD
S_PRODUCT
S_REGION
S_TITLE
TNAME
------------------------------
S_WAREHOUSE
T_EMPLOYEES
T_STUDENTS
已选择20行。
SQL> -- 使用 DROP TABLE 删除表,但未使用 PURGE 选项
SQL> DROP TABLE t_employees ;
表已删除。
SQL> -- 通过查询 tab 列出当前用户所拥有的表 ( 包括已经被删除到 回收站 的表 )
SQL> SELECT tname FROM tab ;
TNAME
------------------------------
BIN$Y8ebA+8tTbOUOQrdcYCO7A==$0
BONUS
DEPT
DUMMY
EMP
MYEMP
SALGRADE
S_CUSTOMER
S_DEPT
S_EMP
S_IMAGE
S_INVENTORY
S_ITEM
S_LONGTEXT
S_ORD
S_PRODUCT
S_REGION
TNAME
------------------------------
S_TITLE
S_WAREHOUSE
T_STUDENTS
已选择20行。
SQL> -- 查看回收站
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T_EMPLOYEES BIN$Y8ebA+8tTbOUOQrdcYCO7A==$0 TABLE 2020-06-19:16:48:17
SQL>
SQL>
SQL> -- 当回收站中的表都不再被需要时,可以清空回收站
SQL>
SQL> PURGE recyclebin ;
回收站已清空。
SQL> show recyclebin
SQL>
SQL>
SQL> -- 通过查询 tab 列出当前用户所拥有的表 ( 包括已经被删除到 回收站 的表 )
SQL> SELECT tname FROM tab ;
TNAME
------------------------------
BONUS
DEPT
DUMMY
EMP
MYEMP
SALGRADE
S_CUSTOMER
S_DEPT
S_EMP
S_IMAGE
S_INVENTORY
S_ITEM
S_LONGTEXT
S_ORD
S_PRODUCT
S_REGION
S_TITLE
TNAME
------------------------------
S_WAREHOUSE
T_STUDENTS
已选择19行。
SQL> -- 删除表时使用 PURGE 实现彻底删除
SQL> DROP TABLE myemp PURGE ;
表已删除。
SQL> -- 通过查询 tab 列出当前用户所拥有的表 ( 包括已经被删除到 回收站 的标 )
SQL> SELECT tname FROM tab ;
TNAME
------------------------------
BONUS
DEPT
DUMMY
EMP
SALGRADE
S_CUSTOMER
S_DEPT
S_EMP
S_IMAGE
S_INVENTORY
S_ITEM
S_LONGTEXT
S_ORD
S_PRODUCT
S_REGION
S_TITLE
S_WAREHOUSE
TNAME
------------------------------
T_STUDENTS
已选择18行。
SQL> show recyclebin
SQL>
SQL> -- CTAS 创建表
SQL> CREATE TABLE myemp AS SELECT * FROM emp ;
表已创建。
SQL> DESC myemp ;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> -- 此处的日期格式是因为之前修改了格式,若退出sqlplus环境就会恢复原来日期格式
SQL> SELECT * FROM myemp ;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 20
7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30
7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30
7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450 10
7788 SCOTT ANALYST 7566 1982-12-09 00:00:00 3000 20
7839 KING PRESIDENT 1981-11-17 00:00:00 5000 10
7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30
7876 ADAMS CLERK 7788 1983-01-12 00:00:00 1100 20
7900 JAMES CLERK 7698 1981-12-03 00:00:00 950 30
7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000 20
7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300 10
9257 HUA'AN CLERK 7839 1985-01-23 00:00:00 1300
8526 QIU'XIANG ANALYST 7839 1985-01-23 00:00:00 1400
已选择16行。
SQL> -- 使用 truncate table 可以截断一张表
SQL> -- 截断表,就是将表中所有数据统统删除,仅留下表结构
SQL>
SQL> TRUNCATE TABLE myemp ;
表被截断。
SQL> SELECT * FROM myemp ;
未选定行
SQL> -- 列名仍存在,只是没有数据
SQL> DESC myemp ;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> spool off
2、更改表:添加列/改列名/修改列/删除列
- 增加列
ALTER T ABLE t_students ADD ( hometown VARCHAR(100) ) ;
- 改列名 ( 重命名列 )
ALTER TABLE t_students RENAME COLUMN hometown TO address ;
- 修改列(可修改列的类型、宽度)
ALTER TABLE t_students MODIFY ( address VARCHAR2(150) ) ;
- 删除列
ALTER TABLE t_students DROP ( address ) ;
SQL> -- 更改表
SQL>
SQL> DESC t_students ;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
ID NUMBER(5)
NAME VARCHAR2(50)
GENDER CHAR(6)
BIRTHDATE DATE
SQL>
SQL> -- 增加列
SQL>
SQL> ALTER TABLE t_students ADD ( hometown VARCHAR(100) ) ;
表已更改。
SQL> DESC t_students ;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
ID NUMBER(5)
NAME VARCHAR2(50)
GENDER CHAR(6)
BIRTHDATE DATE
HOMETOWN VARCHAR2(100)
SQL> -- 改列名 ( 重命名列 )
SQL> ALTER TABLE t_students RENAME COLUMN hometown TO address ;
表已更改。
SQL> DESC t_students ;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
ID NUMBER(5)
NAME VARCHAR2(50)
GENDER CHAR(6)
BIRTHDATE DATE
ADDRESS VARCHAR2(100)
SQL> -- 修改列:可修改列的类型、宽度
SQL> ALTER TABLE t_students MODIFY ( address VARCHAR2(150) ) ;
表已更改。
SQL> DESC t_students ;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
ID NUMBER(5)
NAME VARCHAR2(50)
GENDER CHAR(6)
BIRTHDATE DATE
ADDRESS VARCHAR2(150)
SQL> ALTER TABLE t_students MODIFY ( address CHAR(150) ) ;
表已更改。
SQL> DESC t_students ;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
ID NUMBER(5)
NAME VARCHAR2(50)
GENDER CHAR(6)
BIRTHDATE DATE
ADDRESS CHAR(150)
SQL> ALTER TABLE t_students MODIFY ( address VARCHAR2(150) ) ;
表已更改。
SQL> DESC t_students ;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
ID NUMBER(5)
NAME VARCHAR2(50)
GENDER CHAR(6)
BIRTHDATE DATE
ADDRESS VARCHAR2(150)
SQL> -- 删除列
SQL> ALTER TABLE t_students DROP ( address ) ;
表已更改。
SQL> DESC t_students ;
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
ID NUMBER(5)
NAME VARCHAR2(50)
GENDER CHAR(6)
BIRTHDATE DATE
SQL> spool off