關系數據庫標準語言SQL
基本概念
-
SQL語言是一個功能極強的關系數據庫語言。同時也是一種介于關系代數與關系演算之間的結構化查詢語言(Structured Query Language),其功能包括數據定義、數據查詢、數據操縱和數據控制。
-
SQL的特點:
1)綜合統一:集數據定義、數據查詢、數據操縱和數據控制等多種功能于一體。
2)高度非過程化 :面對象的設計
3)面向集合的操作方式 :操作對象是集合,并且操作結果也是集合
4)兩種使用方式,統一的語法結構 :既是一種獨立的語言,又是一種嵌入式的語言,(嵌入式是指嵌入別的高級語言)。
5)簡潔易學
數據庫的創建與基本概念
一、創建數據庫:
代碼:
create database Student; --創建數據庫
use Student; --使用數據庫
drop database Student; --刪除數據庫
注意:
1)兩種注釋方式:(1)兩個減號--,注釋單行 (2)/* */注釋多行
2)不能再當前數據庫刪除當前數據庫
數據類型:
注意:
1)一個屬性采用何種數據類型由兩部分決定:(1)該屬性的取值范圍;(2)該屬性做何種運算。
模式的創建與刪除
模式,一個獨立于數據庫用戶的非重復命名空間,在這個空間中可以定義該模式包含的數據庫對象,例如基本表、視圖、索引等。
代碼:
/** 創建模式zhang,下鍵表student*/
create schema zhangcreate table student(Sno char(9) primary key,Sname varchar(20) unique,Ssex char(4) not null,Sage smallint,Sdept varchar(5) );/** 刪除模式中的表*/
drop table zhang.student;/** 刪除模式*/
drop schema zhang; --注意前提該模式下無對象
注意:
1)刪除模式的時候首先應當將模式下的所有對象刪除,才能刪除該模式
2)在刪除某個非dbo模式下的表時,需要加模式名
3)該模式不是三級模式兩級映像中的模式,而是相當于一個命名空間(主要可以解決重名的問題)
4)CASCADE(級聯):刪除模式的同時把該模式中所有的數據庫對象全部刪除(SQL Server不支持)
5)RESTRICT(限制):只有當該模式中沒有任何下屬的對象時才能執行
表的定義、刪除與修改
一、創建表(三張):(1)學生表(Student)(2)課程表(Course)(3)學生課程表(SC)
1)學生表(Student)
?代碼:
/** 未添加數據*/
create table student
(Sno char(9) primary key, --primary key 指示主碼Sname varchar(20) unique, --unique 指示值唯一,Ssex char(4) not null, --not null 該值非空Sage smallint,Sdept varchar(5)
);
2)課程表(Course)
代碼:
/** 創建課程表*/
create table Course
(Cno char(2) primary key,Cname varchar(10) unique,Cpno char(2), --Cpno是外碼,參照的是自身的CnoCcredit smallint,foreign key (Cpno) references Course(Cno) --外碼
);
3)學生-課程表
?
代碼:
/** 創建學生-課程表*/
create table SC
(Sno char(9),Cno char(2),Grade int,primary key(Sno, Cno), --多個屬性列構成主碼,寫在最后foreign key(Sno) references student(Sno), --外碼, 每個外碼寫一行foreign key(Cno) references Course(Cno)
);
注意:
1)創建表的時候需要考慮三個完整性約束條件:實體完整性,參照完整性,用戶自定義完整性
2)兩種完整性約束條件的定義方式:
-
列級完整性約束條件:涉及相應屬性列的完整性約束條件,在屬性列的后邊定義。
-
表級完整性約束條件:涉及一個或多個屬性列的完整性約束條件 ,在將屬性列完之后定義。
3)外碼要和所參照的主碼類型相同。表級完整性約束的時候屬性列需要加括號。
二、修改表
增加列
alter table student add graduation date;
/*
1. 指定要修改的表
2. add關鍵字
3. 新增列的屬性名
4. 新增列的數據類型
*/
刪除列
alter table student drop column graduation;
修改列的數據類型
alter table student alter column graduation varchar(20);
增加約束
/*這種增加約束的方法不容易從左邊的框框(鍵)中看出來*/
alter table student add unique(graduation);/*給增加的約束自定義了一個別名,容易區分*/
alter table student add constraint S_un unique(graduation);/*注意*/
--1. 不可以使用增加not null約束,想要添加只可以在設計中將勾去掉
--雖然以下的方式看似添加了not null約束,但是不起任何作用
alter table student add constraint cc check(sname is not null);--2. 給某一屬性列添加主鍵,需要保證該屬性列不允許為空,剛建的新表在未加約束的情況下,默認屬性列允許為空值
alter table student add primary key(sno,cno);--3. 添加外鍵,需要保證外碼和被參照表的主屬性的數據類型保持一致
alter table student add foreign key (sno) references student(sno);
刪除約束
/*通過指定的約束名字刪除指定的約束*/
alter table student drop constraint S_un;/*在左邊單機右鍵刪除*/
三、刪除表
/*刪除表的時候必須先將參照表干掉,再刪除被參照表*/
drop table student;
索引的建立與刪除
建立索引的目的是加快數據查詢的速度。DBA或者表的屬主可以根據需要建立表的索引;但是有些DBMS可以自動建立以下索引,1)PRIMARY KEY索引(聚簇索引)2)UNIQUE索引(唯一性索引)
一、創建索引
/*創建唯一性索引*/
/** stu為索引名字,創建索引必須要有一個索引名* 列名后面緊跟排序類型,ASC為升序,DESC為降序,默認為ASC,可以有多個列,用逗號隔開。* 對于已經包含重復值的屬性列不可以增加唯一性索引
*/
create unique index S_nn on student(graduation asc);/*創建聚簇索引(聚集)*/
Create clustered index stu on student(sage desc);
/** 聚簇索引的關鍵字為clustered,不是書上有誤,而是sqlserver是這樣* 同樣,列名后面緊跟排序類型,可以有多個列,用逗號隔開。* 聚簇索引嚴格按照物理存儲位置來排序。* 不可以在有主鍵的表中創建索引* 一個表只能創建一個聚簇索引
*/
二、刪除索引
/*注意:刪除索引必須為表名+索引名*/
drop index student.stu