1、SQL(結(jié)構(gòu)化查詢語言)的組成:數(shù)據(jù)定義語言DDL、數(shù)據(jù)操縱語言DML、數(shù)據(jù)控制語言DCL、其他。
2、SQL語言的功能:
1)數(shù)據(jù)查詢:SELECT
2)數(shù)據(jù)定義:CREATE DROP ALTER
3)數(shù)據(jù)操縱:INSERT UPDATE DELETE
4)數(shù)據(jù)控制:GRANT REVOKE
3、SQL語言的操作對象
1)基本表:數(shù)據(jù)庫中獨(dú)立存在的表。
2)視圖:從一個或幾個基本表中導(dǎo)出的表,是虛表,只存放視圖的定義,不存放對應(yīng)的數(shù)據(jù)。
3)查詢表:查詢結(jié)果對應(yīng)的表。
4)存儲文件:數(shù)據(jù)庫中存放關(guān)系的物理文件。
4、表的相關(guān)數(shù)據(jù) 1)字段:一個事物的某一特征 2)記錄:字段的組合,表示的是一個具體的事物 3)表:記錄的組合,表示的是同一類型事物的集合 4)表和字段、記錄的關(guān)系:字段是事物的屬性、記錄是事物本身、表是事物的集合 5)列:字段的另一種稱謂 6)屬性:字段的另一種稱謂 7)元組:記錄的另一種稱謂
5、數(shù)據(jù)庫中建表方法
1)利用圖形化界面建表
2)create table命令
create table dept ( dept_id int primary key, dept_name nvarchar(100) not null, dept_address nvarchar(100) )
最后一行的逗號可以有也可以沒有,在ORACLE里不能有,所以建議不寫逗號,便于移植。
create table emp ( --不能寫成{ emp_id int constraint pk_emp_id_hahaha primary key, emp_name nvarchar(20) not null, emp_sex nchar(1) , dept_id int constraint fk_dept_id_heihei foreign key references dept(dept_id), )
6、修改表
1)增加列(新增一列的值為空值)
alter table dept add dept_new int default 0
2)增加約束
alter table dept add constraint dept_name unique
3)刪除約束
alter table dept drop constraint dept_name unique
4)修改列的數(shù)據(jù)類型
alter table dept alter column dept_name char(10)
7、刪除表
delete table emp
8、約束:對一個表中的屬性操作的限制叫做約束。 1)主鍵約束:不允許重復(fù)元素,避免數(shù)據(jù)的冗余。 2)外鍵約束:通過外鍵約束從語法上保證了本事務(wù)所關(guān)聯(lián)的其他事物一定是存在的。 事物與事物之間的關(guān)系是通過外鍵來體現(xiàn)的。 3)create約束:保證事物屬性的取值在合法的范圍之內(nèi)。 create table student (stu_id int primary key, stu_sal int check (stu_sal>1000 and stu_sal<=8000), stu_sex nchar(1) default('男') ---()可以省,在數(shù)據(jù)庫中字符串是必須用''括起來的 ) 4)default約束:保證事物的屬性一定會有一個值 5)唯一約束:保證了事物屬性的取值不允許重復(fù),但允許其中有一列且只能有一列為空。 (1)SqlServer只允許一個unique列為空,Oracle允許多個unique列為空 (2)create table student2 (stu_id int primary key, stu_sal int check (stu_sal>1000 and stu_sal<=8000), stu_sex nchar(1) default('男'), ---()可以省,在數(shù)據(jù)庫中字符串是必須用''括起來的 stu_name nvarchar(200) unique ) insert into student2 values(1,6000,'男’,'張三’); ---ok insert into student2 values(2,6000,'男’,'張三’);---error違反了唯一約束 insert into student2 values(2,6000,'男’,'李四’);---ok insert into student2 values(null,6000,'男’,'王五’);---error主鍵不能為空,出錯的信息是“不能將值null插入列'stu_id’” insert into student2 values(3,6000,'男’,null);---ok 說明唯一鍵可以為空 stu_name nvarchar(200) unique not null---error兩者可以組合使用
6)not null約束 (1)要求用戶必須為該屬性賦一個值,否則語法出錯。 (2)如果一個字段不寫null也不寫not null,則默認(rèn)是null,即默認(rèn)允許為空,用戶可以不給該字段賦值。 (3)如果用戶沒有為該字段賦值,則該字段的值默認(rèn)是null。 (4)要注意null和default的區(qū)別 相同點(diǎn):都允許用戶不賦值。 不同點(diǎn):null修飾的字段如果用戶不賦值則默認(rèn)是null。 default修飾的字段如果用戶不賦值則默認(rèn)是default規(guī)定的那個值。 9、表和約束的區(qū)別 1)數(shù)據(jù)庫是通過表來解決事物的存儲問題的 2)數(shù)據(jù)庫是通過約束來解決事物取值的有效性和合法性的問題 3)建表的過程就是指定事物屬性及其事物屬性各種約束的過程。 10、關(guān)系:表和表之間的聯(lián)系。 1)實(shí)現(xiàn)方式:通過設(shè)置不同形式的外鍵來體現(xiàn)報和表的不同關(guān)系。 2)分類(假設(shè)是A表和B表):
(1)一對一:既可以把表A的主鍵充當(dāng)表B的外鍵,也可以把表B的主鍵充當(dāng)表A的外鍵。 (2)一對多:把A表的主鍵充當(dāng)B表的外鍵,或者講:把A表的主鍵添加到B表來充當(dāng)B表的外鍵。在多的一方添加外鍵。 (3)多對多:多對多必須的通過單獨(dú)的一張表來表示
--班級表 create table banji ( banji_id int primary key, banji_num int not null, banji_name nvarchar(100) )
--教師 create table jiaoshi ( jiaoshi_id int primary key, jiaoshi_name nvarchar(200) )
--第三張表 用來模擬班級和教師的關(guān)系 create table banji_jiaoshi_mapping ( banji_id int constraint fk_banji_id foreign key references banji(banji_id), jiaoshi_id int foreign key references jiaoshi(jiaoshi_id), kecheng nvarchar(20), constraint pk_banji_id_jiaoshi_id primary key (banji_id, jiaoshi_id, kecheng) )
11、主鍵:能夠唯一標(biāo)識一個事務(wù)的一個字段或者多個字段的組合,被稱為主鍵。 1)含有主鍵的表稱為主鍵表。 2)主鍵通常是證書,不建議使用字符串做主鍵(如果主鍵是用于集群式服務(wù),可以考慮用字符串當(dāng)主鍵)。 3)主鍵的值通常都不允許修改,除非本記錄被刪除。 4)主鍵不要定義成id,而要定義成表名ID或者表名_id。 5)要用代理主鍵,不能用業(yè)務(wù)主鍵 任何一張表,強(qiáng)烈建議不要使用有業(yè)務(wù)含義的字段充當(dāng)主鍵。 通常都是在表中單獨(dú)添加一個整形的編號充當(dāng)主鍵字段。 12、外鍵:如果一個表中的若干個字段是來自另外若干個表的主鍵或唯一鍵,則這若干個字段就是外鍵。 1)外鍵通常是來自另一個表的主鍵而不是唯一鍵,因為唯一鍵可能為空。 2)外鍵不一定是來自另外的表,也可能來自本表的主鍵。 13、先刪主鍵表還是外鍵表 先刪外鍵表,如果先刪主鍵表會報錯,因為這會導(dǎo)致外鍵表中的數(shù)據(jù)引用失敗。
14、視圖:視圖從代碼上看是一個select語句,從邏輯上看被當(dāng)做一個虛擬表看待。 1)為什么需要視圖 簡化查詢:避免了代碼的冗余、避免了書寫大量重復(fù)的sql語句。 2)如何創(chuàng)建視圖 create view 視圖的名字 as ---select的前面不能添加begin select語句 ---select的后面不能添加end 3)創(chuàng)建視圖的select語句必須要為所有的計算列指定別名 ---錯誤 create view v$_a as select avg(sal) from emp; ---正確 create view v$_a as select avg(sal) as "avg_sal" from emp; 4)視圖不是物理表,是虛擬表,不建議通過視圖更新視圖所依附的原始表的數(shù)據(jù)或結(jié)構(gòu) (1)視圖的優(yōu)點(diǎn):簡化查詢、增加數(shù)據(jù)的保密性。 (2)視圖的缺點(diǎn):增加了數(shù)據(jù)庫維護(hù)成本;視圖只是簡化了查詢,但是不能加快查詢的速度。
15、索引
1)創(chuàng)建索引
create index studentidx on student(stu_id,stu_name)
2)刪除索引
drop index studentidx
|