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