深入SQL的主键、外键、约束

简介: 一、使用T-SQL创建表、设置primary key一例 USE DBTest0401V2 CREATE TABLE StuInfo( FId decimal(8,0) not null primary ...

一、使用T-SQL创建表、设置primary key一例

  1. USE DBTest0401V2
  2. CREATE TABLE StuInfo(
  3. FId decimal(8,0) not null primary key,
  4. FClassID decimal(8,0) not null,
  5. FStuID decimal(8,0),
  6. FStuName char(20)
  7. )

image

如果一开始没有设置主键,可用下列语句设置主键:

  1. USE DBTest0401V2
  2. Alter table StuInfo add primary key(FStuID)

二、T-SQL创建表、设置主键、外键一例

image

  1. USE DBTest02
  2. CREATE TABLE StuInfo
  3. (
  4. FStuID decimal(8,0)not null,
  5. FClassID decimal(8,0) not null,
  6. FStuName char(20),
  7. CONSTRAINT PK_FStuID primary key(FStuID)
  8. )
  9. CREATE TABLE CourceInfo
  10. (
  11. FCourceID decimal(8,0) not null,
  12. FCourceName char(20)
  13. CONSTRAINT PK_FCourceID primary key(FCourceID)
  14. )
  15. CREATE TABLE StuCourceInfo
  16. (
  17. FStuID decimal(8,0),
  18. FCourceID decimal(8,0),
  19. CONSTRAINT FK_StuID foreign key(FStuID) references StuInfo(FStuID),
  20. CONSTRAINT FK_FCourceID foreign key(FCourceID) references CourceInfo(FCourceID)
  21. )

    这三个表删除时需要注意,因为StuCourceInfo表中的FStuID 是StuInfo的外键,StuCourceInfo表中的FCourceID 是CourceInfo的外键;因此,如果先删除StuInfo/CourceInfo,都会报下面错误:

image

    因此,删除时要先删除StuCourceInfo表,再删除StuInfo、CourceInfo。

 

三、介绍主键、外键、约束

3.1 定义主键:

    一个表中使用priamry标识,以唯一标识一条记录,不能重复、不能为空。

主键的作用是保证数据的完整性。

 

3.2 定义外键:

    一个表TA中的字段FData1被references到在另一个表TB是主键FData,则称TA.FData1是TB的外键。

注意!外键的名不一定要与主键的名一致,只有创建约束关系后才称为外键,不然它与主键没有半毛钱关系!

外键的作用用来各其他表建立联系。

外键作用体现案例:

(1)、不允许在外键中添加主键中没有的值

假设表CourceInfo和表StuInfo中分别含下列数据:

image image

这里我们尝试插入下面语句:

  1. insert into StuCourceInfo(FStuID1,FCourceID1,FGradeValue) Values(1,1,'99');

image

改为下面语句则OK:

  1. insert into StuCourceInfo(FStuID1,FCourceID1,FGradeValue) Values(101,1,'99');
  2. select * from StuCourceInfo;

image

(2)级联效应

  1. ON UPDATE CASCADE ON DELETE CASCADE

    级联更新,级联删除,这样在删除主表时,成绩表中该学生的所有成绩都会删除。

imageimageimage

现删除StuInfo表的FStuID=100的学生:

未加“ON UPDATE CASCADE ON DELETE CASCADE”之前:

image

添加级联语句及测试:

  1. alter table StuCourceInfo drop constraint FK_CourceID;
  2. alter table StuCourceInfo drop constraint FK_StuID;
  3. alter table StuCourceInfo add constraint FK_StuID foreign key(FStuID1) references StuInfo(FStuID)
  4. ON UPDATE CASCADE ON DELETE CASCADE;
  5. alter table StuCourceInfo add constraint FK_CourceID foreign key(FCourceID1) references CourceInfo(FCourceID)
  6. ON UPDATE CASCADE ON DELETE CASCADE;
  7. delete from StuInfo where FStuID=101;
  8. select * from StuCourceInfo;

image

3.3 constraint约束操作

(1)创建表时添加约束

  1. CREATE TABLE StuCourceInfo
  2. (
  3. FStuID decimal(8,0),
  4. FCourceID decimal(8,0),
  5. CONSTRAINT FK_StuID foreign key(FStuID) references StuInfo(FStuID),
  6. CONSTRAINT FK_FCourceID foreign key(FCourceID) references CourceInfo(FCourceID)
  7. )

    创建表时创建一个名为FK_StuID的约束,它的作用是将FStuID设置为表StuInfo的外键。

(2) 查询数据库中某个表的所有约束

    原理是通过查询分析器里面的系统存储过程:sp_helpconstraint,语法如下:

  1. use DBTest02
  2. GO
  3. EXEC sp_helpconstraint 'StuCourceInfo';

    DBTest02为数据库名,StuCourceInfo数据库中的数据表名。

image 

(3)T-SQL删除约束

  1. use DBTest02
  2. alter table StuCourceInfo drop constraint FK_StuID;


image

(4)T-SQL添加约束

  1. use DBTest02
  2. alter table StuCourceInfo add constraint FK_StuID foreign key(FStuID1) references StuInfo(FStuID);


image

 

参考文献:

http://www.cnblogs.com/ywb-lv/archive/2012/03/12/2391860.html

http://zhidao.baidu.com/link?url=K1V-nthUIncype3eyMjjLCuNTlKWIBLFutGFhwAhS6yhYaluAfbLtPB1zit5uq-ZjF8oNe1AKjWZgzHxlru-ua

相关文章
|
7月前
|
SQL 测试技术 数据处理
软件测试|SQL DEFAULT约束怎么用?
软件测试|SQL DEFAULT约束怎么用?
64 0
|
7月前
|
SQL 数据采集 关系型数据库
软件测试|一篇文章带你深入理解SQL约束
软件测试|一篇文章带你深入理解SQL约束
72 0
|
3月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
87 0
|
3月前
|
SQL 存储 关系型数据库
MySQL索引原理(索引、约束、索引实现、索引失效、索引原则)以及SQL优化
MySQL索引原理(索引、约束、索引实现、索引失效、索引原则)以及SQL优化
135 1
|
8月前
|
SQL Java 数据库连接
2021-08-05mapper代理,几种pojo输入输出,pojo扩展通过扩展继承,映射主键普通属性映射,动态SQL,逆向工程
2021-08-05mapper代理,几种pojo输入输出,pojo扩展通过扩展继承,映射主键普通属性映射,动态SQL,逆向工程
45 0
|
4月前
|
SQL Oracle 关系型数据库
SQL PRIMARY KEY 约束- 唯一标识表中记录的关键约束
SQL NOT NULL 约束用于强制确保列不接受 NULL 值。这意味着该字段始终包含一个值,而不允许插入新记录或更新记录时不提供此字段的值。
95 0
|
4月前
|
SQL Oracle 关系型数据库
SQL FOREIGN KEY 约束- 保障表之间关系完整性的关键规则
SQL FOREIGN KEY 约束用于防止破坏表之间关系的操作。FOREIGN KEY 是一张表中的字段(或字段集合),它引用另一张表中的主键。具有外键的表称为子表,具有主键的表称为被引用表或父表。
87 0
SQL FOREIGN KEY 约束- 保障表之间关系完整性的关键规则
|
6月前
|
SQL 数据管理
SQL 6大约束 以及 数据管理(增删改查)
SQL 6大约束 以及 数据管理(增删改查)
|
7月前
|
SQL
删除SQL表数据时存在约束的解决方法
删除SQL表数据时存在约束的解决方法
138 0
|
7月前
|
SQL 关系型数据库 MySQL
SQL进阶之约束、索引
本实验带您学习SQL约束、索引、ALTER TABLE语句和AUTO INCREMENT字段的使用方法。
57 0