您的位置:首页 > 数据库

测试人员必知必会的SQL知识05

2012-11-09 22:15 337 查看
大家晚上好,昨天我们讲到了常见表的相关指令,主键、唯一、自动增长和唯一约束。今天我们继续学习外键约束和索引相关知识,以及更改表和删除表的指令。

先来看一下外键,外键主要是用来约束用于预防破坏表之间连接的动作。我们用一个例子来说明一下:

"Persons" 表:

Id_PLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijin
"Orders" 表:

Id_OOrderNoId_P
1778953
2446783
3224561
4245621

“Persons" 表中的 "Id_P" 列是 "Persons" 表中的 PRIMARY KEY。"Orders" 表中的 "Id_P" 列是 "Orders" 表中的 FOREIGN KEY。通过建立外键就把两个表建立起了关联,这对查询很有用的。

OK,我们在来看一下索引。索引主要是在不读取全表的时候加速查询。SQL Server中主要分为两种:聚集索引和非聚集索引。聚集索引主要特点就是调整索引表顺序的同时也会调整原表的顺序。当创建主键时自动创建聚集索引。一个表只能有一个主键,同样一个表也只能有一个聚集索引。一个聚集索引表最多有16列。非聚集索引就是调整表索引表的同时不会改变原表的顺序。当创建唯一约束时自动创建非聚集索引。一个非聚集索引表最多有249列。

唯一索引表示表中任何两个记录的索引值都不同的。

USE TestDB;

--昨天我们讲的创建约束都是在定义列时直接建立的,今天我们在介绍一个指令CONSTRAINT
--用CONSTRAINT语句建立主键、唯一、默认、检查约束
CREATE TABLE Stu(
	Sno int,
	Sname varchar(50),
	Saddr varchar(100) CONSTRAINT DF_Saddr DEFAULT '北京市',
	Sage int,
	--用constraint建立约束
	CONSTRAINT PK_Sno PRIMARY KEY (Sno),
	CONSTRAINT UN_Sname UNIQUE (Sname DESC),
	CONSTRAINT CK_Sage CHECK (Sage>15)
);

--建立外键约束
CREATE TABLE Scourse(
	Cno int,
	Cname varchar(50),
	Tno int,
	Sno int FOREIGN KEY REFERENCES Stu(Sno)
	--用constraint建立外键约束
	--CONSTRAINT FK_Scoures_Stu FOREIGN KEY(Sno) 
		--REFERENCES Stu(Sno)
	--这里要注意Stu表中的Sno列一定要是主键哦^_^
	--还有主键列和外键列的这个列类型要一致哦
);

--再建一个表,下面的例子用
CREATE TABLE Teacher(
	Tno int,
	Tname varchar(50),
	Tage int,
	CONSTRAINT PK_Teacher PRIMARY KEY(Tno)
);

--修改表,前面修改数据库我们用的是ALTER DATABASE,我们这里也是用ALTER
--增加列
ALTER TABLE Teacher
	ADD Taddr varchar(200);
--修改列
ALTER TABLE Teacher
	ALTER COLUMN Taddr varchar(100);
--删除列
ALTER TABLE Teacher
	DROP COLUMN Taddr;
--增加约束,和上面用constraint建立约束一样的
--这里就增加一个外键了
ALTER TABLE Scourse
	ADD CONSTRAINT FK_Teacher FOREIGN KEY(Tno)
		REFERENCES Teacher(Tno);
--删除约束
ALTER TABLE Scourse
	DROP FK_Teacher;
--搜狗输入法在SQL Server里好难用啊,总变成全角的
--这里再增加一个默认约束,注意一下是怎么指定列的?
ALTER TABLE Teacher
	ADD CONSTRAINT DF_Tage DEFAULT 35 FOR Tage;

--删除表
DROP TABLE Scourse;

--我想留个作业,所以索引就下次再说吧!
--要认真做作业联系哦,我们将查询的时候要用今天作业里的数据库和表(⊙o⊙)


作业:

建立一个数据库,数据库名SaleInfoDB

建立下表:

表名:ShopInfo(商场信息)
列类型空约束
ShopIDchar(4)NOT NULL主键
ShopNamechar(20)NOT NULL
ShopAddrchar(20)NOT NULL
Phonechar(11)NOT NULL唯一约束
DayTotalfloat
表名:ShopSell(商场销售信息)
列类型空约束
ShopIdchar(4)NOT NULL
ProdIDchar(6)NOT NULL
SellCountintNOT NULL
SellDatedatetimeNOT NULL
SalerIDchar(4)NOT NULL
表名:ProductInfo
ProdIDchar(4)NOT NULL
ProdNmaechar(10)NOT NULL
PricefloatNOT NULL
ProdFactchar(20)NOT NULL默认"华为"
ProdAddrchar(20)NOT NULL
FactPhonechar(11)NOT NULL
StockCountintNOT NULL
表名:SalerInfo
SalerIDchar(4)NOT NULL主键
SalerNamechar(6)NOT NULL
SalerAgeint
SalerSexchar(2)NOT NULL
SalerPhonechar(11)
Salaryfloat
外键约束
主键表主键列外键表外键列
ProductInfoProdIDShopSellProdID
检查约束
表名列名条件
SalerInfoSalerSex只能是"男"或"女"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: