前6次笔记,都是表的查询操作,查询作为数据库的一个基本操作,我们花了不少的时间。那么本次笔记我们学习,对表的创建和管理,创建表、删除表、修改表、重命名表和清空表。
常见的数据库对象: 表,视图,序列,索引,同义词
之前查询所使用的表emp 、dept 都是Oracle自带的数据库。本次就使用SQL语句来创建我们自己的表。
创建表之前,先了解一下数据库的几种数据类型和表的命名规则。
数据类型:
varchar2 表示的是一个字符串。
number number(n) :表示的是一个整数,数字的长度是n 。
number(n,2)表示的是一个小数,小数点后可以保留两位小数。
date 表示日期的类型,按照标准的日期格式进行存放。
clob 字符数据,最大可达到4G。
blob 表示二进制数据,最大可以存放4G,例如,存放电影,图片。
表名和列名的命名规则:
必须以字母开头;
必须在1-30个字符之间;
必须只能包括含有A-Z ,a-z, 0-9,_,$和#;
不能和用户定义的其他对象重名;
必须不能是Oracle的保留字;
建表的语法:
CREATE TABLE table_name(
列名称1 数据类型 [DEFAULT 默认值] ,
列名称2 数据类型[DEFAULT 默认值] ,
列名称3 数据类型[DEFAULT 默认值] ,
...
)
例:创建emp1表
SQL> create table emp1(
2 id number(10),
3 name varchar2(20),
4 salary number(12 ,2 ),
5 hiredate date
6 );
Table created表emp1创建成功。
除了上面的这这种建表的方式,还有第二种方法,该方法依托于已经存在的表。
基本语法:
CREATE TABLE table_nameAS(子查询) ;
在子查询中,如果写的是select * from emp ,或者是 select enamel , sal , hiredate , (具体的列名) from emp ;除了将emp表中列的结构复制过来,连表中的数据也一起复制过来。如果我们只是想复制一个表的结构,而不复制表的内容,则要添加where 条件,即:select * from emp where 1 = 2 ; 此时,只复制表的结构,不会复制表的内容。
修改表 (ALTER TABLE)
使用alter table 语句可以完成:追加新的列,修改现有的列,为新追加的列定义默认值,删除列,重命名表的
列名等操作。
追加新的列
基本语法:
ALTER TABLE table_name
add ( 列名 数据类型 默认值) ;
例:为表emp1 ,添加email ,20个字符 ,并设置默认值--无地址
SQL> alter table emp1
2 add(email varchar2(20)) ;
Table altered
SQL> desc emp1 ;
Name Type Nullable Default Comments
-------- ------------ -------- ------- --------
ENAME VARCHAR2(10) Y
SAL NUMBER(7,2) Y
HIREDATE DATE Y
EMAIL VARCHAR2(20) Y
修改现有的列
基本语法:
ALTER TABLE emp1
MODIFY (列名 ,数据类型 ) ;
例:将表emp1 中列salary 的数据类型长度改为50
ALTER TABLE emp1
MODIFY (salary number(50) ) ;
删除列
基本语法
ALTER TABLE emp1
DROP cloumn 列名 ;
例:删除上次添加的email列
ALTER TABLE emp1
DROP cloumn email ;
重命名列
基本语法:
ALTER TABLE table_name
RENAME column old_column_name TO new_column_name ;
例:将emp1表中的列salary重命名为sal
ALTER TABLE emp1
RENAME cloumn salary TO sal ;
在一般的开发中,很少会对表的结构进行修改操作,因为在开发的初期,已经对数据库中表的结构进行了充分的设计。
表的删除
基本语法:
DROP TABLE table_name ;
例:删除emp1 表 --- DROP TABLE emp1 ;
表的重命名:
基本语法:
RENAME old_table_name TO new_table_name ;
清除表
基本语法:
TRUNCATE TABLE table_name ;
如果想保留表的结构,但是清除表中的记录,可以使用上面的语句,该操作不可恢复。