今天學習了創建和管理表以及表的約束。
創建表:
表名
列名, 數據類型, 數據類型的大小
create table demo (name varchar(20) )
使用子查詢創建表:
時候用 AS subquery 選項,將創建表和插入數據結合起來
指定的列和子查詢中的列要一一對應
通過列名和默認值定義列
SQL>create table demo2
2 as
3 select ename,sal from emp ;
Default值:
執行insert操作時,可以爲其指定默認值
值、表達式和SQL語句都可以作爲默認值
其他的列名或者是僞列都是非法的
默認值的類型必須和該列的類型一致
CREATE TABLE hire_dates (idNUMBER(8),hire_date DATE DEFAULT SYSDATE);
數據類型:
1、 varchar2(size):可變長字符數據 最大長度爲4000 bytes 可做索引的最大長度爲749
2、 char(size):固定長字符數據 最大長度爲2000bytes
3、 number(p,s):可變字符數據 數字類型 P有效位,S爲小數位
4、 date:日期型數據
5、 long:可變長字符數據,最大可達2G
6、 clob:字符數據,最大可達到4G
7、 raw(long,raw):原始的二進制數據
8、 blob:二進制數據,最大可達到4G
9、 bfile:存儲外部文件的二進制數據,最大可達到4G
10、 rowid:行地址 是一個僞列
ALTERTABLE 語句
使用 ALTER TABLE 語句追加, 修改, 或刪除列的語法.
追加一個新列,新列是表中的最後一列
SQL>alter table demo add (
2 sal number
3 );
表已更改。
可以修改列的數據類型, 尺寸, 和默認值。對默認值的修改隻影響今後對錶的修改
SQL>alter table demo modify (sal varchar2(20));
表已更改。
使用 DROP COLUMN 子句刪除不再需要的列.
SQL>alter table demo drop column sal;
表已更改。
刪除表:
數據和結構都被刪除
所有正在運行的相關事物被提交
所有相關索引被刪除
DROPTABLE 語句不能回滾
SQL>drop table qqq;
改變對象的名稱:
執行RENAME語句改變表, 視圖, 序列, 或同義詞的名稱
必須是對象的擁有者
SQL>rename demo2 to qqq;
清空表:
TRUNCATETABLE 語句:
刪除表中所有的數據
釋放表的存儲空間
TRUNCATE語句不能回滾
可以使用 DELETE 語句刪除數據
SQL>truncate table qqq;
約束:
約束
約束是表一級的限制
如果存在依賴關係,約束可以防止錯誤的刪除數據
約束的類型:
NOTNULL
UNIQUE
PRIMARYKEY
FOREIGNKEY
CHECK
約束規則:
用戶可以自定義約束,也可以使用Oracle Server的sys_cn格式命名約束
約束創建的時機:
創建表的時候,同時創建約束
表結構創建完成後
約束可以定義在列一級,或者是表一級
通過數據字典查看約束
非空性約束與唯一性約束:
createtable checkTable(email varchar2(30) not null,constraint chk_emailunique(email));
insertinto checkTable values ('[email protected]');
會插入一條記錄,如果再插入一條相同的記錄,會報錯,因爲有唯一性約束,當然如果再增加幾個字段,向其它字段中插入信息而不向email中插入任何數據也是會報錯的,因爲有不爲空的約束,如果email有一個默認值就不會出現由於不能爲空而出現的問題了
主鍵約束:
1 create table bookType(
2 bt_id number(9),
3 bt_name varchar2(30),
4 constraint bt_id_pk primary key(bt_id)
5* )
外鍵約束:
1 create table books(
2 bk_id number(9),
3 bk_name varchar2(30),
4 bt_id number(9),
5 constraint bk_id_pk primary key(bk_id),
6 constraint bt_id_fk foreign key (bt_id) references bookType(bt_id) ondelete cascade
7* )
SQL>/
不能刪除有外鍵約束的記錄
外鍵約束(續)
FOREIGNKEY: 在子表中,定義了一個表級的約束
REFERENCES:指定表和父表中的列
ONDELETE CASCADE: 當刪除父表時,級聯刪除子表記錄
ONDELETE SET NULL: 將子表的相關依賴記錄的外鍵值置爲null
SQL>delete from bookType where bt_id=1;
check約束
定義每一行記錄所必須滿足的條件
下面的表達式可以使用在check約束中:
引用CURRVAL, NEXTVAL, LEVEL, 和ROWNUM
調用SYSDATE, UID, USER, 和USERENV 函數
另一個表的查詢記錄
SQL>create table check01(
2 salnumber(3,2)
3 ,
4 constraint sal_ck check(sal>0.2)
5 );