數據庫基本理論

數據庫的基本理論:
1.數據定義語言DDL(Data definition Language):用於建立,刪除,修改數據庫對象。
其中包括:–create:創建表和其他對象的結構。
–alter:修改表或其他對象的結構。
–drop:刪除表或其他對象的結構。
–truncate:刪除表數據,保留表結構
2.數據操作語言DML(Data manipulation Language):用於修改表中數據(和事務相關,執行 完成後需要經過事務控制語句後才能真正的將改變應用到數據庫中)
其中包括:insert:將數據插入到數據庫中
delete:刪除數據庫中的數據
update:跟新數據庫中已有的數據
insert into 表名 (字段名)values (數據)
delete from 表名 where 條件
update 表名 set where
delete,truncate,drop的區別:
delete:刪除數據,保留表結構,需要commit,可以回滾
truncate:刪除數據,保留表結構,自動commit,不可以回滾,一次刪掉全部數據
drop:刪除數據和表結構,不需要commit
3.事務控制語言TCL(Transaction Control Language):用來維護數據一致性的語句
其中包括:Commit:提交,確認修改的數據改表
RollBack:回滾,取消已經進行的數據改表
SavePoint:保存點,使當前事務可以回到指定保存點
4.數據查詢語言DQL(Data Query Language)
a.DQL語句的執行順序 from—where—group by—having—select—order by
from:從哪些表中檢索數據
where:過濾表中數據的條件
group by:將過濾後的數據分組
having:對分組後的數據進行過濾
select:查看結果集中的哪些列
order by:順序排列結果
注:聚合函數針對列而言,只能用在having和select
5.數據控制語言DCL(Data control Language):用於權限的授予和收回操作
包括:Grant:授予,用於給用戶授予權限
Revoke:撤銷用戶權限
6.1創建表
create table student(
Sno char(9) primary key,/列級完整性約束條件,Sno是主碼/
Sname char(20) unique,/Sname取唯一值/
Ssec char(2),
Sage smallint,
Sdept char(20)
);
create table course(
Cno char(4) primary key,/列級完整性約束條件,Cno是主碼/
Cname char(40) not null,/列級完整性約束條件,Cname不能取空值/
Cpno char(4),/Cpno的含義是先修課/
Ccredit smallint,
foreign key(Cpno) references course(Cno),/表級約束條件,Cpno是外碼,被 參照表是course,被參照列是Cno/
);
create table sc(
Sno char(9),
Cno char(4),
Grade smallint,
primary key(Sno,Cno),/主碼由兩個屬性構成,必須作爲表級約束條件/
foreign key(Sno) references student(Sno),/表級完整性約束條件,Sno是外碼被參照表是student,被參照列是Sno/
foreign key(Cno) references course(Cno)/表級完整性約束條件,Cno是外碼,被參照表是course,被參照列是Cno/
);
6.2修改基本表
向student表增加’入學時間’列,其數據類型爲日期型
alter table student add s_entrance date;
6.3刪除基本表
drop table 表名[restrict/cascade] 默認是restrict,對該表的刪除是由限制條件的,不 能被其它表約束所引用,不能有視圖,觸發器,不能有存儲過程和函數,cascade表示級聯關係的數據庫對象都被刪除。
7.1索引的建立與刪除
當表的數據量較大時,查詢操作比較耗時,建立索引是加快查詢速度的有效手段。
1.建立索引
create unique index SCno on sc(Sno asc,Cno desc);
2.修改索引
alter index <舊索引名> rename to <新索引名>
3.刪除索引
drop index<索引名>
8.數據字典
數據字典是數據庫管理系統內部的一組系統表,它記錄了數據庫中所有的定義信息,包括模式定義,視圖定義,索引定義,完整性約束定義。
9.數據查詢
9.1單表查詢
select Sname NAME,’Year of Birth:’ BIRTH,2014-Sage BIRTHDAY,lower(Sdept) DEPARTMENT from Student;
select distinct Sno from sc where Grade<60;
字符匹配:查詢名字中第二個字爲陽的學生姓名和學號。
select Sname,Sno from student where Sname like ‘_陽%’;
聚合函數:
count(*)統計元組個數
sum()統計一列中值的總和
avg()計算一列的平均值
max() min()
查詢選修了課程的學生人數
select count(distinct Sno) from sc;
9.2連接查詢
1.等值與非等值連接:連接查詢中where子句用來連接兩個表 條件用=或其它符號
2.自身連接:連接操作可以是一個表與其自己進行連接
查詢每一門課的間接先行課
select first.Cno,second Cpno from course frist,course second where first.Cpno=second.Cno;
3.外連接
select student.Sno,Sname,Ssex from student left outer join sc on(student.Sno=sc.Sno) /right outer join on/full outer join on
9.3嵌套查詢
/嵌套查詢:不相關子查詢:查詢與劉晨在同一個系學習的學生/
select Sno,Sname,Sdept from student where Sdept in
(select Sdept from student where Sname=’劉晨’)
/查詢選修了課程名爲‘信息系統’的學生學號和姓名/
select Sno,Sname from student where Sno in
(select Sno from sc where Cno in
(select Cno from course where Cname=’信息系統’))
select student.Sno,Sname from student,sc,course where sc.Cno=course.Cno and student.Sno=sc.Sno and course.Cname=’信息 系統’

/相關子查詢:找出每個學生超過他自己選修課平均成績的課程號/
select x.Cno,x.Sno from sc x where Grade>=
(select avg(Grade) from sc y where y.Sno=x.Sno)
select sc.Cno,sc.Sno,sc.Grade from sc group by Sno having Grade>=avg(Grade)
9.4集合查詢 union intersect except
9.5基於派生表的查詢
10數據更新
select * from student
insert into student (Sno,Sname,Ssex,Sage,Sdept)values(‘201215121’,’李勇’,’男’,20,’CS’)
insert into student (Sno,Sname,Ssex,Sage,Sdept)values(‘201215122’,’劉晨’,’女’,19,’CS’)
insert into student (Sno,Sname,Ssex,Sage,Sdept)values(‘201215123’,’王敏’,’女’,18,’MA’)
insert into student (Sno,Sname,Ssex,Sage,Sdept)values(‘201215125’,’張立’,’男’,19,’IS’)

select * from course
insert into course(Cno,Cname,Cpno,Ccredit)values(‘1’,’數據庫’,’5’,4)
insert into course(Cno,Cname,Cpno,Ccredit)values(‘2’,’數學’,null,2)
insert into course(Cno,Cname,Cpno,Ccredit)values(‘3’,’信息系統’,’1’,4)
insert into course(Cno,Cname,Cpno,Ccredit)values(‘4’,’操作系統’,’6’,3)
insert into course(Cno,Cname,Cpno,Ccredit)values(‘5’,’數據結構’,’7’,4)
insert into course(Cno,Cname,Cpno,Ccredit)values(‘6’,’數據處理’,null,2)
insert into course(Cno,Cname,Cpno,Ccredit)values(‘7’,’PASCAL語言’,’6’,4)

select * from sc
insert into sc(Sno,Cno,Grade)values(‘201215121’,’1’,92)
insert into sc(Sno,Cno,Grade)values(‘201215121’,’2’,85)
insert into sc(Sno,Cno,Grade)values(‘201215121’,’3’,88)
insert into sc(Sno,Cno,Grade)values(‘201215122’,’2’,90)
insert into sc(Sno,Cno,Grade)values(‘201215122’,’3’,80)
11.視圖
11.1什麼是視圖,視圖的作用
視圖是從一個或者幾個基本表(或視圖)導出的表,是一個虛表,數據庫中值存放視圖的定義,而不存放視圖對應的數據。
作用:視圖能夠簡化用戶的操作,使用戶以多種角度來看待同一數據,視圖對重構數據庫提供了一定程度的邏輯獨立性,視圖對機密數據提供保護
11.2定義視圖
1.建立視圖
一般格式爲:create view <視圖名>[列名] as <子查詢> [with check option]
with check option 表示對視圖進行的update,insert,delete操作時要附加子查詢中的條件表達式。
create view is_student
as
select Sno,Sname,Sage
from student
where Sdept=’is’
with check option
關係數據庫在執行create view語句的結果只是把視圖的定義存入數據字典,並不執行select語句。只是對視圖查詢時,才按視圖的定義從基本表中查出。
若一個視圖是從單個基本表導出的,並且只會去掉基本表的某些行列,且保留主碼,則稱這個視圖爲行列子集視圖。
12.觸發器(trigger):是用戶定義在關係表上的一類由事件驅動的特殊過程。一旦定義,觸發器將被保存在數據庫服務器中。
13.關於範式(略)
14.UML:表示E-R圖的方法有若干種,使用統一建模語言UML是其中之一。
15.過程化SQL,Oracle的PL/SQL,Microsoft SQL Server的Transact-SQL都是過程化編程語言。
15.1存儲過程:存儲過程是由過程化SQL語句書寫的過程,這個過程經過編譯和優化後存儲在數據庫服務器中,因此稱爲存儲過程,使用時只需要調用即可
存儲過程和函數的區別:
存儲過程沒有返回值,函數必須有返回值;
存儲過程參數可以使用in,out,inout類型,函數參數類型只能是in類型;
16.mysql存儲引擎概述
插件式存儲引擎是Mysql數據庫最重要的特性之一,用戶可以根據應用需要選擇如何存儲和索引數據,是否使用事務等。InnoDB;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章