一、數(shù)據(jù)定義語(yǔ)言
數(shù)據(jù)定義語(yǔ)言(DDL)是SQL語(yǔ)言集中負(fù)責(zé)數(shù)據(jù)結(jié)構(gòu)定義與數(shù)據(jù)庫(kù)對(duì)象定義的語(yǔ)言孔庭,由CREATE尺上、ALTER和DROP三個(gè)語(yǔ)法組成材蛛。
二、數(shù)據(jù)庫(kù)對(duì)象
- 數(shù)據(jù)庫(kù)對(duì)象怎抛,是數(shù)據(jù)庫(kù)的組成部分卑吭,有表、約束马绝、索引豆赏、視圖、序列富稻、同義詞掷邦、存儲(chǔ)過(guò)程、函數(shù)等椭赋。
1.表:表是用來(lái)存放用戶數(shù)據(jù)的對(duì)象抚岗,由行和列組成,列就是字段哪怔,行就是表中的記錄宣蔚。
2.約束:保證數(shù)據(jù)完整性的約束,設(shè)置在單個(gè)字段或者多個(gè)最短的組合上认境,寫入這些字段的數(shù)據(jù)必須符合約束的限制胚委。
3.視圖:是一個(gè)命名的查詢,用于改變基表的數(shù)據(jù)顯示叉信,通過(guò)視圖能夠簡(jiǎn)化查詢亩冬,訪問(wèn)方式與表相同。
4.索引:構(gòu)建于表的單字段或者字段組合上茉盏,用于加速對(duì)表中的數(shù)據(jù)進(jìn)行查詢鉴未。
5.序列:產(chǎn)生順序的不重復(fù)數(shù)字串,被作為主鍵約束值的參照鸠姨。
6.同義詞:數(shù)據(jù)庫(kù)對(duì)象的別名铜秆。- Oracle數(shù)據(jù)庫(kù)對(duì)象的命名原則
1.必須由字母開始,長(zhǎng)度在1-30個(gè)字符之間讶迁。
2.名字中只能包含A-Z连茧,a-z,0-9巍糯,_(下劃線)啸驯,$和#。
3.同一個(gè)Oracle服務(wù)器用戶所擁有的對(duì)象名字不能重復(fù)祟峦。
4.名字不能用Oracle的保留字罚斗。
5.名字是大小寫不敏感。
三宅楞、創(chuàng)建表
- 建表語(yǔ)句語(yǔ)法
- 建表語(yǔ)法
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr][, ...]);- 你必須具備
1.CREATE TABLE的權(quán)限
2.一定的存儲(chǔ)空間(ALTER USER 用戶名 QUOTA 尺寸 ON 表空間名字)- 你需要指定
1.表名
列名针姿、列的類型及列的寬度
- DEFAULT選項(xiàng)
- 指定插入或更新數(shù)據(jù)時(shí)袱吆,列的默認(rèn)值
- 合法的值可以是字面值、表達(dá)式或SQL函數(shù)
- 非法的值是另一個(gè)列的名稱或虛擬列
- 默認(rèn)值的數(shù)據(jù)類型必須和列的類型匹配
四距淫、數(shù)據(jù)類型
- 數(shù)據(jù)類型(字符型)
CHAR(size): 固定長(zhǎng)度字符型數(shù)據(jù)绞绒,長(zhǎng)度的大小以字節(jié)為單位,默認(rèn)和最小長(zhǎng)度為1榕暇;最大長(zhǎng)度為2000
VARCHAR2(size): 可變長(zhǎng)度字符數(shù)據(jù)蓬衡,最小長(zhǎng)度為1;最大長(zhǎng)度為4000
CLOB 可變長(zhǎng)度字符數(shù)據(jù)彤枢,最大可存儲(chǔ)4G數(shù)據(jù)
- 數(shù)據(jù)類型(數(shù)值型)
NUMBER 數(shù)值型:可以表示整數(shù)狰晚,也可以表示小數(shù),表數(shù)范圍-10的125次方到10的126次方
NUMBER(n) 整型:
NUMBER(p,s) 數(shù)值型:總長(zhǎng)度為p堂污,小數(shù)位最大為s位家肯,整數(shù)位最大為p-s位,p的范圍從1到38盟猖,s的范圍從-84到127
- 數(shù)據(jù)類型(日期型)
DATE 包括年月日時(shí)分秒
TIMESTAMP 9i后新增的讨衣,精度比DATE更高一些酒来,可以精確到毫秒
- ?數(shù)據(jù)類型(圖片類型)
BLOB 最大可以存儲(chǔ)4G二進(jìn)制的數(shù)據(jù)输钩,可以存放圖片,聲音送火,文件
五娘汞、創(chuàng)建表的幾種方式
- 建表語(yǔ)法創(chuàng)建
CREATE TABLE DOSSIER (
ID NUMBER(4),
CNAME VARCHAR2(20 ),
BIRTHDAY DATE,
STATURE NUMBER(3),
WEIGHT NUMBER(5, 2),
COUNTRY_CODE CHAR(2 ) DEFAULT ‘01’);
- 子查詢語(yǔ)法創(chuàng)建表
- 使用子查詢創(chuàng)建表的語(yǔ)法
CREATE TABLE table[(column, column...)] AS subquery;
- 新表的字段列表必須與子查詢中的字段列表匹配
- 字段列表可以省略
- Select列表中的表達(dá)式列需要給定別名歹茶,如果沒有別名會(huì)產(chǎn)生錯(cuò)誤
CREATE TABLE dept10 AS SELECT empno, ename, sal+1000 newSalary FROM emp WHERE deptno = 10;
- 引用另一個(gè)用戶的表
如果一個(gè)表不屬于當(dāng)前用戶,如果引用它你弦,必須把方案名放在前面惊豺。例如:
scott.emp SELECT * FROM scott.emp
六、修改表
- 修改表的定義
- 添加列語(yǔ)法
ALTER TABLE table ADD (columnname datatype[DEFAULT expr] [, columnname datatype]...);
- 修改列語(yǔ)法
ALTER TABLE table MODIFY(columnname datatype[DEFAULT expr] [, columnname datatype]...);
- 把dossier表性別(sex)列禽作,修改為長(zhǎng)度為2
ALTER TABLE dossier MODIFY ( sex CHAR(2) )
- 添加默認(rèn)值
ALTER TABLE dossier MODIFY ( sex DEFAULT ‘ 男 ’ )
- 刪除列語(yǔ)法
ALTER TABLE table DROP (columnname [,columnname]);
- 添加新列
- 添加列原則
a)可以添加或修改列
b)不能指定新添加列的位置尸昧,新列會(huì)成為最后一列- 如在dossier表上增加性別字段
ALTER TABLE dossier ADD ( sex CHAR(1) )
- 修改已經(jīng)存在的列
- 列的修改可以修改列名,數(shù)據(jù)類型旷偿,長(zhǎng)度烹俗,及默認(rèn)值。
- 修改數(shù)據(jù)類型:已有的行數(shù)據(jù)必須為空萍程。
- 修改長(zhǎng)度原則:
a)字符型修改長(zhǎng)度:當(dāng)長(zhǎng)度向小改時(shí)幢妄,只要是修改后的值能夠容納下當(dāng)前已有數(shù)據(jù)的最大值即可,當(dāng)長(zhǎng)度向大改時(shí)茫负,可以隨意改變蕉鸳。
b)數(shù)值型修改長(zhǎng)度:當(dāng)長(zhǎng)度向小改時(shí),已有行的數(shù)該列必須為空忍法,當(dāng)長(zhǎng)度向大改時(shí)潮尝,可以隨意改无虚。- 修改列的默認(rèn)值:默認(rèn)值的修改不會(huì)影響已經(jīng)存在的行,只會(huì)影響新增加的行衍锚。
- 修改列名:ALTER TABLE表名RENAMR COLUMN 原有列名 TO 新列名
- 刪除列
- 可以用DROP子句從表中刪除列,包括列的定義和數(shù)據(jù)嗤堰。
- 刪除列的原則:
a)列可以有也可以沒有數(shù)據(jù)
b)表中至少要保留一列
c)列被刪除后戴质,不能再恢復(fù)
d)被外鍵引用的列,不能被刪除- 刪除列的用法
刪除列的語(yǔ)法一:
ALTER TABLE emp DROP COLUMN sex
刪除列的語(yǔ)法二:
ALTER TABLE emp DROP ( sex )
刪除表中的兩個(gè)字段:
ALTER TABLE emp DROP ( sex , ename )
七踢匣、刪除表
- 語(yǔ)法:DROP TABLE table
a)只有表的創(chuàng)建者
b)或具有DROP ANY TABLE權(quán)限的用戶才能刪除表
- 刪除表的原則
a)表中的所有數(shù)據(jù)和表結(jié)構(gòu)都被刪除
b)任何視圖和同義詞被保留但是無(wú)效
c)所有與其相關(guān)的約束和索引都被刪除
d)任何未完成的事務(wù)被提交
八告匠、重命名表
- 語(yǔ)法:RENAME old_name TO new_name
a)必須是對(duì)象的所有者
-例子: 將emp 表重新命名為emp1RENAME emp TO emp1
九、截?cái)啾?/h5>
- 語(yǔ)法:TRUNCATE TABLE table
a)執(zhí)行TRUNCATE語(yǔ)句的前提离唬,必須是表的所有者
b)或者有DELETE ANY TABLE系統(tǒng)權(quán)限來(lái)截?cái)啾?/p>
TRUNCATE和DELETE的區(qū)別
1)TRUNCATE是DDL后专,只能刪除表中的所有記錄,釋放存儲(chǔ)空間输莺,使用ROLLBACK不可以回滾戚哎。
2)DELETE是DML,可以刪除指定記錄嫂用,不釋放存儲(chǔ)空間型凳,使用ROLLBACLK可以回滾。
十嘱函、數(shù)據(jù)字典
- 數(shù)據(jù)字典表:有oracle服務(wù)器創(chuàng)建和維護(hù)的表甘畅,通過(guò)數(shù)據(jù)字典,可以很容易了解當(dāng)前用戶的對(duì)象的信息往弓。比如user_tables這個(gè)數(shù)據(jù)字典表疏唾,里面保存當(dāng)前用戶所有的表對(duì)象。
- 數(shù)據(jù)字典表的數(shù)據(jù)是由oracle自動(dòng)維護(hù)的函似。
- 相關(guān)數(shù)據(jù)字典
a)查詢數(shù)據(jù)字典
SELECT table_name
FROM user_tables
b)查看數(shù)據(jù)字典結(jié)構(gòu)
DESC user_tables
a)執(zhí)行TRUNCATE語(yǔ)句的前提离唬,必須是表的所有者
b)或者有DELETE ANY TABLE系統(tǒng)權(quán)限來(lái)截?cái)啾?/p>
TRUNCATE和DELETE的區(qū)別
1)TRUNCATE是DDL后专,只能刪除表中的所有記錄,釋放存儲(chǔ)空間输莺,使用ROLLBACK不可以回滾戚哎。
2)DELETE是DML,可以刪除指定記錄嫂用,不釋放存儲(chǔ)空間型凳,使用ROLLBACLK可以回滾。
a)查詢數(shù)據(jù)字典
SELECT table_name
FROM user_tables
b)查看數(shù)據(jù)字典結(jié)構(gòu)
DESC user_tables