今天,因为项目有3张表,而且3张表之间,都有关联,我又重温习了一个主键与外键的运用:
--删掉表
drop table dept
drop table emp
--创建dept表,
create table dept(deptno int primary key,dName nvarchar(30),loc nvarchar(30))
--这里是dept(deptno)主键指向外键emp(deptno),没有联级删除与更新
create table emp(empno int primary key
,eName nvarchar(30),
job nvarchar(30),
mgr int,
hiredate datetime,
sal numeric(10,2),
comm numeric(10,2),
deptno int foreign key references dept(deptno));
--以后为创建表时,并创建联级关系
create table emp(empno int primary key
,eName nvarchar(30),
job nvarchar(30),
mgr int,
hiredate datetime,
sal numeric(10,2),
comm numeric(10,2),
--联级删除
deptno int foreign key references dept(deptno) on delete cascade);
--联级更新
--deptno int foreign key references dept(deptno) on update cascade);
--如果是创建表时,没有创建联级关系,可以再增加
create table emp(empno int primary key
,eName nvarchar(30),
job nvarchar(30),
mgr int,
hiredate datetime,
sal numeric(10,2),
comm numeric(10,2),
deptno int);
--这段语句就是增加联级的删除与更新
alter table emp add constraint FK_deptno foreign key (deptno) references dept(deptno) ON UPDATE CASCADE ON DELETE CASCADE
以上的操作都是在sql server 2000中进行的,以下部分是插入与删掉的数据,本人已经操作过没有问题,图片就不上传了。
insert into dept values(10,'grtu','newke')
insert into dept values(20,'sl','shengchang')
insert into emp(empno,eName,job,mgr,hiredate,sal,deptno)values
(103,'dengping','cleck',9,'1985-9-12',1300.00,10)
insert into emp(empno,eName,job,mgr,hiredate,sal,deptno)values
(106,'milik','cleck',9,'1985-9-12',1300.00,30)--deptno这时为30时,就违反了主键定义,因为30不存在,这就是外键指向主键的运用
insert into emp(empno,eName,job,mgr,hiredate,sal,deptno)values
(105,'lichong','IPQC',93,'1990-2-22',1400.00,10)
insert into emp(empno,eName,job,mgr,hiredate,sal,deptno)values
(104,'lichong','IPQC',93,'1990-2-22',1400.00,20)
select * from emp
select * from dept
delete from emp where empno= '105';
--联级删除
delete from dept where deptno= '10';
--联级更新
update dept set deptno=11 where deptno =10;