前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 ;
如果想保留表的結構,但是清除表中的記錄,可以使用上面的語句,該操作不可恢復。