第一篇:數(shù)據(jù)庫總結(jié)
1、(神諭、甲骨文公司)提供的一款關(guān)系型數(shù)據(jù)庫管理系統(tǒng) 使用表格作為存儲(chǔ)數(shù)據(jù)的基本單元
2、在命令行取消設(shè)置折痕
set linesize 數(shù)字
3、在命令行設(shè)置每頁顯示數(shù)據(jù)長度
set pagesize 數(shù)字
4、命令行中的編輯操作
ed 文件名,回車,點(diǎn)擊是,然后在記事本里輸入查詢語句比如:select * from emp 保存退出,最后在命令行輸入 @文件名 點(diǎn)擊回車,就會(huì)執(zhí)行記事本里面的語句
5、查詢不在當(dāng)前用戶下的表必須在表的前面加上用戶名,在數(shù)據(jù)庫中用戶名也叫模式名稱
6、連接操作:
切換用戶
connect 用戶名/密碼 as sysdba 查看當(dāng)前用戶 show user
7、使用'||'可以連接查詢結(jié)果
select '編號(hào)是:' || empno || '的姓名是:'|| ename 員工信息
from emp
8、數(shù)據(jù)庫不在本機(jī)切換用戶的方式
coun /connect 用戶名/密碼
服務(wù)名 as sysdba
9、查看數(shù)據(jù)字典包含的字段
desc dba_users
10、查詢數(shù)據(jù)字典包含的用戶 select username from dba_users
11、由于數(shù)據(jù)庫用戶有些事預(yù)制的,所以狀態(tài)是鎖定的,查看oracle用戶的狀態(tài): select username,account_status from dba_users;
12、對于狀態(tài)是鎖定的用戶,啟用用戶的語句
alter user 用戶名 account unlock
13、管理員數(shù)據(jù)字典
dba_tablespaces,dba_users
14、普通用戶數(shù)據(jù)字典
user_tablespaces,user_users
15、設(shè)置默認(rèn)或臨時(shí)的表空間
alter user 用戶名 default/temporary tablespace 表空間名
16、創(chuàng)建表空間語法
create temporary | tablespace tablespace_name(表空間名)tempfile | datafile 數(shù)據(jù)文件名file.dbf size 大小
17、查看默認(rèn)/臨時(shí)表空間 select default_tablespace,temporary
_tablespace from
dba_user
where
username='system'(管理員的)select default_tablespace,temporary _tablespace from user_user where username='cotts'(普通用戶的)
18、default_tablespace默認(rèn)表空間 temporary _tablespace臨時(shí)表空間
19、查詢表空間
select tablespace_name from dba_tablespaces select tablespace_name from user_tablespaces(普通用戶)20、創(chuàng)建永久表空間
create tablespace test1_tablespace datafile 'test1file.dbf' size 10M
21、創(chuàng)建臨時(shí)表空間
create temporary tablespace temptest1_tablespace tempfile 'tempfile.dbf' size 10M
22、查詢永久表空間包含的字段
desc dba_data_files
23、查詢臨時(shí)表空間包含的字段 desc dba_temp_files
24、設(shè)置聯(lián)機(jī)或脫機(jī)狀態(tài)
alter tablespace tablespace_name(表空間名)online /offline
25、查看表空間的狀態(tài)
select status
from
dba_tablespaces
where
tablespace_name='TEST1_TABLESPACE'
26、設(shè)置只讀或可讀寫的狀態(tài)
alter tablespace tablespace_name(表空間名)read only / read write
read write默認(rèn)
27、往表空間增加數(shù)據(jù)文件
create tablespace tablespace_name(表空間名)add datafile 數(shù)據(jù)文件名file.dbf size 大小
28、刪除表空間的數(shù)據(jù)文件
create tablespace tablespace_name(表空間名)drop datafile 數(shù)據(jù)文件名_file.dbf
29、刪除表空間
(保留數(shù)據(jù))
drop tablespace tablespace_name(表空間名)
30、刪除表空間
(不保留數(shù)據(jù))
drop tablespace tablespace_name(表空間名)
including contents
31、查詢一個(gè)用戶下的所有表
select * from tab
32、windows調(diào)用本機(jī)操作系統(tǒng)的命令
host dir
33、復(fù)制一個(gè)文件
host copy 原文件名
新文件名
34、表空間
表空間是存儲(chǔ)數(shù)據(jù)庫對象的容器,表和表空間之間的關(guān)系就相當(dāng)于文件和文件夾一樣,每次創(chuàng)建數(shù)據(jù)庫的時(shí)候,系統(tǒng)默認(rèn)的創(chuàng)建一個(gè)system系統(tǒng)表空間一個(gè)數(shù)據(jù)庫可以有一個(gè)system表空間,也可以包含若干個(gè)
35、常用的字符類型
char、varchar、varchar2
Varchar2(n):oracle自行定義的類型,兼容性特別,在企業(yè)中一般都是用varchar2
char(n)
用于標(biāo)識(shí)固定長度的字符串,n表示該字符串最大的保存字符個(gè)數(shù)。當(dāng)實(shí)際保存數(shù)據(jù)小于n,在右邊使用空格補(bǔ)齊
Varchar(n):可變字符串,n表示該字符串中最大保存字符的個(gè)數(shù),當(dāng)實(shí)際保存數(shù)據(jù)的個(gè)數(shù)小于n的時(shí)候,則會(huì)按照實(shí)際長度進(jìn)行保存
36、number:可以用來存儲(chǔ)整數(shù)和小數(shù)
Number(參數(shù)):表示最大參數(shù)位數(shù)的數(shù)字
Number(參數(shù)1,參數(shù)2):參數(shù)1代表有效數(shù)字的最大位數(shù),參數(shù)2代表小數(shù)的位數(shù),整數(shù)的最大位數(shù)(參數(shù)1-參數(shù)2)。
37、SQL語句:結(jié)構(gòu)化查詢語言,是專門為操作數(shù)據(jù)庫而建立所做的命令集,功能齊全的數(shù)據(jù)庫語言,通過SQL完成對數(shù)據(jù)庫的任何操作,每一種數(shù)據(jù)庫都不太一樣,都可以使用同一個(gè)Sql語句對數(shù)據(jù)庫進(jìn)行基本操作,掌握SQL語言就可以操作任何的數(shù)據(jù)庫,學(xué)習(xí)的重點(diǎn)
38、DDL數(shù)據(jù)庫定義語句,用來創(chuàng)建,修改刪除表
create、drop、alter DML數(shù)據(jù)操作語句,用來操作表的數(shù)據(jù)。插入。修改,刪除
insert、update、delete DCL(TCL)事務(wù)控制語句,用來管理數(shù)據(jù)庫的事務(wù) commit、rollback DQL數(shù)據(jù)查詢語句,用來查詢所需要的數(shù)據(jù)(重點(diǎn))Select
39、創(chuàng)建表的格式
create
table
表名(列名1 數(shù)據(jù)類型
primary key, 列名2
數(shù)據(jù)類型, 列名n
數(shù)據(jù)類型);40、查看表結(jié)構(gòu)
desc 表名
41、修改格式
update 表名
set 列名1=該列新值,列名2=該列新值…… Where 條件;注意;where前面沒有逗號(hào)
根據(jù)where條件修改表中的數(shù)據(jù),沒有where條件,可以修改表中所有的數(shù)據(jù)
42、刪除語句
delete
from
表名
where 條件
根據(jù)where條件刪除表中對應(yīng)數(shù)據(jù),沒有where條件刪除表中所有數(shù)據(jù)
43、向表中所有的列插入數(shù)據(jù)
insert into 表名 values(列值1,列值2…...)插入的字符串類型必須單引號(hào)
44、查詢表中所有數(shù)據(jù) select * from 表名
修改表名的方法:alter table old_table_name rename to new_table_name
45、向指定的列插入數(shù)據(jù)表名()中列名必須跟values中列值一一對應(yīng)。沒有插入值默認(rèn)為空
insert into 表名(列名1,列名2…..)values(列值1,列值2….)插入的字符串必須單引號(hào)
46、truncate 刪除表中數(shù)據(jù)
truncate
table 表名
直接刪除表中所有的數(shù)據(jù)。而且使用truncate刪除的數(shù)據(jù),永遠(yuǎn)都不能還原。但是刪除速度是最快
47、刪除表
drop
table
表名
48、去掉重復(fù)的列值
distinct
49、查詢某些列的所有數(shù)據(jù)
select
列名1,列名2,列名3…………...from 表名
50、刪除表中字段(批量刪除)
alter table 表名 drop(字段1,字段2,..)也可以單個(gè)刪除
刪除表中的字段(單個(gè)刪除)
alter table 表名 drop column 字段名
51、oracle下修改字段長度的語法
alter table 表名 modify 字段名 類型(長度);
52、修改字段名語法
alter table 表名 rename column 原字段名 to 新字段名
53、向表中添加新字段
alter table 表名 add(字段1 類型 [NOT NULL],字段2 類型 [NOT NULL],....)
54、給表起別名
在多表的連接查詢中,建議每一張都起一個(gè)別名,通過別名指向?qū)?yīng)的表中的列,避免出現(xiàn)多個(gè)表之間列名一致
select 別名.列名1,別名2.列名2,別名3.列名3......from 表名 別名
55、使用as給列起別名
select 列名1 as 別名1,列名2 as 別名2.....from 表名
56、使用空格給列起別名
select 列名1 別名1,列名2 別名2....from 表名
57、排序
對查詢返回的結(jié)果,根據(jù)某一個(gè)列或者某幾個(gè)列進(jìn)行升序或者降序
格式1:
select 列名/* from 表名 where 條件
order by 列名 desc/asc
格式2:
select 列名 /* from 表名 where 條件
order by 列名1 asc/desc,列名2 asc/desc desc降序
asc升序、默認(rèn)值 排序永遠(yuǎn)是最后被執(zhí)行的
58、可以使用別名進(jìn)行排序
select 列名1 別名1,列名2 別名2 from 表名 where 條件
order by 別名
desc/asc
59、帶條件的查詢
select
列名/*
from
表名 where條件
60、可以使用序號(hào)進(jìn)行排序
select ename,empno,sal from emp order by 3 desc 用的是sal排序
61、關(guān)系運(yùn)算符:>,>=,<,<=,=(等于),!=(不等于)或者<>(不等于)
判斷該列列值是否為null為null:
is null
不為null: is not null 62、模糊查詢:
like是,包含的意思
%:指代0個(gè)或多個(gè)字符
_:指代任意一個(gè)字符
not like 不包含,不是的 意思
63、nvl函數(shù)
專門處理空值的問題
64、使用‘+’連接數(shù)字和null返回的結(jié)果也為null 65、nvl(數(shù)字/列名,數(shù)值);如果該列的列值為null,返回?cái)?shù)值;如果該列的列值不為null,則返回該列的列值
nvl(列名,0)66、nvl2(數(shù)字/列,返回結(jié)果一(不為null顯示),返回結(jié)果二(為null顯示))67、nullif(表達(dá)式一,表達(dá)式二)
判斷表達(dá)式是否相等,如果相等返回null,不相等返回表達(dá)式一 68、select case 列/數(shù)值 then 表達(dá)式1 then 顯示結(jié)果1
then 表達(dá)式2 then 顯示結(jié)果2 …
else 表達(dá)式n end 別名 from 表名
如果數(shù)值/列等于表達(dá)式1則顯示結(jié)果1 如果等于表達(dá)式2則顯示結(jié)果2,如果都不等于。則執(zhí)行表達(dá)式n 69、select decode(列/表達(dá)式,值1,輸出結(jié)果1,值2,輸出結(jié)果2….默認(rèn)值)別名
from 表名
如果表達(dá)式/列的值等于值1,輸出結(jié)果1,如果等于值2,輸出結(jié)果2,如果兩者都不滿足輸出默認(rèn)值 所有條件都要判斷否則顯示為null 70、select coalesce(表達(dá)式1,表達(dá)式 2,表達(dá)式3….表達(dá)式n)coalesce主要對null進(jìn)行操作,如果表達(dá)式1為null,顯示表達(dá)式2的內(nèi)容,如果表達(dá)式2為null,顯示表達(dá)式3的內(nèi)容,如果執(zhí)行到最后還是null,那么最終結(jié)果就顯示null 71、邏輯運(yùn)算符: and 與
,or或,not非
72、between 初值
and 終值
求出初值到終值之間滿足條件的列值 73、where 列名 in(列值1,列值2,列值3...)
在什么范圍
74、where 列名 not in(列值1,列值2...)不在什么范圍 75、any
where 列名 =any(列值1,列值2,列值3...)與in相同(然而<>any不等價(jià)于not in
where 列名
>any(列值1,列值2,列值3...)比子查詢結(jié)果中最小的要大(包含了>=any)
76、some和any用法相同
where 列名
77、<>any返回的是表中的全部數(shù)據(jù) <>all等價(jià)于not in(但是=all并不等價(jià)于in) >all比子查詢中值最大的還要大(還包含了>=all) 79、空數(shù)據(jù)判斷exists SQL提供的判斷子查詢是否有數(shù)據(jù)返回,如果有數(shù)據(jù)返回,exists結(jié)構(gòu)則返回true,否則返回false select * from emp where exists(select * from emp where empno=9999)沒有結(jié)果返回 select * from emp where exists(select * from emp) 80、not exists select * from emp where not exists(select * from emp where empno=9999) select * from emp where not exists(select * from emp)沒有結(jié)果返回 81、聚合函數(shù)(分組函數(shù)) count()數(shù)據(jù)總數(shù) sum()求和 max() 最大值 min()最小值 avg()平均值 count(*/列名):*,求出該表中總的數(shù)據(jù)的條數(shù); 列名,查詢該列不為null的列值的個(gè)數(shù) sum(列名):求出該列所有列值的累加之和 max(列名);求出該列的最大值 min(列名):求出該列的最小值 avg(列名):求出該列的平均值 median(列):求出中間值 variance(列):返回方差 stddev(列):返回標(biāo)準(zhǔn)差 82、多字段分組 格式: select 分組字段1,分組字段2,列名/聚合函數(shù) from 表名 where 條件 group by 分組字段1,分組字段2...order by 列名/聚合函數(shù)/別名 asc/desc select d.dname,d.loc,d.deptno, nvl(count(e.empno),0),nvl(max(e.sal),0)最高工資,nvl(min(e.sal),0)最低工資,nvl(round(avg(e.sal),2),0)平均工資 from emp e,dept d where d.deptno=e.deptno(+) group by d.dname,d.loc,d.deptno 83、字符處理函數(shù) lower(字符串/列名);把字符串/列值中所有的大寫字母改成小寫字母 dual:虛擬表,專門用來進(jìn)行測試的表 upper(列名/字符串):把列值/字符串中所有的小寫字母改成大寫字母 length(列名/字符串):統(tǒng)計(jì)當(dāng)前列值/字符串中字符的個(gè)數(shù) select ename,job,lower(ename),lower(job) from emp select upper('ximenchunxue')from dual select ename,length(ename)from emp 84、給出一個(gè)整數(shù)并返回與之對應(yīng)的字符串 CHR(數(shù)字)返回與指定字符對應(yīng)的十進(jìn)制數(shù)字 ASCII('字符')首字母大寫函數(shù) INITCAP(列/字符串)85、在左或右填充指定長度的字符串 LPAD('列/字符串',總長度,'填充字符')RPAD('列/字符串',總長度,'填充字符')還可以組合使用 86、查找函數(shù) instr(列/字符串,查找的字符串,開始位置,出現(xiàn)位置) 87、替換函數(shù) replace(列名/字符串,指定字符,新的字符串) select replace('ename','e','-')from dual 88、substr(參數(shù)1,參數(shù)2,參數(shù)3):截取字符串 參數(shù)1:列名/字符串,指定要截取的列或者字符串 參數(shù)2;如果為正數(shù)表示從正數(shù)的標(biāo)號(hào)開始截取,起始是1,比如參數(shù)2(5),從第五個(gè)字母開始截取。反之如果為負(fù)數(shù)表示從倒數(shù)第幾個(gè)字符開始截取,比如參數(shù)2(-3),表示從倒數(shù)第三個(gè)字符開始截取。參數(shù)3:表示要截取字符的個(gè)數(shù) 沒有參數(shù)3表示截取所有 89、求出emp表中ename的最后3個(gè)字符(兩種方法) 第一種方法 select substr('ename',-3,3)from emp 第二種方法 select substr('ename',length('ename')-2,3)from emp 90、TRIM(列名/字符串):刪除列刪除列值/字符串兩端的空格 select trim(' liu ying ')from emp 91、去掉左或右的空格 LTRIM('字符串')RTRIM('字符串')92、連接(串聯(lián))字符串: 使用|| 連接多個(gè)字符串 93、concat(字符串1,字符串2): 串聯(lián)字符串 94、to_char();把其他類型的數(shù)據(jù)轉(zhuǎn)換為字符類型 95、數(shù)值處理函數(shù) sqrt(數(shù)值);求出平方根 mod(參數(shù)1,參數(shù)2):求出余數(shù) floor(數(shù)值);向下取整截?cái)?/p> (變?。?/p> ceil(數(shù)值):向上取整 (變大)power(底數(shù),指數(shù)):求出乘方 abs(數(shù)值):求出絕對值 round(數(shù)值,位數(shù)):四舍五入函數(shù) 如果位數(shù)為正數(shù),保留幾位小數(shù),如果位數(shù)為0,則只保留正數(shù),如果位數(shù)為負(fù)數(shù),則表示小數(shù)點(diǎn)前第幾位進(jìn)行四舍五入。如果不指定位數(shù)則從小數(shù)點(diǎn)后面四舍五入 sign(數(shù)值):標(biāo)記性函數(shù),如果數(shù)值是正數(shù),返回值是1,如果數(shù)值是0,返回值是0,如果數(shù)值是負(fù)數(shù),返回值是-1 96、trunc:截取函數(shù) trunc(數(shù)值,參數(shù)):如果參數(shù)為正數(shù),表示保留幾位小數(shù),如果參數(shù)為0,表示舍棄所有的小數(shù),如果參數(shù)為負(fù)數(shù),表示對小數(shù)點(diǎn)前第幾位舍棄。如果不指定參數(shù),表示從小數(shù)點(diǎn)后面全部舍棄。97、having 子句 跟group by 結(jié)合使用,對分組以后的數(shù)據(jù)進(jìn)行再次過濾 格式1: select 列名/聚合函數(shù) from 表名 where 條件 ;對表中所有數(shù)據(jù)進(jìn)行過濾 group by 列名 having 子句;對分組后的數(shù)據(jù)進(jìn)行過濾 order by 列名/別名/聚合函數(shù) asc /desc 98、也可以和多字段分組結(jié)合 格式2: select 字段1,字段2...,列名/聚合函數(shù) from 表名 where 條件 ;對表中所有數(shù)據(jù)進(jìn)行過濾 group by 字段1,字段2...having 子句;對分組后的數(shù)據(jù)進(jìn)行過濾 order by 列名/別名/聚合函數(shù) asc /desc 列出至少有一個(gè)員工的部門編號(hào),名稱,并統(tǒng)計(jì)這些部門的平均工資,最高工資,最低工資 select d.dname,d.deptno,round(avg(e.sal),2), max(e.sal),min(e.sal) from dept d ,emp e where d.deptno=e.deptno(+) group by d.dname,d.deptno having count(e.empno)>1 分析:首先執(zhí)行where條件,對表中所有的數(shù)據(jù)進(jìn)行過濾,然后執(zhí)行g(shù)roup by,根據(jù)某一組對余下的數(shù)據(jù)進(jìn)行分組,之后使用having子句對分組后的數(shù)據(jù)再次進(jìn)行過濾。最后使用order by 進(jìn)行排序 having子句中經(jīng)常跟聚合函數(shù)結(jié)合使用 99、案例:顯示非銷售人員的工作名稱以及從事同一工作的員工的月工資總和,并且要滿足從事同一工作的員工的月工資總和大于5000,輸出結(jié)果按月工資總和升序排列 select distinst job ,sum(sal)月工資總和 from emp where job<>'clerk' group by job having sum(sal)>5000 order by 月工資總和 100、from子句中子查詢 要求查出每個(gè)部門編號(hào),名稱,地址,部門人數(shù),平均工資 select d.deptno,d.dname,temp.count,temp.avg from dept d,(select deptno dno,count(sal)count,round(avg(sal),2)avg from emp group by deptno)temp where d.deptno=temp.dno(+) 思想:把聚合函數(shù)和列值分開查詢先查詢聚合函數(shù),對查詢的結(jié)果起別名,最后查詢列值,temp表可以看成一個(gè)臨時(shí)表,temp是臨時(shí)表的別名 案例、查詢出所有在銷售部門sales的員工的編號(hào),姓名,職位,獎(jiǎng)金,基本工資,入職日期,部門最高工資,部門最低工資 select e.empno,e.ename,e.sal,e.comm,e.job,e.hiredate, temp.max,temp.min from emp e,(select deptno dno,max(sal)max,min(sal)min from emp group by deptno)temp where e.deptno=(select deptno from dept where dname ='SALES')and e.deptno=temp.dno 思想:把聚合函數(shù)和列值分開查詢先查詢聚合函數(shù),對查詢的結(jié)果起別名,最后查詢列值,temp表可以看成一個(gè)臨時(shí)表,temp是臨時(shí)表的別名 案例、查詢出所有薪資高于公司平均薪資的員工編號(hào),姓名,職位,入職日期,所在部門名稱,地址,、上級領(lǐng)導(dǎo)姓名公司的工資等級,部門人數(shù),平均工資,平均服務(wù)年限 select e.empno,e.ename,e.hiredate,d.dname,d.loc,m.ename,s.grade,temp.count,temp.avg,temp.avgyear from emp e,dept d,salgrade s,emp m,(select deptno dno ,count(empno)count, round(avg(sal),2)avg, round(avg(months_between(sysdate,hiredate)/12),2)avgyear from emp group by deptno)temp where e.sal >(select avg(sal)from emp)and e.deptno=d.deptno and e.sal between s.losal and s.hisal and e.deptno=temp.dno and e.mgr=m.empno(+) 101、select子句查詢和from子句查詢: from子句是把聚合函數(shù)放到from中 select 子句是把聚合函數(shù)放到select語句里面 102、with子句 使用with子句將emp表中的數(shù)據(jù)定義為臨時(shí)表 with e as(select * from emp)select * from e;103、查詢中每個(gè)部門的編號(hào),名稱,地址,人數(shù),平均工資 with e as(select deptno dno,count(empno)count, round(avg(sal),2)avg from emp group by deptno)select d.deptno,d.dname,d.loc,e.count,e.avg from e,dept d where d.deptno=e.dno(+)104、每個(gè)部門工資最高的員工編號(hào),姓名,職位,入職日期,工資,部門編號(hào),部門名稱,按照部門編號(hào)升序 with x as(select deptno dno,max(sal)max from emp group by deptno)select e.empno,e.ename,e.job,e.hiredate,e.sal,d.dname,d.deptno from x,emp e,dept d where e.deptno=x.dno and x.max=e.sal and d.deptno=x.dno order by d.deptno 105、約束 設(shè)計(jì)表的時(shí)候,提前添加一些限制(條件),只有滿足這些條件的數(shù)據(jù)可以插入到表中,這些限制(條件)就是約束,只能滿足這些約束的數(shù)據(jù)可以真正保存到表中 1.主鍵約束 2.唯一約束 3.檢查約束 4.默認(rèn)值約束 5.外鍵約束 6.非空約束 106、主鍵約束 被主鍵約束修飾的列,該列的列值必須非空而且唯一,通過主鍵約束來避免表的數(shù)據(jù)出現(xiàn)冗余(重復(fù)的數(shù)據(jù)) 1.一個(gè)表中只能有一個(gè)主鍵(約束) 2.使用主鍵修飾一個(gè)列或者多個(gè)列的組合值,修飾多個(gè)列的組合值,稱為聯(lián)合主鍵或者復(fù)合主鍵 106、創(chuàng)建表的時(shí)候指定主鍵名字 create table worker2(id number(4)constraint pk_w2_id primary key, name varchar2(50))107、創(chuàng)建表的時(shí)候設(shè)置聯(lián)合主鍵 create table worker3(id number(4), name varchar2(50), age number(3), address varchar2(50), constraint pk_w3_id_name primary key(id,name)) 108、修改表的時(shí)候設(shè)置主鍵約束 alter table 表名 add constraint 約束名 primary key(列名1,列名2...) 109、刪除主鍵 只能用來刪除主鍵 格式: alter table 表名 drop primary key 可以刪除大部分約束 格式: alter table 表名 drop constraint 約束名 110、唯一約束 用來指定一個(gè)列或者多個(gè)列的組合值具有唯一性,防止在該列中輸入重復(fù)的列值,一張表中可以有多個(gè)唯一約束 1.使用唯一約束修飾的列,該列的列值可以為空值 2.不能使用唯一約束修飾主鍵所在的列。111、修改表的時(shí)候設(shè)置唯一約束 格式: alter table 表名 add constraint 約束名 unique(列名1,列名2,列名3...) 112、主鍵約束和唯一約束的區(qū)別 1.一張表中只有一個(gè)主鍵約束,但是可以有多個(gè)唯一約束 2.主鍵約束修飾的列,該列的列值必須不能為null,而被唯一約束修飾的列,該列列值可以為null 113、刪除唯一約束 alter table 表名 drop constraint 約束名 114、檢查約束 用于限定某列的值必須要滿足什么條件,只有滿足特定條件的數(shù)據(jù)才可以插入進(jìn)去,避免用戶輸入一些非法的數(shù)據(jù) 1、創(chuàng)建表的時(shí)候設(shè)置檢查約束 create table worker10(id number(4)primary key, name varchar2(50)unique, sex char(2)check(sex in('男','女')), age number(3), email varchar2(50)) 2、修改表的時(shí)候指定檢查約束 格式: alter table 表名 add constraint 約束名 check(約束名) 115、刪除檢查約束 格式: alter table 表名 drop constraint 約束名 116、默認(rèn)值約束 系統(tǒng)默認(rèn)為列設(shè)置的數(shù)值,如果在執(zhí)行insert語句中,該列沒有插入列值,使用默認(rèn)值作為該列的列值,而且每一個(gè)列只能設(shè)置一個(gè)默認(rèn)值。 117、創(chuàng)建表時(shí)候設(shè)置默認(rèn)值約束 create table worker14(id number(4)primary key, name varchar2(50), age number(3)default 20, salary number(7,2)default 5000) 118、修改表時(shí)候設(shè)置默認(rèn)值 alter table 表名 modify 列名 數(shù)據(jù)類型 default 默認(rèn)值 119、刪除默認(rèn)值:--使用modify 把默認(rèn)值設(shè)置為null alter table 表名 modify 列名 數(shù)據(jù)類型 default null 120、非空約束 該列的列值不能為空(null) 121、創(chuàng)建表的時(shí)候設(shè)置非空約束 create table worker15(id number(4)primary key, name varchar2(50)not null unique, age number(3), address varchar2(50)) 122、修改表的時(shí)候設(shè)置非空約束 使用modify,可以設(shè)置多個(gè)列的非空約束 alter table 表名 modify(列名1 not null)modify(列名2 not null)....modify(列名n not null) 123、刪除非空約束 使用modify,可以刪除多個(gè)列的非空約束 alter table 表名 modify(列名1 null)modify(列名2 null)…… modify(列名n null) 124、外鍵約束 用于維護(hù)兩張表之間的關(guān)聯(lián)關(guān)系,被外鍵約束所修飾的列該列的列值必須跟與之關(guān)聯(lián)另外一張表中,主鍵所在的列的列值對應(yīng) 子表:外鍵所在的表,稱為子表 父表/主表:沒有外鍵的表,稱為父表。 當(dāng)執(zhí)行插入操作的時(shí)候,要先往主表中插入數(shù)據(jù),然后在往子表中插入數(shù)據(jù) 外鍵的作用就是維護(hù)兩張表之間的關(guān)聯(lián)的關(guān)系,外鍵所修飾的列值,必須參照與之關(guān)聯(lián)的主表中主鍵所在的列的列值 125、序列 序列是oracle中的一個(gè)數(shù)據(jù)庫對象,通過序列可以生成自動(dòng)增長的數(shù)字,經(jīng)常使用序列生成的數(shù)字作為主鍵所在列的列值 創(chuàng)建序列的格式 create sequence 序列名 126、nextval:第一次使用nextval返回是默認(rèn)值(如果不設(shè)置默認(rèn)值,默認(rèn)情況返回是1),之后每次調(diào)用nextval都生成一個(gè)自增的數(shù)字 select id_seq1.nextval from dual currval:獲得序列當(dāng)前的值 select id_seq3.currval from dual 127、序列的初始值 start with 初值 第一次使用nextval的時(shí)候,返回的就是初值 增長的步長(每次使用nextval,生成數(shù)據(jù)的增量,默認(rèn)步長是1 increment by 增量 序列最大值 : maxvalue 最大值 序列最小值: minvalue 最小值 create sequence id_seq4 start with 100 increment by 10 minvalue 1 maxvalue 100000000 128、索引 索引是建立在表中列上的數(shù)據(jù)庫對象,用于提高數(shù)據(jù)查詢的速度,而且索引一旦被創(chuàng)建以后就會(huì)被oracle系統(tǒng)指定進(jìn)行維護(hù),在查詢語句中不需要指定使用的是哪一個(gè)索引 create table worker12(id number(4)primary key, name varchar2(50)unique) 1)一種提高查詢效率的機(jī)制,提高索引可以最大化提高查詢的速度 2)主鍵所修飾的列,系統(tǒng)會(huì)默認(rèn)添加一個(gè)索引。3)使用唯一約束修飾的列,系統(tǒng)會(huì)默認(rèn)添加一個(gè)索引 129、索引的創(chuàng)建 格式 create index 索引名名稱 on 表名(列名) 刪除索引 drop index索引名稱 130、索引的優(yōu)點(diǎn)和缺點(diǎn) 優(yōu)點(diǎn):提高查詢速度 缺點(diǎn): 1.索引會(huì)占用磁盤空間 2.索引會(huì)提高查詢數(shù)據(jù)的速度,但是減緩了對數(shù)據(jù)的修改(insert ,update,delete)速度 131、事物 把對表的一系列操作封裝到一個(gè)事務(wù)中,要么一起成功,要么一起失敗 commit:提交事物,執(zhí)行commit把之前對表中所有的操作,真實(shí)發(fā)生修改,在數(shù)據(jù)庫底層真正修改數(shù)據(jù)。 rollback:回退(回滾)之前所有未提交(commit)的操作。撤銷之前沒有提交修改的操作(insert。update,delete) 132、關(guān)聯(lián)查詢 所需要查詢的數(shù)據(jù)來源于多張表,通過關(guān)聯(lián)查詢,在同一條SQL語句查詢多張表的信息 格式 select 別名1.*/列名,別名2.*/列名...from 表1 別名1,表2 別名2 where 關(guān)聯(lián)條件 笛卡爾積:在關(guān)聯(lián)查詢中,如果沒有加入關(guān)聯(lián)條件,兩張表中數(shù)據(jù)會(huì)進(jìn)行任意的組合,這種現(xiàn)象稱為笛卡爾積。笛卡爾積是數(shù)學(xué)中的一個(gè)概念在關(guān)聯(lián)查詢中,必須要避免出現(xiàn)笛卡爾積。關(guān)聯(lián)條件:必須先查看兩張表之間的關(guān)聯(lián)關(guān)系,然后在編寫關(guān)聯(lián)條件 133、內(nèi)連接;只查詢兩張表中有關(guān)系的數(shù)據(jù),不查詢沒有關(guān)聯(lián)關(guān)系的數(shù)據(jù)。之前寫的所有的關(guān)聯(lián)查詢都屬于內(nèi)連接 1.等值連接:關(guān)聯(lián)條件中是以=進(jìn)行連接,稱為等值連接。2.非等值連接:關(guān)聯(lián)條件不是以=連接,稱為非等值連接 自連接:把一張表看成兩張表,自己跟自己進(jìn)行連接 另外一種內(nèi)連接(很少見)格式 select 別名1.*/列名,別名2.*/列名 from 表名1 別名1 inner join 表名2 別名2 on 關(guān)聯(lián)條件 where 條件 134、使用Oracle的專用語法實(shí)現(xiàn)外連接 外連接:既要查詢兩張表中有關(guān)聯(lián)關(guān)系的數(shù)據(jù),還要查詢沒有關(guān)聯(lián)關(guān)系的數(shù)據(jù)。在Oracle中可以在關(guān)聯(lián)條件中加入(+)來實(shí)現(xiàn)外連接操作 oracle外連接專用語法只能應(yīng)用oracle數(shù)據(jù)庫,不能應(yīng)用于其它的數(shù)據(jù)庫 oracle外連接是在對方的關(guān)聯(lián)條件后面加上(+) 135、標(biāo)準(zhǔn)SQL外連接查詢(重點(diǎn)):使用標(biāo)準(zhǔn)SQL語句 實(shí)現(xiàn)外連接查詢操作,可以匹配任意的數(shù)據(jù)庫 左外連接查詢:以左表為主,查詢左表中所有的數(shù)據(jù),以及與之關(guān)聯(lián)的右表中的數(shù)據(jù) 格式: select 別名1.*/列名,別名2.*/列名 from 左表 別名1 left(outer)join 右表 別名2 on 關(guān)聯(lián)條件 where 條件 右外連接查詢:以右表為主,查詢右表中所有的數(shù)據(jù),以及與之有關(guān)聯(lián)的左表中的數(shù)據(jù) 格式: select 別名1.*/列名,別名2.*/別名 from 左表 別名1 right(outer)join 右表 別名2 on 關(guān)聯(lián)條件 where 條件 全外連接:連接與之關(guān)聯(lián)的所有表中所有的數(shù)據(jù) 格式: select 別名1.*/列名,別名2.*/列名 from 表1 別名1 full(outer)join 表2 別名2 on 關(guān)聯(lián)條件 where 條件 136、交叉連接cross join 格式: select 別名1.*/列名,別名2.*/列名 from 表1 別名1 cross join 表2 別名2 where 條件 交叉連接作用于兩個(gè)關(guān)系上,并且第一個(gè)關(guān)系的每個(gè)元組與第二個(gè)關(guān)系的所有元組進(jìn)行連接這樣的操作形式與笛卡爾積是完全相同的 137、自然連接 natural join 運(yùn)算作用于兩個(gè)關(guān)系最終會(huì)通過兩個(gè)關(guān)系產(chǎn)生一個(gè)關(guān)系作為結(jié)果,自然連接只考慮那些在兩個(gè)關(guān)系模式中都出現(xiàn)的屬性上取值相同的元組對 格式: select 別名1.*/列名,別名2.*/列名 from 表1 別名1 natural join 表2 別名2 where 條件 select * from emp natural join dept 自然連接自動(dòng)匹配關(guān)聯(lián)數(shù)據(jù)消除笛卡爾積是內(nèi)連接的方式 138、Using子句 格式: select 別名1.*/列名,別名2.*/列名 from 表1 別名1 join 表2 Using(關(guān)聯(lián)列名稱)where 條件 select * from emp join dept using(deptno)using不使用關(guān)聯(lián)字段也可以消除笛卡爾積 139、on子句 在SQL:1999語法中由用戶手工設(shè)置關(guān)聯(lián)條件 格式: select 別名1.*/列名,別名2.*/列名 from 表1 別名1 join 表2 on(關(guān)聯(lián)條件)where 條件 select * from emp e join salgrade s on(e.sal between s.losal and s.hisal) 140、日期函數(shù) 主要用于處理date類型的數(shù)據(jù) 常見的日期格式 年月日;yyy-mm-dd(y:年份 m:月份 d:幾號(hào)) 年月日時(shí)分秒;yyy-mm-dd hh24:mi:ss hh24: 24小時(shí)制,小時(shí) mi: 分鐘 s: 秒鐘 系統(tǒng)默認(rèn)的日期格式 dd-mon月-yy eg:11-11月-11 2011-11-11 sysdate:指代當(dāng)前的系統(tǒng)時(shí)間 select sysdate from dual 修改日期時(shí)間格式 先輸入alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss' 然后輸入select sysdate from dual; 141、to_char()函數(shù):把date類型的數(shù)據(jù)轉(zhuǎn)換為char類型數(shù)據(jù)進(jìn)行顯示 to_char(date數(shù)據(jù),'日期格式')select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mm:ss')from dual 142、to_char()函數(shù)中主要轉(zhuǎn)變數(shù)字: 9 顯示 一位數(shù)字,顯示 千位符.顯示 小數(shù)點(diǎn) 0 顯示 前導(dǎo)0 L 根據(jù)語言環(huán)境,自動(dòng)選擇貨幣 $ 顯示 美元符號(hào) select to_char(9568436.635,'000,000,000,000.000000')from dual select to_char(9568436.635,'L999,999,999.999')顯示貨幣, to_char(9568436.635,'$999,999,999.999')顯示美元 from dual; 143、months_between(d1,d2):兩個(gè)日期d1和d2之間間隔了多少個(gè)月 select empno,enmae,job,sal,hiredate, months_between(sysdate,hiredate)from emp add_moths(d1,數(shù)字):d1之后數(shù)字個(gè)月 案例3個(gè)月后的今天 select sysdate,add_months(sysdate,3)from dual 數(shù)字為負(fù)數(shù)表示之前 144、下一個(gè)指定日期 next_day(日期,星期數(shù)) 求出指定日期當(dāng)月的最后一天 last_day(日期) 145、時(shí)間日期分割,或計(jì)算給定兩個(gè)日期的間隔 extract(格式from數(shù)據(jù))select extract(year from systimestamp)years ,extract(month from systimestamp)months ,extract(day from systimestamp)days,extract(hour from systimestamp)hours ,extract(minute from systimestamp)minutes,extract(second from systimestamp)seconds from dual; 146、將字符串轉(zhuǎn)變?yōu)闀r(shí)間戳 to__timestamp()select to_timestamp('2015-12-10 12:25:30','yyyy-mm-dd hh24:mi:ss')from dual 147、將制定數(shù)據(jù)類型轉(zhuǎn)變?yōu)閿?shù)字型 to_number(列/字符串)select to_number('10')*to_number('21')from dual; 148、to_date()函數(shù):把char類型數(shù)據(jù)轉(zhuǎn)換為date類型的數(shù)據(jù),經(jīng)常用于跟insert語句結(jié)合使用 to_date('日期格式字符串','日期格式') 149、使用默認(rèn)的日期格式插入數(shù)據(jù) insert into emp(empno,ename,hiredate)values(6911,'孫權(quán)','21-12月-16') 150、視圖 1)視圖是一張?zhí)摂M表,通過視圖查看一張或者多張表中的數(shù)據(jù)。 2)視圖中不存儲(chǔ)任何物理數(shù)據(jù),視圖是查看數(shù)據(jù)的窗口。所以刪除一個(gè)視圖,對表中的數(shù)據(jù)沒有任何影響。 3)視圖中的數(shù)據(jù)都是來源于表,是在視圖被使用的動(dòng)態(tài)生成的。 通過視圖可以集中,簡化,定義數(shù)據(jù)的顯示,用戶可以通過視圖來訪問表中的數(shù)據(jù),而不需要直接查詢表。 151、創(chuàng)建視圖的格式 create view 視圖名as 查詢語句 案例:查詢emp表中所有的數(shù)據(jù),查詢結(jié)果作為視圖emp_view1 create view emp_view1 as select * from emp 152、修改視圖的格式 create or replace view 視圖名稱 as 查詢語句 例:查詢emp表中工資高于1000所有員工的編號(hào),姓名,職位,工資,查詢結(jié)果修改視圖emp_view1 create or replace view emp_view1 as select empno,ename,job,sal from emp where sal > 1000 153、通過視圖修改(insert ,update,delete)表中數(shù)據(jù) create view dept_view3 as select * from dept 154、通過視圖插入語句 insert into dept_view3 values(70,'財(cái)務(wù)','杭州')155、通過視圖修改語句 update dept_view3 set loc = '蘇州' where dname = '測試' 通過視圖刪除語句 delete from dept_view3 where deptno in(50,60,70) 156、只讀視圖:只能通過該類視圖查看表中的數(shù)據(jù),不能通過視圖修改表中的數(shù)據(jù) 格式: create view 視圖名稱 as 查詢語句 with read only 157、刪除視圖 格式:drop view 視圖名稱 drop view emp_view1 158、根據(jù)舊表創(chuàng)建新表 create table 新表 as select * from 舊表 159、oracle數(shù)據(jù)庫默認(rèn)端口號(hào):1521 MySQL默認(rèn)端口號(hào):3306 SQL Server默認(rèn)端口號(hào):1433 Https默認(rèn) 端口:443 HTTP默認(rèn)端口:80 FTP默認(rèn)端口:21 SOCKS代理協(xié)議服務(wù)器常用端口號(hào):1080 Telnet(遠(yuǎn)程登錄)協(xié)議代理服務(wù)器常用端口:23 TOMCAT默認(rèn)的端口號(hào):8080 ORACLE EMCTL默認(rèn)的端口號(hào):1158 MS SQL*SERVER數(shù)據(jù)庫monitor:1434 QQ默認(rèn)的端口號(hào):1080 Oracle XDB FTP服務(wù),默認(rèn)的端口號(hào):2100 Oracle XDB(XML 數(shù)據(jù)庫),默認(rèn)的端口號(hào):8080 WebLogic,默認(rèn)的端口號(hào):7001 Webshpere應(yīng)用程序,默認(rèn)的端口號(hào):9080 JBOSS,默認(rèn)的端口號(hào):8080 webshpere管理工具,默認(rèn)的端口號(hào):9090 DB2 默認(rèn)端口號(hào)為:5000 PostgreSQL默認(rèn)端口號(hào)為:5432 200資源(網(wǎng)頁等)被永久轉(zhuǎn)移到其它URL 404內(nèi)部服務(wù)器錯(cuò)誤 select e.empno 員工編號(hào),e.ename 員工姓名, to_char(e.hiredate,'yyyy-mm-dd')入職日期,e.job 工作,m.ename 領(lǐng)導(dǎo)姓名, e.sal 月工資,(e.sal+ nvl(e.comm,0))*12 年薪,s.grade 工資等級,d.deptno 部門編號(hào), d.loc 地址,d.dname 部門名稱 from emp e,dept d,salgrade s,emp m where d.deptno=e.deptno and e.mgr=m.empno and e.sal between s.losal and s.hisal and e.sal between 1500 and 3500 and to_char(e.hiredate,'yyyy')= '1981' order by 年薪 desc, 工作 desc 160、集合運(yùn)算 集合運(yùn)算時(shí)一種二目運(yùn)算符,包括交,差,并,笛卡爾積 union all(并集)返回若干個(gè)查詢結(jié)果全部內(nèi)容,重復(fù)的元組也會(huì)顯示 select * from dept union all select * from dept where deptno=10;結(jié)果為5條數(shù)據(jù)(有1條重復(fù)) union(并集)返回若干個(gè)查詢結(jié)果全部內(nèi)容,重復(fù)的元組不會(huì)顯示 select * from dept union select * from dept where deptno=10;結(jié)果4條數(shù)據(jù) intersect(交集)返回若干個(gè)查詢結(jié)果相同中的部分 select * from dept intersect select * from dept where deptno=10;結(jié)果為1條數(shù)據(jù) minus(差集)返回若干個(gè)查詢結(jié)果中不同的部分 select * from dept minus select * from dept where deptno=10 結(jié)果為3條數(shù)據(jù) 161、分析函數(shù) 函數(shù)名稱([參數(shù)])over(partition by 子句 字段,..Order by 子句 字段,…[asc | desc] [nulls first | nulls last] windowing子句); 函數(shù)名稱: 類似于count(),sun()等 over子句: 為分析函數(shù)指明一個(gè)查詢結(jié)果集,此語句 在select中使用 partition by 子句: 將一個(gè)簡單的結(jié)果分為N組(或者分區(qū)),而后按照不同的組對數(shù)據(jù)進(jìn)行統(tǒng)計(jì) order by子句: 明確指明數(shù)據(jù)在每個(gè)組中的排列順序,分析函數(shù)的結(jié)果與順序無關(guān) nulls first | nulls last: 表示返回?cái)?shù)據(jù)行中包含null值出現(xiàn)在排列序列的前還是尾 windowing子句(代名詞): 給出在定義變化固定的數(shù)據(jù)窗口方法,分析函數(shù)將對此數(shù)據(jù)進(jìn)行操作 數(shù)據(jù)庫老師畫的重點(diǎn) 數(shù)據(jù)庫:數(shù)據(jù)庫是長期存儲(chǔ)在計(jì)算機(jī)內(nèi)、有組織、可共享的大數(shù)據(jù)集合。數(shù)據(jù)庫操縱功能:查詢select、插入insert、刪除delete、修改update 數(shù)據(jù)庫系統(tǒng)的特點(diǎn):1數(shù)據(jù)結(jié)構(gòu)化2數(shù)據(jù)的共享高,冗余度低,易擴(kuò)充3數(shù)據(jù)獨(dú) 立性高4數(shù)據(jù)由DBMS統(tǒng)一管理和控制 數(shù)據(jù)模型的組成要素:數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作、完整性約束 概念模型:要出大體,畫圖 信息世界中的基本概念———— 1、實(shí)體:客觀存在并可以相互區(qū)別的事物稱為實(shí)體 2、屬性:實(shí)體所具有的某一特性 3、碼(key):唯一標(biāo)識(shí)實(shí)體的屬性集稱為碼 4、域(domain):域是一組具有相同數(shù)據(jù)類型的集合 5、實(shí)體型(entity type):具有相同屬性的實(shí)體必然具有共同的特征和性質(zhì)。用實(shí)體名 及屬性名集合來抽象和刻畫同類實(shí)體,稱為實(shí)體型。 6、實(shí)體集(entity set):同一類型的實(shí)體的集合 7、聯(lián)系:在現(xiàn)實(shí)世界中,事物內(nèi)部以及事物之間是有聯(lián)系的,這些聯(lián)系在信息世界中 反應(yīng)為實(shí)體(型)內(nèi)部的聯(lián)系和實(shí)體(型)之間的聯(lián)系。實(shí)體內(nèi)部的聯(lián)系通常是指 組成實(shí)體的各屬性之間的聯(lián)系;實(shí)體之間的聯(lián)系通常是指不同實(shí)體集之間的聯(lián)系 最常用的數(shù)據(jù)模型: 1、層次模型(Hierarchical Model) 2、網(wǎng)狀模型(Network Model) 3、關(guān)系模型(Relational Model) 4、面向?qū)ο竽P停∣bject Oriented Model) 5、對象關(guān)系模型(Object Relational Model)其中層次模型和網(wǎng)狀模型統(tǒng)稱為格式化模型 數(shù)據(jù)庫系統(tǒng)的三級模式結(jié)構(gòu): 1、模式(scheme):模式也稱邏輯模式,是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是所有用戶的公共數(shù)據(jù)視圖。他是數(shù)據(jù)庫系統(tǒng)模式結(jié)構(gòu)的中間層,既不設(shè)計(jì)涉及數(shù)據(jù)的物理存儲(chǔ)細(xì)節(jié)和硬件環(huán)境,也與具體的應(yīng)用程 序、所使用的應(yīng)用開發(fā)工具及高級程序設(shè)計(jì)語言無關(guān)。 2、外模式(external schema):外模式也稱為子模式(subschema)或用戶模式,他是數(shù) 據(jù)庫用戶(包括應(yīng)用程序員和最終用戶)能看見和使用 的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是數(shù)據(jù)庫用戶的數(shù)據(jù)視圖,是與某一應(yīng)用有關(guān)的數(shù)據(jù)的邏輯表示。 3、內(nèi)模式(internal scheme):內(nèi)模式也稱存儲(chǔ)模式(storage schema),一個(gè)數(shù)據(jù)庫只有 一個(gè)內(nèi)模式。他是數(shù)據(jù)庫物理結(jié)構(gòu)和存儲(chǔ)方式的描述,是 數(shù)據(jù)在數(shù)據(jù)庫內(nèi)部的表達(dá)方式。數(shù)據(jù)庫的二級映像功能與數(shù)據(jù)庫獨(dú)立性———— 為了能夠在系統(tǒng)內(nèi)部實(shí)現(xiàn)這3個(gè)抽象層次的聯(lián)系和轉(zhuǎn)換,數(shù)據(jù)庫管理系統(tǒng)在這三個(gè)模式之間提供了兩層映像: ·外模式/模式 映像 ·模式/內(nèi)模式 映像 正是這兩層映像保證了數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)能夠具有較高的邏輯獨(dú)立性和物理獨(dú)立性 關(guān)系(relation):D1*D2*D3··*Dn的子集叫做在域D1、D2、D3···Dn上的關(guān)系,表示 為R(D1、D2、D3···Dn) 這里的的R表示關(guān)系的名字,n是關(guān)系的目或度(degree)關(guān)系中每個(gè)元素是關(guān)系中的元組,通常用t表示 當(dāng)n=1時(shí),稱關(guān)系為單元關(guān)系(unary relation),或一元關(guān)系 當(dāng)n=2時(shí),稱該關(guān)系為二元關(guān)系(binary relation) 關(guān)系是笛卡爾積的有限子集,所以關(guān)系也是一個(gè)二維表,表的每行對應(yīng)一個(gè)元組,表的每列對應(yīng)一個(gè)域。由于域可以相同,為了加以區(qū)分,必須對每列起一個(gè)名字,稱為屬性(attribute)。n目關(guān)系必有n個(gè)屬性。 若關(guān)系中的某一屬性組的值能夠唯一的標(biāo)識(shí)一個(gè)元組,則稱該屬性組為候選碼(candidate key) 若一個(gè)關(guān)系有多個(gè)候選碼,則選定其中一個(gè)為主碼(primary key)候選碼的諸屬性稱為主屬性(prime attribute)。不包含在任何候選碼中的屬性稱為非主屬性(non-prime attribute)或非碼屬性(non-key attribute)P46 沒有搞明白干嘛使得?。。。。。。。。。?! 關(guān)系的三類完整性約束:實(shí)體完整性、參照完整性、用戶定義的完整性 實(shí)體完整性和參照完整性被稱作關(guān)系的兩個(gè)不變性 1、實(shí)體完整性(entity integrity):主碼中的屬性即主屬性不能取空值 2、參照完整性(referential integrity): 若屬性(或?qū)傩越M)F是基本關(guān)系R的外碼,它與基本關(guān)系S的的主碼K相對應(yīng)(基 本關(guān)系R和S不一定是不同的關(guān)系),則對于R中每個(gè)元組在F上的值必須為: ·或者取空值(F的每個(gè)屬性值均為空值)·或者等于S中某個(gè)元組的主碼值 SQL(Structured Query Language),即結(jié)構(gòu)化查詢語言,是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。SQL 的特點(diǎn): 1、綜合統(tǒng)一 2、高度非過程化 3、面向集合的操作方式 4、以同一種語法結(jié)構(gòu)提供多種使用方式 5、語言簡潔、易學(xué)易用 SQL的動(dòng)詞: 數(shù)據(jù)查詢:select 數(shù)據(jù)定義:create、drop、alter(房間)修改表 數(shù)據(jù)操縱:insert、update(家具)修改數(shù)據(jù)、delete 數(shù)據(jù)控制:grant、revoke 繪制ER圖———— 在ER圖中有如下四個(gè)成分: 矩形框:表示實(shí)體,在框中記入實(shí)體名。菱形框:表示聯(lián)系,在框中記入聯(lián)系名。 橢圓形框:表示實(shí)體或聯(lián)系的屬性,將屬性名記入框中。對于主屬性名,則在其名稱下 劃一下劃線。 連線:實(shí)體與屬性之間;實(shí)體與聯(lián)系之間;聯(lián)系與屬性之間用直線相連,并在直線上 標(biāo)注聯(lián)系的類型。(對于一對一聯(lián)系,要在兩個(gè)實(shí)體連線方向各寫1; 對于一對 多聯(lián)系,要在一的一方寫1,多的一方寫N;對于多對多關(guān)系,則要在兩個(gè)實(shí)體 連線方向各寫N,M。 基本表是本身獨(dú)立存在的表,在SQL中一個(gè)關(guān)系就對應(yīng)一個(gè)基本表。一個(gè)(或多個(gè))基本表對應(yīng)一個(gè)存儲(chǔ)文件,一個(gè)表可以帶若干索引,索引也可以放在存儲(chǔ)文件中。存儲(chǔ)文件的邏輯結(jié)構(gòu)組成了關(guān)系數(shù)據(jù)庫的內(nèi)模式。存儲(chǔ)文件的物理結(jié)構(gòu)是任意的,對用戶是透明的。 視圖是從一個(gè)或幾個(gè)基本表導(dǎo)出的表。它本身不獨(dú)立存儲(chǔ)在數(shù)據(jù)庫中,即數(shù)據(jù)庫中只存放視圖的定義而不存放視圖對應(yīng)的數(shù)據(jù)。這些數(shù)據(jù)仍存放在導(dǎo)出視圖的基本表中,因此視圖是一個(gè)虛表。視圖在概念上與基本表等同,用戶可以在視圖上再定義視圖。 基本表的定義、刪除與修改: 1、定義基本表:create table ***() 2、定義主鍵:Primary key == not null(中間不用連接符號(hào))unique 3、定義外碼的語句:foreign key(某個(gè)字段)references 某表(某字段) 4、定義主碼語句:primary key(***,***) 5、修改基本表:alter table 某表名 add 列名<數(shù)據(jù)類型>[完整性約束] drop <完整性約束名>(字段名) alter column<列名><數(shù)據(jù)類型> 6、刪除表:drop table 表名[restrict | cascade級聯(lián)刪除] 7、建立索引:create [unique] [clustered] index 索引名 on 表名(列名[asc | desc],······)·clustered 表示是聚簇索引 ·unique表明此索引的每一個(gè)索引值只對應(yīng)唯一的數(shù)據(jù)記錄 ·用戶可以在最經(jīng)常查詢的列上建立聚簇索引以提高查詢效率 ·在一個(gè)基本表上只能建立一個(gè)聚簇索引 ·建立局促索引后,更新該索引列上的數(shù)據(jù)時(shí),往往導(dǎo)致表中記 錄的物理順序的額變更,代價(jià)較大,因此對于經(jīng)常更新的列不 宜建立聚簇索引 8、刪除索引:drop index <索引名> 上機(jī)的時(shí)候不太一樣:drop index 表名。索引名字 9、數(shù)據(jù)的查詢: select [all | distinct] <目標(biāo)列表達(dá)式>,······ from 表名或者視圖名,··· where 條件表達(dá)式 group by 列名1 [having 條件表達(dá)式] order by 列名2 [asc | desc] ·如果有g(shù)roup by 子句,則結(jié)果按“列名1”的值進(jìn)行分組,該屬性列值相 等的元組為一個(gè)組。通常會(huì)在每組中作用聚集函數(shù)。如果group by 子句帶 having短語,則只有滿足指定條件的組才予以輸出。 ·如果有order by 子句,則結(jié)果表按“列名2”的值的升序或降序排序 ·select Sname Name,‘Year of Birth:’Birth,2013-Sage Birthday,lower (Sdept)Department from Student lower表示小寫 常用的查詢條件———— 比 較:大于、等于、小于、不等于(< >/!=)、大于/小于等于、不小于、不大于、not+上述比較運(yùn)算符 確定范圍:between and,not between and 確定集合:in,not in 字符匹配:like,not like 空 值:is null,is not null 多重條件(邏輯運(yùn)算):and,or,not 例子———— ·select Sname,Sage from Student where Sdept(not)in(‘cs’,‘ma’,‘is’) 字符匹配:[not] like ‘字符串’[escape‘換嗎字符’] 百分號(hào)表示任意長度、下劃線表 示任意單個(gè)字符 聚集函數(shù)———— count([distinct | all] *) 統(tǒng)計(jì)元組個(gè)數(shù) count([distinct| all] 列名) 統(tǒng)計(jì)一列中值的個(gè)數(shù) sum([distinct| all] 列名) 計(jì)算一列值的總和(此列必須是數(shù)值型)avg([distinct| all] 列名) 計(jì)算一列的平局值(此列必須是數(shù)值型)max([distinct| all] 列名) 求一列中的最大值 min ·如果指定distinct短語,則表示在計(jì)算時(shí)要取消指定列中的重復(fù)值。如果不指定distinct 短語或者指定all短語(all為缺省值),則表示不取消重復(fù)。 ·注意在聚集函數(shù)遇到空值時(shí),除count(*)外,都跳過空值而只處理非空值?!ぷ⒁鈝here子句中不能用聚集函數(shù)作為條件表達(dá)式 group by子句———— where 子句與having 短語的區(qū)別在于作用對象不同。Where 子句作用對象作用于基本表或試圖,從中選擇條件的元組。Having短語作用于組,從中選擇滿足條件的組。 例子:select Sno from SC group by Sno having count(*)>3 查詢了選修3門以上課程的學(xué)生學(xué)號(hào) 鏈接查詢—————— 例子: 非自然鏈接 ·select Student.*,SC.* from Student,SC Where Student.Sno=SC.Sno 自然鏈接 ·select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade from Student,SC where Student.Sno=SC.Sno 自身鏈接 ·select FIRST.Cno,SECOND.Cpno from Course FIRST,Course SECOND where FIRST.Cpno=SECOND.Cpno 外連接 ·select Student.Sno,Sname,Sage,Sdept,Cno,Grade from Student left outer join SC on Student.Sno=SC.Sno ·左外鏈接列出左邊關(guān)系中所有的元組,右外連接列出右邊關(guān)系中的所有元組 嵌套查詢 ·select Sname from Student where Sno in(select Sno from SC where Cno=‘2’) ·找出每個(gè)學(xué)生超過他選修課程平均成績的課程號(hào) Select Sno,Cno From SC x Where Grade >=(select avg(Grade) From SC y Where y.Sno=x.Sno) 授權(quán)———— Grant 權(quán)限,····· On 對象類型 對象名,····· To 用戶,····· [with grant option]只一句表示權(quán)限的傳遞 例子: ·Grant all privileges On Student,Course To U1,U2 ·grant update(Sno),select on Student to u4 ·revoke update(Sno) on table Student from u4 一個(gè)滿足BCNF的關(guān)系模式有: ·所有非主屬性對每一個(gè)碼都是完全函數(shù)依賴 3NF 編輯 3NF,即第三范式是要求一個(gè)數(shù)據(jù)庫表中不包含已在其它表中已包含的非主關(guān)鍵字信息。例如,存在一個(gè)部門信息表,其中每個(gè)部門有部門編號(hào)(dept_id)、部門名稱、部門簡介等信息。那么在員工信息表中列出部門編號(hào)后就不能再將部門名稱、部門簡介等與部門有關(guān)的信息再加入員工信息表中。如果不存在部門信息表,則根據(jù)第三范式(3NF)也應(yīng)該構(gòu)建它,否則就會(huì)有大量的數(shù)據(jù)冗余。簡而言之,第三范式就是屬性不依賴于其它非主屬性。滿足第三范式(3NF)必須先滿足第二范式(2NF) 2NF(第二范式) 第二范式(2NF)是在第一范式(1NF)的基礎(chǔ)上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數(shù)據(jù)庫表中的每個(gè)實(shí)例或行必須可以被唯一地區(qū)分。為實(shí)現(xiàn)區(qū)分通常需要為表加上一個(gè)列,以存儲(chǔ)各個(gè)實(shí)例的唯一標(biāo)識(shí)。如圖3-2 員工信息表中加上了員工編號(hào)(emp_id)列,因?yàn)槊總€(gè)員工的員工編號(hào)是唯一的,因此每個(gè)員工可以被唯一區(qū)分。這個(gè)惟一屬性列被稱為主關(guān)鍵字或主鍵、主碼。 數(shù)據(jù)庫總結(jié):共三天的課程 數(shù)據(jù)庫的概念:數(shù)據(jù)庫是一組有序的數(shù)據(jù)的集合; 數(shù)據(jù)庫的作用:為了有效的管理數(shù)據(jù); 數(shù)據(jù)類型: 一 字符串相關(guān)的類型:一般用于人名、大于2147483647(10位數(shù))的數(shù)字、地址等字符信息 使用格式:字段名 char(存放字符的長度) 或者 字段名 varchar(存放字符的長度)Char:代表的是定長的字符串類型,定義了多長,就分配多長的存儲(chǔ)空間,只要不超過定義的長度,分配給char的空間長度就不會(huì)改變,余下的部分用空格代替; Varchar:代表的是可變長度的字符串類型,定義的長度可以理解為是虛擬的空間,只要字符串的長度不超過定義的長度,那么varchar的分配空間長度就是字符串實(shí)際的長度,余下的部分自動(dòng)消失; 二 數(shù)字相關(guān)的類型:一般用于工資、人數(shù)統(tǒng)計(jì)等方面; 使用格式:字段名 int/float/double 【此處不用定義字段的長度】 int :取值的范圍-2147483648~2147483647,后面可以設(shè)置主鍵及自增長; float/double:用于帶有小數(shù)的數(shù)據(jù)定義 decimal:多用于金錢的數(shù)據(jù) 三 時(shí)間相關(guān)的數(shù)據(jù)類型:一般用于時(shí)間的統(tǒng)計(jì),例如登錄時(shí)間、修改時(shí)間、退出時(shí)間等; 使用格式:字段名 date/time/datetime/timestamp 【此處不用定義字段的長度】,插入表的時(shí)候格式與字符串的插入格式一樣,都是用單引號(hào)插入 date:日期類型 格式:yyyy-MM-dd time:時(shí)間類型 格式:hh:mm:ss Datetime:日期時(shí)間 格式:yyyy-MM-dd hh:mm:ss Timestamp:時(shí)間戳 格式:yyyy-MM-dd hh:mm:ss 數(shù)據(jù)庫的操作: 一 查看所有數(shù)據(jù)庫:select databases;二 查看所有表:select tables;三 創(chuàng)建數(shù)據(jù)庫:create database 數(shù)據(jù)庫名稱; use 數(shù)據(jù)庫名稱; 四 創(chuàng)建表:create table 表名(字段1 類型(長度)[約束], 字段2 類型(長度)[約束], 字段n 類型(長度)[約束])注:字段n的結(jié)尾處不需要用逗號(hào)分隔 五 刪除當(dāng)前表/數(shù)據(jù)庫:drop table 表名/ 數(shù)據(jù)庫名; 六 向表中插入數(shù)據(jù):insert into 表名(字段1,字段2,字段n)values(值1,值2,值n),(值1,值2,值n),(值1,值2,值n),(值1,值2,值n)...注:此處的插入數(shù)據(jù)可以用逗號(hào)隔開,想要插入幾條數(shù)據(jù)就插入幾個(gè)值。 七 查看當(dāng)前表的值:select * from 表名 注:*是通配符,代表全部的意思,此處*還可以用表中的字段名代替,那么查看就是相應(yīng)的字段名下的數(shù)據(jù)。 約束: 一 主鍵約束:primary key 代表的是唯 一、不重復(fù),非空的約束 使用格式: 字段名 類型(長度)primary key 自增長:auto_increment 必須與主鍵約束一同使用,字段的類型是整型,插入數(shù)據(jù)的時(shí)候可以不用向設(shè)置自增長的字段添加數(shù)據(jù),起始的默認(rèn)數(shù)字是:1 二 唯一約束:unique 不可以重復(fù),唯一 使用格式: 字段名 類型(長度)unique 注:空格是不可以作為字符串使用的,空格相當(dāng)于null,如果向設(shè)置unique的字段內(nèi)插入數(shù)據(jù)是存在【‘空格’、null、(‘’)】當(dāng)中兩個(gè)或兩個(gè)以上的時(shí)候就會(huì)報(bào)錯(cuò)【’null’是字符串,不是空】 三 非空約束:not null 插入數(shù)據(jù)時(shí)必須要為設(shè)置not null的字段插入數(shù)據(jù),這個(gè)字段不能為空 使用格式: 字段名 類型(長度)not null 注:空格是不可以作為字符串使用的,空格相當(dāng)于null,如果向設(shè)置not null的字段內(nèi)插入數(shù)據(jù)是存在【‘空格’、null、(‘’)】當(dāng)中一個(gè)或一個(gè)以上的時(shí)候就會(huì)報(bào)錯(cuò) 四 默認(rèn)約束:default 為字段設(shè)置默認(rèn)值,當(dāng)不為設(shè)置默認(rèn)約束的字段插入數(shù)據(jù)是,系統(tǒng)自動(dòng)將默認(rèn)值賦予這個(gè)字段 使用格式: 字段名 類型(長度)default 值 五 檢查約束:check(檢查的內(nèi)容)使用格式: 字段名 類型(長度)check(檢查的內(nèi)容)注:在SQL語句中沒有實(shí)際的含義,但是需要會(huì)用 六 外鍵約束:foreign key 必須是另一個(gè)表的主鍵(唯一的),設(shè)置了外鍵的字段,受到關(guān)聯(lián)表中相應(yīng)主鍵的字段的約束,當(dāng)要為外鍵約束插入數(shù)據(jù)的時(shí)候,必須先為被關(guān)聯(lián)的表插入相應(yīng)主鍵的數(shù)據(jù); 使用格式: 創(chuàng)建表時(shí)候就設(shè)置外鍵約束 字段名 類型(長度),F(xiàn)oreign key(字段名)references 表名(對應(yīng)主鍵的字段名)表已經(jīng)創(chuàng)建完,插入外鍵約束 Alter table 表名 add constraint fk_f foreign key(要設(shè)置外鍵的字段名)references 被關(guān)聯(lián)的表名(被關(guān)聯(lián)的字段名);表的結(jié)構(gòu): 查看表結(jié)構(gòu):desc/describe 表名;修改表名:alter table 表名 rename 新表名 添加新字段:alter table 表名 add 字段名 類型(長度)修改字段:alter table 表名 change 舊字段 新字段 新字段類型(長度)刪除字段:alter table 表名 drop 字段名 記錄的操作: 一 插入記錄:insert into 表名(字段名1,字段名n)values(值1,值n)二 修改記錄:update 表名 set 字段名=值 where 條件 注:這里如果不加where條件,那么這個(gè)表的這個(gè)字段名下的數(shù)據(jù)全部賦值成為“值” 三 刪除記錄:delete from表名 where 條件 注:此處刪除的是表中的符合where條件的整條記錄 注意:使用delete和update的時(shí)候要千萬注意,必須要寫where條件語句,要不然就會(huì)將當(dāng)前表中的所有數(shù)據(jù)改變,在想改回來的話會(huì)非常非常費(fèi)勁?。?! 四 查詢記錄:select 字段名1,字段名n from 表名 where 查詢條件 查詢?nèi)サ糁貜?fù)的值:關(guān)鍵字 distinct 格式:select distinct 字段名1,字段名n from 表名命別名/賦值表: 關(guān)鍵字 as 命別名:select 字段名 as ‘自定義名’ from 表名 賦值表:create table 新表名 as select * from 舊表名 3 查詢條件語句的范圍:in(等值判斷)/not in select 字段名1,字段名n from 表名 where 字段名 in/not in(值1,值n)4 模糊查詢:like 匹配標(biāo)識(shí)符:’_’代表一個(gè)字符、%代表多個(gè)字符 Select 字段名 from 表名 where 字段名 like ‘_sth%’ 注:like后面的判斷值如果是數(shù)字的話要加單引號(hào),例如想要查詢的條件是12345,可以這樣寫:’%3%’,單引號(hào)必須加 5 區(qū)間查詢:limit m,n 查詢從第m個(gè)記錄開始,一共n條記錄,這里的m指的是類似Java數(shù)組里的下標(biāo),計(jì)數(shù)從0開始 Limit m 查詢從頭開始的一共m條記錄 Select */字段名 from 表名 limit m,n 6 查詢值是否存在某段區(qū)間內(nèi):between 最大值 and 最小值(int 型的最大值、最小值)Select 字段名1,字段名n from 表名 where 字段名 between 最大值 and 最小值: 注意這里面的條件含有等于最大值和等于最小值 字段名 between 最大值 and 最小值= 字段名>=最小值 and 字段名<=最大值 邏輯運(yùn)算符在此處可通用:< <= > >= = != 集合函數(shù): 使用方法與Java中的方法的使用類似,注意的是函數(shù)名后面緊跟著(),中間不能有空格 一 符合條件的記錄的個(gè)數(shù):countil Select count(字段名)from 表名 where 查詢條件 二 求某個(gè)字段的值的總和:sum Select sum(字段名)from 表名 where 查詢條件 三 求某個(gè)字段的值的平均值:avg Select avg(字段名)from 表名 where 查詢條件 四 求某個(gè)字段的值的最大值:max Select max(字段名)from 表名 where 查詢條件 五 求某個(gè)字段的值的最大值:min Select min(字段名)from 表名 where 查詢條件 多表查詢: 笛卡爾積:select(字段1,字段n)from 表1,表n 自己想要的查詢(找到所有被查詢的表的相同的字段): Select(a.字段1,a.字段n,b.字段1,b.字段n)from 表名 as a,表名 as b where a.字段名=b.字段名; 聯(lián)合查詢: 左連接:select 字段名/* from 左表名 left join 右表名 on 左表名.字段名=右表名.字段名 查詢結(jié)果:左表全部顯示,右表與左表相同的字段名的部分顯示 右連接:select 字段名/* from 左表名 right join 右表名 on 左表名.字段名=右表名.字段名 查詢結(jié)果:右表全部顯示,左表與右表相同的字段名的部分顯示 內(nèi)連接:select 字段名/* from 左表名 inner join 右表名 on 左表名.字段名=右表名.字段名 查詢結(jié)果:只有左表與右表相同的部分才顯示 全連接:select 字段名/* from 左表名 full join 右表名 查詢結(jié)果:’*’的結(jié)果是笛卡爾積 ‘字段名’的結(jié)果是這個(gè)字段名下的笛卡爾積 函數(shù):函數(shù)名與小括號(hào)之間不能有空格,字符串必須用單引號(hào)圈起來 一 求字符串長度:length Select length(字符串)二 字符串的截?。簊ubstring(字符串,m)/(字符串,m,n)Select substring(字符串,m)/(字符串,m,n)三 小寫轉(zhuǎn)大寫:upper Select upper(字符串)四 大寫轉(zhuǎn)小寫:lower Select lower(字符串)五 加密:MD5 Select MD5(字符串)六 顯示現(xiàn)在的時(shí)間:now Select now() 迷糊中: group by order by 子查詢 課 程 設(shè) 計(jì) 報(bào) 告 課程名稱數(shù)據(jù)庫課程設(shè)計(jì)—總結(jié)題目個(gè)人CD盤管理系統(tǒng)_________________________________ 指導(dǎo)教師設(shè)計(jì)起止日期 學(xué)院計(jì)算機(jī)學(xué)院 系別專業(yè)計(jì)算機(jī)科學(xué)與技術(shù) 學(xué)生姓名班級/學(xué)號(hào) 成績___________________ 課程設(shè)計(jì)總結(jié): 經(jīng)過近2個(gè)月的設(shè)計(jì),CD盤管理系統(tǒng)基本開發(fā)完成,該系統(tǒng)是一個(gè)簡單的關(guān)于數(shù)據(jù)庫與現(xiàn)實(shí)相結(jié)合的管理系統(tǒng),它集各種功能用于一身,在系統(tǒng)的各個(gè)模塊中體現(xiàn)了它的功能,針對音樂愛好者的需求方面進(jìn)行設(shè)計(jì)的,方便了用戶的一些信息操作,為音樂愛好者節(jié)省了管理成本,提高管理效率。該系統(tǒng)的界面簡單大方,非常方便用戶的操作,同時(shí),也為以后系統(tǒng)的擴(kuò)展留出了足夠的空間。 在此次設(shè)計(jì)中后臺(tái)主要采用了servlet和JavaBean技術(shù),數(shù)據(jù)庫則加入了存儲(chǔ)過程和觸發(fā)器的控制。我進(jìn)一步理解了servlet和JavaBean的工作機(jī)制和所提供的便利,也感受到了存儲(chǔ)過程和觸發(fā)器所帶來的方便。 servlet具有以下的優(yōu)勢:方便Servlet提供了大量的實(shí)用工具例程,例如自動(dòng)地解析和解碼HTML表單數(shù)據(jù)、讀取和設(shè)置HTTP頭、處理Cookie、跟蹤會(huì)話狀態(tài)等。* 功能強(qiáng)大在Servlet中,許多使用傳統(tǒng)CGI程序很難完成的任務(wù)都可以輕松地完成。例如,Servlet能夠直接和Web服務(wù)器交互,而普通的CGI程序不能。Servlet還能夠在各個(gè)程序之間共享數(shù)據(jù),使得數(shù)據(jù)庫連接池之類的功能很容易實(shí)現(xiàn)。 2可移植性好Servlet用Java編寫,Servlet API具有完善的標(biāo)準(zhǔn)。因此,為IPlanet Enterprise Server寫的Servlet無需任何實(shí)質(zhì)上的改動(dòng)即可移植到Apache、Microsoft IIS或者WebStar。幾乎所有的主流服務(wù)器都直接或通過插件支持Servlet。3 節(jié)省投資不僅有許多廉價(jià)甚至免費(fèi)的Web服務(wù)器可供個(gè)人或小規(guī)模網(wǎng)站使用,而且對于現(xiàn)有的服務(wù)器,如果它不支持Servlet的話,要加上這部分功能也往往是免費(fèi)的(或只需要極少的投資)。 JavaBean具有以下特點(diǎn): 用戶可以使用JavaBean將功能、處理、值、數(shù)據(jù)庫訪問和其他任何可以用java代碼創(chuàng)造的對象進(jìn)行打包,并且其他的開發(fā)者可以通過內(nèi)部的JSP頁面、Servlet、其他JavaBean、applet程序或者應(yīng)用來使用這些對象。用戶可以認(rèn)為JavaBean提供了一種隨時(shí)隨地的復(fù)制和粘貼的功能,而不用關(guān)心任何改變。JavaBean可分為兩種:一種是有用戶界面(UI,User Interface)的JavaBean;還有一種是沒有用戶界面,主要負(fù)責(zé)處理事務(wù)(如數(shù)據(jù)運(yùn)算,操縱數(shù)據(jù)庫)的JavaBean。JSP通常訪問的是后一種JavaBean。 存儲(chǔ)過程的能力大大增強(qiáng)了SQL語言的功能和靈活性。存儲(chǔ)過程可以用流控制語 句編寫,有很強(qiáng)的靈活性,可以完成復(fù)雜的判斷和較復(fù)雜的運(yùn)算。可保證數(shù)據(jù)的安全性和完整性。通過存儲(chǔ)過程可以使沒有權(quán)限的用戶在控制之下間接地存取數(shù)據(jù)庫,從而保證數(shù)據(jù)的安全。通過存儲(chǔ)過程可以使相關(guān)的動(dòng)作在一起發(fā)生,從而可以維護(hù)數(shù)據(jù)庫的完整性。在運(yùn)行存儲(chǔ)過程前,數(shù)據(jù)庫已對其進(jìn)行了語法和句法分析,并給出了優(yōu)化執(zhí)行方案。這種已經(jīng)編譯好的過程可極大地改善SQL語句的性能。由于執(zhí)行SQL語句的大部分工作已經(jīng)完成,所以存儲(chǔ)過程能以極快的速度執(zhí)行。可以降低網(wǎng)絡(luò)的通信量。使體現(xiàn)企業(yè)規(guī)則的運(yùn)算程序放入數(shù)據(jù)庫服務(wù)器中,以便集中控制。當(dāng)企業(yè)規(guī)則發(fā)生變化時(shí)在服務(wù)器中改變存儲(chǔ)過程即可,無須修改任何應(yīng)用程序。企業(yè)規(guī)則的特點(diǎn)是要經(jīng)常變化,如果把體現(xiàn)企業(yè)規(guī)則的運(yùn)算程序放入應(yīng)用程序中,則當(dāng)企業(yè)規(guī)則發(fā)生變化時(shí),就需要修改應(yīng)用程序工作量非常之大(修改、發(fā)行和安裝應(yīng)用程序)。如果把體現(xiàn)企業(yè)規(guī)則的運(yùn)算放入存儲(chǔ)過程中,則當(dāng)企業(yè)規(guī)則發(fā)生變化時(shí),只要修改存儲(chǔ)過程就可以了,應(yīng)用程序無須任何變化。 觸發(fā)器可通過數(shù)據(jù)庫中的相關(guān)表實(shí)現(xiàn)級聯(lián)更改;不過,通過級聯(lián)引用完整性約束可以更有效地執(zhí)行這些更改。觸發(fā)器可以強(qiáng)制比用 CHECK 約束定義的約束更為復(fù)雜的約束。與 CHECK 約束不同,觸發(fā)器可以引用其它表中的列。例如,觸發(fā)器可以使用另一個(gè)表中的 SELECT 比較插入或更新的數(shù)據(jù),以及執(zhí)行其它操作,如修改數(shù)據(jù)或顯示用戶定義錯(cuò)誤信息。觸發(fā)器也可以評估數(shù)據(jù)修改前后的表狀態(tài),并根據(jù)其差異采取對策。一個(gè)表中的多個(gè)同類觸發(fā)器(INSERT、UPDATE 或 DELETE)允許采取多個(gè)不同的對策以響應(yīng)同一個(gè)修改語句。 在本系統(tǒng)的設(shè)計(jì)過程中,首先通過對CD盤管理系統(tǒng)功能進(jìn)行詳細(xì)的分析,得到系統(tǒng)功能模塊圖,然后根據(jù)系統(tǒng)功能分析,圍繞它進(jìn)行系統(tǒng)的設(shè)計(jì),介紹開發(fā)環(huán)境和開發(fā)技術(shù),再可行性分析、功能和性能需求,然后得出系統(tǒng)業(yè)務(wù)流圖、數(shù)據(jù)流圖、E-R圖,并進(jìn)行數(shù)據(jù)庫的設(shè)計(jì)和模塊化的實(shí)現(xiàn)。由于之前有稍微接觸過Java Web方面的知識(shí),再加上利用自己的課余時(shí)間的學(xué)習(xí),做起來感覺沒太多的困難。經(jīng)過這次系統(tǒng)設(shè)計(jì)過程,加深了我對數(shù)據(jù)庫操作的認(rèn)識(shí),更加熟悉了Java Web的構(gòu)架,如servlet,struts,SOA等等。完成本設(shè)計(jì)后,才知道平日里書本上所學(xué)的東西太少,僅是些概念知識(shí),沒運(yùn)用到實(shí)踐中來,知識(shí)是無法得到升華的。只有不斷地學(xué)習(xí)才能夠跟上科技和知識(shí)的發(fā)展步伐。 數(shù)據(jù)庫課程總結(jié) 軟件0701 07301024 楊彥妍 在學(xué)習(xí)數(shù)據(jù)庫之前一直覺得數(shù)據(jù)庫沒有什么深入研究的價(jià)值,覺得無非是將數(shù)據(jù)存起來進(jìn)行增刪改查的操作就是了。直到真正接觸到了數(shù)據(jù)庫這門課才真地發(fā)現(xiàn)了這里面得奧妙和值得專研的價(jià)值。不知不覺中已經(jīng)過了將近一個(gè)學(xué)期,這是第一次接觸王老師的課堂,但是老師清晰地講解讓我這一個(gè)學(xué)期收益匪淺。 數(shù)據(jù)已然成為當(dāng)今信息社會(huì)的一種極為重要的資源,各個(gè)部門無時(shí)無刻不在于數(shù)據(jù)打交道,對于這些大量數(shù)據(jù)的處理使得數(shù)據(jù)庫應(yīng)運(yùn)而生。作為學(xué)習(xí)軟件的我們對于數(shù)據(jù)庫的學(xué)習(xí)更加是必不可少。 雖然對于SQL語言這些東西以前基本上沒有太多的接觸,但是清晰易懂語言的模式并沒有對學(xué)習(xí)造成太大的困擾。而實(shí)際上這學(xué)期的雙語教學(xué)的確讓我的學(xué)習(xí)變的有些吃力,不是因?yàn)樽x不懂,而是讀過之后理解僅僅停留在字面意思上,不能很透徹地理解到位。但是老師課堂上深入淺出的講解,和對于課件的翻譯讓我對此有了很大的彌補(bǔ)。對于數(shù)據(jù)庫的理解已經(jīng)不僅僅是知道增刪改查這些簡單的基本操作,知道表之間的連接,一些運(yùn)算,一些模式等等。實(shí)際上,對于數(shù)據(jù)庫進(jìn)行建立與操作是十分復(fù)雜的,中間要經(jīng)過很多考慮對于現(xiàn)實(shí)的結(jié)合,對于軟硬件的要求都需要考慮在內(nèi)。 從某種意義上看來說,對于數(shù)據(jù)庫的學(xué)習(xí)不僅僅改變了我對與數(shù)據(jù)庫的看法,同時(shí)也改變了我對于程序設(shè)計(jì)的看法。從前簡單的看到就做是不科學(xué)的,應(yīng)該經(jīng)過規(guī)劃和研究分析才能上手。于此同時(shí),老師留的項(xiàng)目其實(shí)是對于我們的所學(xué)習(xí)知識(shí)的一種檢驗(yàn)與擴(kuò)充。因?yàn)轫?xiàng)目結(jié)合很多的其他知識(shí),同時(shí)做項(xiàng)目的過程是一個(gè)對于知識(shí)的重新審視與鞏固的過程。 總地來說,這學(xué)期的數(shù)據(jù)庫課程讓我覺得有所收獲,有所得。加強(qiáng)了對于課程本身的理解,同時(shí)也知道了更廣的知識(shí)面。其實(shí)感受最深的還是老師的講課方式,很詳細(xì)很透徹,不懂的地方老師還會(huì)很耐心地講解,總很和藹,問問題的時(shí)候也不會(huì)緊張。 關(guān)于意見、建議,總體上來說,老師的方法很好。如果真說意見,建議的話,我覺得針對雙語教學(xué),上課讓同學(xué)翻譯一些要點(diǎn)是必要的。因?yàn)楸旧泶蠹覍τ谟⒄Z的理解就不容易透徹,再加上一部分同學(xué)的英語水平并不是很好,所以容易造成誤解。如果自己翻譯,老師更正的話,會(huì)讓我們的記憶更加深刻,理解更加透徹,掌握更加牢固。另一點(diǎn)就是我覺得可以減少對于PPT 的依賴。因?yàn)槊看紊险n的時(shí)候,看課件有時(shí)候并不是很清楚,但是當(dāng)老師在黑板上演示過后就覺得特別的理解,很清晰,感覺線索被理順了,明了了。 這就是我對于今年著學(xué)期上數(shù)據(jù)庫的一些感受,真的很希望以后還有機(jī)會(huì)選王老師的課。第二篇:數(shù)據(jù)庫總結(jié)
第三篇:數(shù)據(jù)庫總結(jié)
第四篇:數(shù)據(jù)庫課程設(shè)計(jì)總結(jié)
第五篇:數(shù)據(jù)庫課程總結(jié)