Oracle學(xué)習(xí):
基本用途
數(shù)據(jù)庫管理系統(tǒng)(DBMS)組成部分:存儲(chǔ)和檢索數(shù)據(jù)旁振,識(shí)別用戶计贰,創(chuàng)建應(yīng)用孔厉。
啟動(dòng)數(shù)據(jù)庫:
連接數(shù)據(jù)庫工具:sqlplus-----基于命令的sqlplus
Sqlplus 用戶名/密碼 @host_string
舉例:管理員用戶:Cmd---services.msc----sqlplus sys/ as sysdba
密碼:xxx
注意:
凡是sys 用戶聂抢,必須指定身份 身份是 as sysdba? sysoper---不然會(huì)報(bào)錯(cuò)
如果指定了sys的身份? 可以不輸入密碼钧嘶,系統(tǒng)也會(huì)正常登陸,(但是Windows必須管理員身份進(jìn)入)
輸入sys 用戶身份 沒有輸入米么 可以正常登陸的先決條件 必須是從操作系統(tǒng)的管理員
普通用戶:sqlplus scott/tiger? ? ---sqlplus 用戶名/密碼
退出:exit
查詢所有用戶:
select * from all_users;
創(chuàng)建用戶的基本命令
必須是管理員權(quán)限才能創(chuàng)建用戶
創(chuàng)建用戶的命令是:create user 用戶名 identified by 密碼琳疏;
示例:create user lisi identified by lisi;
切換用戶:connect 用戶名/密碼?
示例: connect? lisi/lisi? ? -----
注意:
剛創(chuàng)建用戶不具備任何權(quán)限有决,既:不能連接數(shù)據(jù)庫,必須授予權(quán)限空盼。
點(diǎn)擊切換用戶书幕,會(huì)報(bào)錯(cuò),此時(shí)執(zhí)行3條語句:
connect sys/moon as sysdba;----
grant connect,resource to lisi;----grant保證能連上數(shù)據(jù)庫揽趾, resource保證能獲取資源 這2個(gè)是角色台汇。
connect lisi/lisi
sql*plus
sql全稱是結(jié)構(gòu)化查詢語言
優(yōu)勢:語言結(jié)構(gòu)簡單,功能強(qiáng)大篱瞎,簡單易學(xué)
sql能夠執(zhí)行以下幾種操作:
查詢數(shù)據(jù)
插入數(shù)據(jù)
刪除數(shù)據(jù)
創(chuàng)建和操作數(shù)據(jù)庫對(duì)象
控制對(duì)數(shù)據(jù)庫的訪問
sql語句報(bào)錯(cuò)排查網(wǎng)站:http://ora-code.com
sql分類:
數(shù)據(jù)定義語言(DDL)苟呐,如create,drop俐筋,rename---無法回滾
數(shù)據(jù)操作語言(DML)牵素,如insert,update澄者,delete---可以回滾
數(shù)據(jù)控制語言(DCL)笆呆,如grant,revoke
查詢語言粱挡,如select
事務(wù)控制語言(Transaction Control,TC ),如:commit,rollback,savepoint
sql*plus:是一個(gè)客戶端的應(yīng)用工具赠幕。
查看緩存中的數(shù)據(jù):? l? 或者? list
運(yùn)行緩存中的sql語句:/ 或者? r
n命令使用:如果sql語句出錯(cuò)了,可以使用n询筏,這個(gè)n 的意思是設(shè)置sql*plus中當(dāng)前行劣坊,n就是一個(gè)具體值
語法格式:n
刪除命令:
如果要?jiǎng)h除緩存中的某行,可以使用del命令
語法格式:del n
添加命令:如果想在某一行后面添加一些sql語句屈留,可以使用a(append)局冰,中文意思附加命令测蘑,
語法格式:a? -----a空格空格
示例:如果有多行數(shù)據(jù),想在地二行添加:
? 2
? a? where sno like "%s"
修改命令
如果要修改sql緩存中的語句康二,可以使用c(change)命令碳胳。
語法格式:c? /被修改內(nèi)容/新內(nèi)容
創(chuàng)建表與維護(hù)表
常用數(shù)據(jù)類型
char(length)
varchar2(length)
date
? 語法 insert into? emp? (name,birth)
? 2 values ("zhang",to_date("1999-09-09","yyyy-mm-dd"))
或者insert into emp (name,birth) values ("lili","09-9月-99")
select? sysdate from dual;
integer
存儲(chǔ)整數(shù)? 不能是浮點(diǎn)數(shù)
number(m,n)
存儲(chǔ)浮點(diǎn)數(shù)和整數(shù),m代表存儲(chǔ)的最大位數(shù),n 代表小數(shù)點(diǎn)右邊最大位數(shù)沫勿,如果沒有指定,m和n,那么默認(rèn)存儲(chǔ)38位精度的數(shù)字挨约。
binary_float
binary_double
創(chuàng)建表的語法結(jié)構(gòu):
create table [用戶名.]表名 (列名 數(shù)據(jù)類型 [default 默認(rèn)值]
[,产雹。诫惭。。蔓挖。])
示例:create table A (id varchar2(20) defalult "成都")-----給個(gè)默認(rèn)值成都
創(chuàng)建表和列名的命名規(guī)范
? 必須以英文字母開頭夕土,之后跟大寫或小寫英文字母,或者數(shù)字瘟判,或者#或者$ 或者_(dá)怨绣。注意不能與關(guān)鍵字相同。
通過子查詢創(chuàng)建表
create table B? as select *? from salary;----salary? 是存在的表
修改表結(jié)構(gòu)
1,在一個(gè)表中加入一個(gè)新的列
? alter table 表名 add
? (列名 數(shù)據(jù)類型) [default 默認(rèn)值]
? [,列名拷获。篮撑。。匆瓜。]
? 示例:alter table A add age number(2) default 23
2赢笨,修改在表中已存在的列,
? alter table 表名 modify
? (列名 數(shù)據(jù)類型) [default 默認(rèn)值]
? [驮吱,列名茧妒。。糠馆。]
? 示例:alter table A modify age varchar2(2)
注意:修改表的列的注意事項(xiàng)
可以增加字符類型的列的寬度
只有當(dāng)所有列的值都為空或者表中沒有數(shù)據(jù)時(shí),才可以減少列的寬度
只有當(dāng)所有列的值都為空時(shí)怎憋,才可以改變某一列的數(shù)據(jù)類型
如果 變
某一列的默認(rèn)值又碌,該默認(rèn)值只能影響以后的操作
只有當(dāng)某一列沒有改變?cè)摿械拇笮〉那闆r下,才可以把char類型的列改變成varchar2類型的列绊袋,或者把varchar2類型的列改變成char類型的列
3毕匀,從一個(gè)表中刪除一列,
? alter table 表名 drop column 列名
? alter table A drop column age
刪除表
1癌别,刪除表的數(shù)據(jù)和刪除表結(jié)構(gòu)皂岔,
drop table 表名
特征:刪除表中所有的數(shù)據(jù)行和表結(jié)構(gòu),刪除表的所有索引展姐,如果沒有備份的話躁垛,所刪除的表無法恢復(fù)剖毯,它提交所有的掛起的事務(wù),所有基于該表的視圖和別名依然保留但已無效教馆。
注意:通過drop刪除表時(shí)逊谋,從oracle 10g 開始,被刪除的表放入回收站土铺,這稱為閃回刪除(flashback drop),這樣可以恢復(fù)被刪除的表胶滋,如果你不想將表放入回收站,可以增加一個(gè)"purge",
格式:drop table 表名 [cascade constraints]
[purge]
另外:如果兩個(gè)表有外鍵(約束)關(guān)系悲敷,那么刪除表的時(shí)候究恤,oracle要求刪除所有具有cascade constraints
練習(xí):
? 如何從回收站中恢復(fù)刪除表
? flashback table A to before drop;
? 查詢數(shù)據(jù)庫中所有表
? select *? form cat;
? 存在回收站的表信息語句:show recyclebin
恢復(fù)被刪除的表
只要在drop table 命令中不包含purge,就可以恢復(fù)被刪除的表后德,首先介紹一下數(shù)據(jù)字典視圖user_recyclebin
select original_name,object_name from user_recyclebin;
清空回收站:purge recyclebin
截?cái)啾?/b>
當(dāng)一個(gè)表中數(shù)據(jù)已經(jīng)不再需要時(shí)部宿,可以使用truncate table 語句將他們?nèi)縿h除掉(截?cái)啵湔Z法格式如下:
truncate table? 表名
truncate table 語句有如下特性:
它刪除表中所有的數(shù)據(jù)探遵,但保留表結(jié)構(gòu)窟赏;如果沒有備份的話,刪除的數(shù)據(jù)行無法恢復(fù)箱季;該語句釋放表所占用的磁盤空間涯穷。
插入數(shù)據(jù)操作
當(dāng)往表中添加一行新的數(shù)據(jù)時(shí),需要使用DML語言中的insert? 語句藏雏,其語法格式如下:
insert into 表名 [(列名拷况,列名,,,)]? values (數(shù)值,數(shù)值,,,)
示例:insert into A (id ,name) values (1002,"waqing")
利用子查詢向表中插入數(shù)據(jù)掘殴,其格式如下:
create table 表名[(列名赚瘦,列名,,,)]? as? 子查詢
示例:create table B (id ,name) as select id,name from A
更新數(shù)據(jù)操作
如果要對(duì)數(shù)據(jù)庫中某一行或多行更新數(shù)據(jù),可以使用update語句奏寨。
update 表名 set 列名=數(shù)值[起意,列名=數(shù)值]
[where 條件]
示例:update A set name ="張三",age="23"
刪除數(shù)據(jù)操作
delete from 表名 [where 條件]
示例:delete from? 表名 where? id=1;
oracle 約束
非空(not? null):不為空
唯一(unique):在表中每一行所定義的列病瞳,其列值不能相同
主鍵(primary key):唯一標(biāo)識(shí)表的一行
外鍵(foreign key):用來維護(hù)子表(Child Table)和父表(Parent Table)之間的引用完整性揽咕。
條件(check):表中每行都要滿足該約束條件
添加主鍵:
? 1,create table A (id int,name varchar2(10),constraint pk_a_id primary key(id));
? 2套菜,create table A (id int primary key,name varchar2(10);
? 3,為已創(chuàng)建的表添加:alter table A add constraint PK_A_ID primary key(id)
外鍵約束:
子父關(guān)系亲善,外鍵可以很好的保護(hù)兩表之間的關(guān)系
constraint 外鍵名 foreign key (列名) references 父表 (列名)
插入有數(shù)據(jù)的值,外鍵中的值必須能夠在父表中找到
引用完整性約束(外鍵約束)逗柴,實(shí)現(xiàn)其該約束如下例子:
有如下兩張表他們之間的引用完整性
create table student (id number(5) primary key,name varchar2(10)
constraint fk_stu for)eign key(t_id) references team(T-id))
create table team (td varchar2(20) primary key,tname varchar2(20) )
刪除外鍵:
1,drop table A cacasde constraint purge----刪除無法恢復(fù)
2,alter table A drop constraint fk_id;
rollback---回滾
3,alter table A add constraint fk_player foreign key(game_id) references game_id
非空約束
create table student (id number(5) primary key,name varchar2(20) not null)
另一種方式非空約束實(shí)現(xiàn)方式
alter table student modify name not null
check約束
示例:
創(chuàng)建一張文秘表蛹头,要求如下:要求女性,年齡在18-35歲之間
create table person(id varchar2(5) primary key ,
name varchar2(20),age number,sex varchar2(2),constarint person_age_ck check (age between 18 and 35),constarint person_sex_ck check (sex ="女"))
如何查看約束
1,利用數(shù)據(jù)字典user_constraints 可以查詢用戶模式下的約束信息
查詢:desc user_constraints
col owner for a10
2,利用數(shù)據(jù)字典user_cons_columns可以查看每張表定義的約束是在哪一列上的
col column_name from a10;
col owner for a10;
select owner,constraint_name,table_name,column_name from user_cons_columns;
select 語句
使用算數(shù)表達(dá)式
+-*/ ---
示例:select sno,sage+20 from student;
select a.sno,sname,score from student a,sc b hwere a.sno ="s001" and a,sno=b.sno
連接運(yùn)算符
在sql查詢語句中可以將兩列查詢的結(jié)果連接在一起渣蜗,通過"||"實(shí)現(xiàn)屠尊。
select empno || ename from emp;
where 子句使用
<? >? =? <=? >=? <>? !=? between...and? in like
like:%? 代表0個(gè)或者多個(gè)字符;_代表一個(gè)且只能是一個(gè)字符
示例:
select * from? student where sname like "陳%"
轉(zhuǎn)義(escape)操作符
如果要查詢的字符串含有_或%袍睡,又該怎么處理知染,
解決:可以使用轉(zhuǎn)義關(guān)鍵字來完成,
create table dept_temp as seect * from dept.
insert into dept_temp values(88,"IT_REsearch","beijing")
select * from dept_temp where dname like "IT_%" escape "\"
解釋:定義"\"為轉(zhuǎn)義符斑胜,既在"\"之后的”_“字符已經(jīng)不是通配符控淡,而是它本來的含義,既下劃線止潘。
and or? not
order by? asc? desc