lz0-007 读书笔记09
1.數據庫對象
?Oracle數據庫能夠包含多種數據結構。
?每一種結構應該在數據設計中描述,以使它能夠在數據庫開發階段被創建
?常見的數據庫對象有:
? Table:?存儲數據
? View:?來自一個或多個表的數據的子集
? Sequence:?數字值發生器
? Index:?改善一些查詢的性能
? Synonym:?給對象一個可替代的名字
2.Oracle9i 表結構
?表可以在任何時間被創建,即使用戶正在使用數據庫
?不需要指定表的大小,表的大小最終由作為一個整體分配給數據庫的空間的數量定義。但是隨著時間的過去,一個表將使用多少空間是重要的
?表結構能夠被聯機修改
3.表命名和列命名規則:
?必須以字母開始
?必須是1–30 個字符長度
?只能包含A–Z, a–z, 0–9, _, $, 和#
?同一個用戶所擁有的對象之間不能重名
?不能用Oracle 服務器的保留字
?名字都是大小寫不敏感的
?命名原則:
?使用描述性的名字為表和其他數據庫對象命名。
4.CREATE TABLE語句
?為了創建表,用戶必須有CREATE TABLE權限和用于創建對象的存儲區域。
?語法:
?CREATE TABLE [schema.]table_name
?(column_name datatype [DEFAULT default_value_expr] [, ...]);
注:創建表時,必須指定:表名、列名、列數據類型和長度
5.引用另一個用戶的表
?表屬于另一個用戶,不在該用戶的方案中
?在那些表名字的前面使用所有者的名字作為前綴
注:方案(schema)是對象的集合,方案對象直接反映數據在數據庫中的邏輯結構,方案對象包括表、視圖、同義詞、序列、存儲過程、索引、集群、數據庫鏈接等等。
6.DEFAULT選項
?一個列可以用DEFAULT選項給予一個默認值,用于防止在向表中插入數據時輸入空值到該列中
?默認值可以是文字、表達式或SQL函數,例如 SYSDATE、USER 等
?默認值不能是另一個列的名字或偽列,例如 NEXTVAL、CURRVAL 等
?默認值表達式必須與列的數據類型相匹配
7.Oracle 數據庫中的表
?用戶表:
–由用戶創建和維護的表的集合
–包含用戶信息
?數據字典(data dictionary):
–由Oracle 服務器創建和維護的表的集合
–包含數據庫信息
?注意:
全部數據字典表的所有者是用戶SYS。數據字典表的基表很少被用戶訪問,因為其中的信息不容易理解因此,用戶一般是訪問數據字典視圖,因為視圖中的信息是以容易理解的格式表示的。
有四種類型數據字典視圖,每一種有一個特定的前綴來反映其不同的目的。
前綴?說明
----------------------------------------------
USER_?這些視圖包含關于用戶所擁有的對象的信息。
ALL_?這些視圖包含所有用戶可訪問的表 (對象表和相關的表) 的信息。
DBA_?這些視圖是受限制的視圖,它們只能被分配有 DBA 角色的用戶所訪問。
V$?這些視圖是動態執行的視圖,包含數據庫服務器的性能、存儲器和鎖的信息。
8.查詢數據字典
?你可以查詢數據字典表來查看你所擁有的各種數據庫對象。常用的數據字典表有:
? USER_TABLES
? USER_OBJECTS
? USER_CATALOG (有一個稱為CAT的同義詞,可以在SQL語句中用該同義詞代替USER_CATALOG)
?示例:
–查看本用戶所擁有的表的名稱
? SELECT table_name FROM user_tables ;
–查看本用戶所擁有的不同的對象類型
? SELECT DISTINCT object_type FROM user_objects ;
–查看本用戶所擁有的表、視圖、同義詞和序列等
? SELECT * FROM user_catalog ;
9.數據類型
數據類型?說明
----------------------------------------------------------
VARCHAR2(size)?可變長度字符數據(必須指定最大字符數:最小字符數是 1;最大字符數是 4000)
CHAR[(size)]?固定長度字符數據,長度以字節為單位(默認和最小字符數為1;最大字符數 2000)
NUMBER[(p,s)]?數字(p是小數數字的總長度,s是小數點右邊的數字長度;p從1到38,s從-84到127)
DATE??日期和時間值,從公元前4712.1.1到公元9999.12.31
LONG??最大2G的可變長度字符數據
CLOB??最大4G的字符數據
RAW(size)?原始二進制數據(必須指定最大長度,最大長度為2000)
LONG RAW?可變長度原始二進制數據,最大2G
BLOB??二進制數據,最大4G
BFILE??二進制數據存儲在一個外部文件中;最大到4G
ROWID??十六進制串,表示行在所在的表中唯一的行地址。該數據類型主要用于返回ROWID偽列
-----------------------------------------------------------
?關于LONG數據類型:
? 在用子查詢創建表時,LONG列不會被復制。
? LONG 列不能包括在GROUP BY或ORDER BY子句中。
? 在每個表中只能有一個LONG列。
? 在LONG列上不能定義約束。
? 通常用情況下使用CLOB列而不是LONG列。
? Oracle8引入了大對象 (LOB) 數據類型,它可以存儲大的和非結構化的數據,例如文本、圖象、視頻和空間數據,最大4G。LONG列可以容易地移動到LOB列。
10.Oracle9i對日期時間的增強:
?引入了新的日期時間數據類型
?可用新數據類型存儲
?對時區和本地時區的增強
?Oracle9i新增加的日期時間數據類型
------------------------------------------------------------------------------
數據類型??說明
------------------------------------------------------------------------------
TIMESTAMP??允許帶小數秒的時間被作為日期存儲。有一些變異的數據類型
INTERVAL YEAR TO MONTH?允許時間作為年和月的間隔被存儲
INTERVAL DAY TO SECOND?允許時間作為天、小時、分和秒的間隔被存儲
------------------------------------------------------------------------------
11.TIMESTAMP 數據類型
?TIMESTAMP數據類型是DATE數據類型的一種擴展
?它存儲DATE數據類型的年、月和日,加小時、分和秒值,以及秒的小數值
?TIMESTAMP數據類型被指定如下:
?TIMESTAMP[(fractional_seconds_precision)]
?fractional_seconds_precision 表示在秒日期時間域的小數部分的位數,從0到9,默認是6。
12.TIMESTAMP WITH TIME ZONE 數據類型
?TIMESTAMP WITH TIME ZONE是TIMESTAMP的一個變量,它對TIMESTAMP值進行一個時區轉換
?在本地時間和UTC 之間,小時和分鐘的時區轉換是不同的TIMESTAMPIMESTAMP WITH TIME ZONE 數據類型被指定如下:
?TIMESTAMP[(fractional_seconds_precision)] WITH TIME ZONE
13.TIMESTAMP WITH LOCAL TIME ZONE 數據類型
?TIMESTAMP WITH LOCAL TIME ZONE是TIMESTAMP的另一個變量,它對TIMESTAMP值進行一個時區轉換
?存儲到數據庫中的數據,被格式化為數據庫所在的時區
?時區的轉換不被作為列數據的一部分存儲
?即,在查詢時,Oracle以本地會話時區返回數據
?TIMESTAMP WITH LOCAL TIME ZONE 類型的時間數據不是按照字面內容來顯示的
?比如,會話A(屬于時區+3:00)保存了時間數據 8:32,會話B(屬于時區 +5:00)查詢該時間數據時,顯示為 10:32。即A時區的8:32就是B時區的10:32,這里Oracle自動在兩個時區之間進行了轉換。
?TIMESTAMP WITH LOCAL TIME ZONE 數據類型被如下指定:
TIMESTAMP[(fractional_seconds_precision)] WITH LOCAL TIME ZONE
14.INTERVAL YEAR TO MONTH 數據類型
?INTERVAL YEAR TO MONTH 數據類型存儲一個使用年和月時間域的時間段
?INTERVAL YEAR TO MONTH 數據類型可以和 DATE 數據類型進行加減運算
?INTERVAL YEAR TO MONTH 數據類型被如下指定:
?INTERVAL YEAR[(year_precision)] TO MONTH
?year_precision 表示年數字的精度,精度的默認值是2位
?INTERVAL YEAR TO MONTH 數據類型的值可以是以下形式:
?interval 'value' year(precision) to month eg: interval '10-3' year to month ?10年3個月
?interval 'value' year(precision)??? eg: interval '123' year(3)???? ?123年
?interval 'value' month(precision)??? eg: interval '3000' month(4) ?3000個月
注:如果某列的類型為interval year(n) to month,當向該列插入值時,值最大不能超過12*n個月
?
15.INTERVAL DAY TO SECOND 數據類型
?INTERVAL DAY TO SECOND 按照天、小時、分和秒存儲一段時間
?值可以是以下形式:
?INTERVAL '4 5:12:10.222' DAY TO SECOND(3)?4天5小時12分10.222妙(秒精度為3)
?INTERVAL '4 5:12' DAY TO MINUTE??4天5小時12分
?INTERVAL '400 5' DAY(3) TO HOUR??400天5小時
?INTERVAL '11:12:10.2222222' HOUR TO SECOND(7)?11小時12分10.2222222秒(7位精度)
16.用子查詢語法創建表
?用子查詢選項組合CREATE TABLE語句創建表并插入行
?CREATE TABLE table_name [(column, column...)]
?AS subquery;
?原則
? 被創建的表可以帶指定的列名,并且由子查詢返回的行被插入到新表中。
? 字段的定義只能包括列名和默認值。
? 如果給出了指定的列,列的數目必須等于子查詢的SELECT列表的列數目。
? 如果沒有給出了指定的列,表的列名應和子查詢中的列名是相同的。
? 完整性規則不會被傳遞到新表中,僅列的數據類型定義被傳遞到新表中。
注:為了用一個已存在的表的相同結構創建一個新表,而不用舊表的數據,可以用帶WHERE子句(條件永遠為假)的子查詢。
?示例:
?CREATE TABLE COPY_TABLE AS (SELECT * FROM employees WHERE 1 = 2);
17.用ALTER TABLE語句來要改變表的結構:
?添加一個新列
?修改一個已存在的列
?為新列定義一個默認值
?刪除一個列
18.添加新列:
?ALTER TABLE table_name
? ADD(column_name datatype [DEFAULT expr] [, column_name datatype]...);
?添加新列的原則:
? 你可以添加或修改列。
? 你不能指定新添加的列出的位置,新列將成為最后一列。
19.修改列:
?ALTER TABLE table_name
? MODIFY(column_name datatype [DEFAULT expr][, column_name datatype]...);
?原則:
? 你可以增加一個數字列的寬度或精度。
? 你可以增加數字列或字符列的寬度。
? 你可以減少一個列的寬度,但僅在該列中只包含空值或表中沒有行時。
? 你可以改變數據類型,但僅在列中只包含空值時。
? 你可以轉換一個CHAR列到VARCHAR2數據類型,或轉換一個VARCHAR2列到CHAR數據類型,僅當列中只包?含空值時,或者不改變列的大小時。
? 對默認值的改變僅影響以后插入的列。
? 可以改變列的數據類型、大小和默認值
20.刪除列
?ALTER TABLE table_name DROP COLUMN column_name ;
?ALTER TABLE table_name DROP (column_name) ;
?原則:
? 刪除列時,列可以有也可以沒有數據。
? 用ALTER TABLE語句,一次只能有一列被刪除。
? 表被修改后必須至少保留一列。
? 一旦一列被刪除,它不能再恢復。
? 當一列從表中被刪除時,該表中任何其他的被用SET UNUSED選項標記列,也被刪除。
21.SET UNUSED 選項
?用 SET UNUSED 選項標記一個或多個未使用的列
?ALTER TABLE table_name SET UNUSED (column_name) ;
?ALTER TABLE table_name SET UNUSED COLUMN column_name ;
?用 DROP UNUSED COLUMNS 選項刪除被標記為未使用的列
?ALTER TABLE table_name DROP UNUSED COLUMNS ;
注1:SET UNUSED 選項標記一個或多個列作為不使用的。當系統資源緊張時可以被刪除它們,該特性在Oracle8i和以后的版本中有效。
注2:SET UNUSED 子句不會真的從表中刪除目標列 (即,它不會回收這些列所使用的磁盤空間),因此,SET UNUSED 選項標記的執行響應時間會比執行DROP子句快一些。
注3:在一列已經被標記為不使用后,你就不能訪問該列了。
注4:SET UNUSED 信息被存儲在 USER_UNUSED_COL_TABS 字典視圖中。
注5:當你想要從表中的不使用列回收額外的磁盤空間時,可以使用 DROP UNUSED COLUMNS 語句,如果表中不包含不使用列,該語句不返回錯誤
22.刪除表
?DROP TABLE table_name ;
?原則
? 表所有的數據和結構都將刪除。
? 任何與該表相關的視圖和同義詞被保留,但無效。
? 任何未決的事務被提交。
? 只有表的創建者或具有 DROP ANY TABLE 權限的用戶才能刪除表。
? DROP TABLE 語句一旦被執行,就不能回滾(drop table是DDL,自動提交)
23.改變一個對象的名字
?執行 RENAME 語句,改變一個表、視圖、序列或同義詞的名字
?RENAME old_name TO new_name ;
?必須是對象的所有者,才能執行 rename 語句。
24.截斷表
?TRUNCATE TABLE table_name ;
?TRUNCATE TABLE語句:
–刪除表中所有的行
–釋放該表所使用的存儲空間
?使用TRUNCATE TABLE語句后,不能回滾
?作為選擇,可以用 DELETE 語句刪除行
?用TRUNCATE語句刪除行比用DELETE語句刪除同樣的行快一些,原因如下:
? TRUNCATE語句是數據定義 (DDL) 語句,并且不產生回滾信息。
? 截斷一個表不會觸發表的刪除觸發器。
? 如果表是一個引用完整性約束的父表,你不能截斷該表,必須在執行TRUNCATE語句之前禁用約束
25.添加注釋到表中
?用 COMMENT 語句添加注釋到一個表或列中
?COMMENT ON? TABLE table_name | COLUMN table_name.col_name
?IS 'comment content';
?可以用 COMMENT 語句給一個列、表、視圖或快照添加一個最多2K字節的注釋
?可以用設置注釋內容為空字符串 ('') 的辦法,從數據庫中刪除一個注釋
?注釋被存儲在數據字典中,并且可以通過下面的數據字典視圖查看COMMENTS列:
? ALL_COL_COMMENTS
? USER_COL_COMMENTS
? ALL_TAB_COMMENTS
? USER_TAB_COMMENTS
轉載于:https://www.cnblogs.com/zqf620/archive/2007/01/20/625457.html
總結
以上是生活随笔為你收集整理的lz0-007 读书笔记09的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Windows Communicati
- 下一篇: 超经典的存储过程分页 ;-) 引自CSD