数据库对象管理 (表)
實驗10表的創(chuàng)建和修改&&答案 http://pan.baidu.com/share/link?shareid=447633&uk=3912660076
SQL Statements
數(shù)據(jù)類型
NUMBER 可以用來表示所有的數(shù)值數(shù)據(jù):
fieldname NUMBER (precision, scale); precision(精確度)是最大長度,scale(范圍)是小數(shù)點后的位數(shù)
VARCHAR2 用來表示變長的字符串?dāng)?shù)據(jù)類型:
fieldname VARCHAR2 (max_length);
CHAR 保存固定長度字符串,最大長度為2KB。
DATE? 保存固定長度的日期數(shù)據(jù)。
BLOB 保存二進(jìn)制大對象,通常用來保存圖像和文檔等二進(jìn)制數(shù)據(jù)。
CLOB 保存字符型大對象。varchar2數(shù)據(jù)類型最多只能保存4000個字符,如果要保存的字符串?dāng)?shù)據(jù)超過此范圍,應(yīng)使用clob數(shù)據(jù)類型。
創(chuàng)建表—數(shù)據(jù)完整性
數(shù)據(jù)完整性是關(guān)系數(shù)據(jù)庫模型的基本原則,是用戶在表上定義的一系列規(guī)則或約束條件,以及在表之間定義的一系列相互關(guān)系。
數(shù)據(jù)完整性的作用:強制要求數(shù)據(jù)庫中只能接受正確的、合理的數(shù)據(jù),防止錯誤的或無效的數(shù)據(jù)被插入到表中。
數(shù)據(jù)完整性分為三類:
實體完整性
參照完整性
用戶定義的完整性
實體完整性:
規(guī)則1:主鍵的各個屬性都不能為空值。
參照完整性:
規(guī)則2:外鍵或者取空值,或者等于被參照關(guān)系中的主鍵的某個值。
用戶定義的完整性:
規(guī)則3:屬性(或?qū)傩越M)的取值應(yīng)當(dāng)滿足用戶定義的約束條件。
Oracle通過為表中的列定義各種約束來實現(xiàn)數(shù)據(jù)完整性
約束(constraint)條件:
Not Null:防止NULL值進(jìn)入到指定的列。(只能定義在列級)
forexample:?...UserName?????Varchar2(40)??? NOT NULL,...(系統(tǒng)命名)
? ...data?????? Data?? CONSTRAINT? constraint_name????NOT NULL?);(自定義命名)
Unique:保證在指定的各列中沒有重復(fù)的值。
forexample:...age???? number?? UNIQUE,...(系統(tǒng)命名)
CONSTRAINT? constraint_name????UNIQUE(age)?);(自定義命名)?????????? ?--->表級
Check:檢查在約束中指定的條件是否得到了滿足。
forexample:...Sex?? varchar2(2)?? not? ?null?? CHECK(Sex='F' or Sex='M'),...
CONSTRAINT??CHK_name ?CHECK(Sex in('F','M'));??? --->表級
Primary key:用來惟一地標(biāo)識出表的每一行,并且防止出現(xiàn)NULL值。一個表只能有一個主鍵約束。
forexample:...BugsBug?? varchar2(8)?? primary key,...
CONSTRAINT? PK_constraint_name????primary key(BugsBug,[agr]...)?);(自定義命名)?????? --->表級
Foreign key:通過使用公共列在表之間建立一種父子關(guān)系。在表上定義的外鍵可以指向其他表的主鍵或者惟一鍵。(可以定義在表級或列級)
forexample:...CONSTRAINT??FK_constraint_name??FOREIGN? KEY(BugsBug)? ?REFERENCES? othertable_name(BugsBug));
?
????? Default : 在表上定義行的默認(rèn)值.
forexample:...Sdept varchar2(15)? default ?'Computer');
?
參數(shù):
FOREIGN KEY: 在表級指定子表中的列
REFERENCES: 標(biāo)示在父表中的列
ON DELETE CASCADE: 當(dāng)父表中的列被刪除時,子表中相對應(yīng)的列也被刪除
ON DELETE SET NULL: 子表中相應(yīng)的列置空
ON DELETE NO ACTION:不進(jìn)行任何操作
約束級別
列級約束
表級約束
添加約束:
?創(chuàng)建表之后如果需要添加約束(除NOT NULL以外),可以用以下語句實現(xiàn):
ALTER TABLE table_name? Add? [CONSTRAINT constraint_name]? Constraint_type(col1,col2,…)? [condition]
只能用modify格式
刪除約束:
?
創(chuàng)建表語法:
create table? table_name
({column_name??? datatype?? [default_expression]?? ?[column_constraint] | [table_constraint]},....)
[tablespace tablespace_name];
注意事項:
如果不指定約束名 Oracle server 自動按照 SYS_Cn 的格式指定約束名
在什么時候創(chuàng)建約束:
建表的同時
建表之后
可以在表級或列級定義約束
可以通過數(shù)據(jù)字典視圖查看約束
?
?查看約束信息:
表的約束信息:desc user_constraints;
列的約束信息:desc? user_cons_columns;
?修改表:
表在創(chuàng)建之后還允許對其進(jìn)行更改,如添加或刪除表中的列,修改表中的列,以及對表進(jìn)行重新命名和重新組織等。
普通用戶只能對自己方案中的表進(jìn)行更改,而具有ALTER ANY TABLE系統(tǒng)權(quán)限的用戶可以修改任何方案中的表。
?Alter table? table_name
?????? Add(newcolumn_name? ?datatype[,…])?????????????????????????? ???????? ???????????? ????//添加列
????? | Modify? column datatype|(column datatype [,...])?????????????????????????????????? ?//修改列
????? | Drop ?[unused? columns]|column??column_name|(column_name1, ...)????? //刪除列
????? | rename? column?? oldcolumn_name ?to ?newcolumn_name?????????????????? ???//重命名列
????? | set unused? (column_name1, column_name1…)?????????????????????????????? ??? // 設(shè)置不可用==》刪除列
?
?查看表的列名:
刪除列:
修改列不可用:
刪除不可用的列: ?ALTER TABLE Users? DROP UNUSED COLUMNS
插入數(shù)據(jù):INSERT?? INTO? ?<表名>??[列名1, 列名2, …, 列名n]?? VALUES? (值1, 值2, …, 值n);
修改數(shù)據(jù):UPDATE?? <表名>?? SET?? ?列名1 = 值1,?...? WHERE? <更新條件表達(dá)式>
刪除數(shù)據(jù):DELETE? FROM? <表名>? WHERE?? <刪除條件表達(dá)式>
?
?COMMIT;?在用DML(INSERT,UPDATE,DELETE)語句對數(shù)據(jù)庫修改之后,需要提交事務(wù)。
?COMMIT WORK;(DELETE)?
?刪除表 :
?
轉(zhuǎn)載于:https://www.cnblogs.com/wjshan0808/archive/2013/05/08/3063798.html
總結(jié)
以上是生活随笔為你收集整理的数据库对象管理 (表)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】如果要像钢铁侠那样看世界,谷歌眼镜
- 下一篇: mysql 索引的统计