一、使用T-SQL创建表、设置primary key一例
-
USE DBTest0401V2
-
CREATE TABLE StuInfo(
-
FId decimal(8,0) not null primary key,
-
FClassID decimal(8,0) not null,
-
FStuID decimal(8,0),
-
FStuName char(20)
-
)
如果一开始没有设置主键,可用下列语句设置主键:
-
USE DBTest0401V2
-
Alter table StuInfo add primary key(FStuID)
二、T-SQL创建表、设置主键、外键一例
-
USE DBTest02
-
CREATE TABLE StuInfo
-
(
-
FStuID decimal(8,0)not null,
-
FClassID decimal(8,0) not null,
-
FStuName char(20),
-
CONSTRAINT PK_FStuID primary key(FStuID)
-
)
-
CREATE TABLE CourceInfo
-
(
-
FCourceID decimal(8,0) not null,
-
FCourceName char(20)
-
CONSTRAINT PK_FCourceID primary key(FCourceID)
-
)
-
CREATE TABLE StuCourceInfo
-
(
-
FStuID decimal(8,0),
-
FCourceID decimal(8,0),
-
CONSTRAINT FK_StuID foreign key(FStuID) references StuInfo(FStuID),
-
CONSTRAINT FK_FCourceID foreign key(FCourceID) references CourceInfo(FCourceID)
-
)
这三个表删除时需要注意,因为StuCourceInfo表中的FStuID 是StuInfo的外键,StuCourceInfo表中的FCourceID 是CourceInfo的外键;因此,如果先删除StuInfo/CourceInfo,都会报下面错误:
因此,删除时要先删除StuCourceInfo表,再删除StuInfo、CourceInfo。
三、介绍主键、外键、约束
3.1 定义主键:
一个表中使用priamry标识,以唯一标识一条记录,不能重复、不能为空。
主键的作用是保证数据的完整性。
3.2 定义外键:
一个表TA中的字段FData1被references到在另一个表TB是主键FData,则称TA.FData1是TB的外键。
注意!外键的名不一定要与主键的名一致,只有创建约束关系后才称为外键,不然它与主键没有半毛钱关系!
外键的作用用来各其他表建立联系。
外键作用体现案例:
(1)、不允许在外键中添加主键中没有的值
假设表CourceInfo和表StuInfo中分别含下列数据:
这里我们尝试插入下面语句:
-
insert into StuCourceInfo(FStuID1,FCourceID1,FGradeValue) Values(1,1,'99');
改为下面语句则OK:
-
insert into StuCourceInfo(FStuID1,FCourceID1,FGradeValue) Values(101,1,'99');
-
select * from StuCourceInfo;
(2)级联效应
-
ON UPDATE CASCADE ON DELETE CASCADE
级联更新,级联删除,这样在删除主表时,成绩表中该学生的所有成绩都会删除。
现删除StuInfo表的FStuID=100的学生:
未加“ON UPDATE CASCADE ON DELETE CASCADE”之前:
添加级联语句及测试:
-
alter table StuCourceInfo drop constraint FK_CourceID;
-
alter table StuCourceInfo drop constraint FK_StuID;
-
alter table StuCourceInfo add constraint FK_StuID foreign key(FStuID1) references StuInfo(FStuID)
-
ON UPDATE CASCADE ON DELETE CASCADE;
-
alter table StuCourceInfo add constraint FK_CourceID foreign key(FCourceID1) references CourceInfo(FCourceID)
-
ON UPDATE CASCADE ON DELETE CASCADE;
-
delete from StuInfo where FStuID=101;
-
select * from StuCourceInfo;
3.3 constraint约束操作
(1)创建表时添加约束
-
CREATE TABLE StuCourceInfo
-
(
-
FStuID decimal(8,0),
-
FCourceID decimal(8,0),
-
CONSTRAINT FK_StuID foreign key(FStuID) references StuInfo(FStuID),
-
CONSTRAINT FK_FCourceID foreign key(FCourceID) references CourceInfo(FCourceID)
-
)
创建表时创建一个名为FK_StuID的约束,它的作用是将FStuID设置为表StuInfo的外键。
(2) 查询数据库中某个表的所有约束
原理是通过查询分析器里面的系统存储过程:sp_helpconstraint,语法如下:
-
use DBTest02
-
GO
-
EXEC sp_helpconstraint 'StuCourceInfo';
DBTest02为数据库名,StuCourceInfo数据库中的数据表名。
(3)T-SQL删除约束
-
use DBTest02
-
alter table StuCourceInfo drop constraint FK_StuID;
(4)T-SQL添加约束
-
use DBTest02
-
alter table StuCourceInfo add constraint FK_StuID foreign key(FStuID1) references StuInfo(FStuID);
参考文献:
http://www.cnblogs.com/ywb-lv/archive/2012/03/12/2391860.html
阅读(3069) | 评论(0) | 转发(0) |