数据库表外键设置

article/2025/10/6 0:55:27

http://blog.csdn.net/pplsunny/article/details/7747340

我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。当然,其它字段可以辅助我们在执行这些操作时消除共享冲突,不过就不在这里讨论了。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。所以数据库在设计时,主键起到了很重要的作用。

常见的数据库主键选取方式有:

  • 自动增长字段
  • 手动增长字段
  • UniqueIdentifier
  • “COMB(Combine)”类型

 外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

 

详细例子:

     创建来年各个简单的表:Author表和Detail表

Sql语句如下:

create table Author
(
idint identity(1,1) primary key not null,
namevarchar(50)
)

create table Detail
(
idint identity(1,1) primary key not null,
author_id      int,

        detail            varchar(50)
)

 

--添加外键约束语法注释:alter table 表名 add constraint 约束名 foreign key (引用外键列名) references 外键表(外键列)

可视化的操作方法:

  table->选中表->design->选中需要设置外键的字段->选择“关系”->选择"添加"->在表和列规范处选择右边省略号(见图一)->再选择相应关系(见图二)。

如图:

图一:

 


 

 

图二:

 

 


 

备注:

1.。。外键和主键的字段的数据类型必须相同。

2.。。在删除表的时候要先删除外键表才能删除主键表

3.。。图二中主键表选择要设置外键字段参照的表(即主键表的一个主键是将要设计的外键),外键表就是要添加外键的表。

 

下面提供一个网上搜集的综合实例.

 

--创建数据库
USE master
GO
IF EXISTS(SELECT * FROM sysdatabases WHERE NAME='study')
DROP DATABASE study
GO

CREATE DATABASE study
ON
( NAME = study_dat,
   FILENAME = 'c:/study/study_data.mdf',
   SIZE = 5MB,
   MAXSIZE = 25MB,
   FILEGROWTH = 5MB )
LOG ON
( NAME = 'study_log',
   FILENAME = 'c:/study/study_log.ldf',
   SIZE = 5MB,
   MAXSIZE = 25MB,
   FILEGROWTH = 5MB )
GO

--打开库
use study

--创建表

IF EXISTS(SELECT * FROM sysobjects WHERE NAME='Stu_PkFk_S')
DROP TABLE Stu_PkFk_S
GO
create table Stu_PkFk_S
(
sno char(6),
sname char(10),
age int,
sex char(2),
constraint PK_S primary key (sno),   --主键
constraint CK_age check(age>=0 and age<=150)  --约束
)

create table Stu_PkFk_C
(
cno char(8),
cname char(16),
credit int,
constraint PK_C primary key (cno), --主键
constraint CK_credit check (credit>=0)  --约束
)

create table Stu_PkFk_SC
(
sno char(6),
cno char (8),
constraint PK_SC primary key (sno,cno),
constraint FK_s foreign key (sno) references Stu_PkFk_S(sno), --外键
constraint FK_c foreign key (cno) references Stu_PkFk_C(cno)
)

--测试数据
insert into Stu_PkFk_S values ('001','zhang',19,'男')

insert into Stu_PkFk_S values('002','li',16,'女')

insert into Stu_PkFk_C values('001','li',100)

insert into Stu_PkFk_SC values('002','001')

select * from Stu_PkFk_S
select * from Stu_PkFk_C
select * from Stu_PkFk_SC

DELETE FROM Stu_PkFk_S
DELETE FROM Stu_PkFk_SC

 
--测试添加删除外键
--添加外键约束语法注释:alter table 表名 add constraint 约束名 foreign key (引用外键列名) references 外键表(外键列)

--删除外键
alter table Stu_PkFk_Sc drop constraint  FK_s
alter table Stu_PkFk_SC drop constraint  FK_c

--添加外键
alter table Stu_PkFk_Sc
        add constraint Fk_s
        foreign key (sno)
        references Stu_PkFk_S(sno)
go

alter table Stu_PkFk_SC
        add constraint Fk_c
        foreign key (cno)
        references Stu_PkFk_C(cno)
go

 

--测试添加删除主键

 --删除主键
alter table Stu_PkFk_S drop constraint PK_S  
go  

--增加主键
alter table Stu_PkFk_S add constraint  PK_S primary key (sno)  
go

转载于:https://www.cnblogs.com/shuiyun/archive/2012/11/07/2758432.html


http://chatgpt.dhexx.cn/article/Hy0X0H8g.shtml

相关文章

数据库——外键的作用

我们用一个比较实际的例子来描述问题&#xff0c;并讲解外键作用&#xff1a; 当我们在网上购物的时候&#xff0c;我们有我们的帐号&#xff0c;还有我们所在不同地方的地址信息如公司&#xff0c;学校&#xff0c;家里&#xff0c;或者给亲戚朋友送个礼物&#xff0c;收货人…

mysql数据库添加外键的四种方式

文章目录 一、添加外键的四种方式二、文档下载 一、添加外键的四种方式 1、 建表时直接使用FOREIGN KEY&#xff0c;这种方式外键名称自动生成。如下图。 FOREIGN KEY (user_id) REFERENCES t_user(id)2、 建表时使用CONSTRAINT指定外键名称。如下图。 CONSTRAINT fk_studen…

彻底理解数据库外键

外键的定义 如果 公共关键字在一个关系中是 主关键字&#xff0c;那么这个 公共关键字被称为另一个关系的 外键。由此可见&#xff0c;外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表&#xff0c;具有此外键的表被称为主表的从表。外键又称作外…

什么是数据库外键?

外键 Teacher_id就是student的外键 Teacher是主表&#xff0c;student是子表&#xff08;从表&#xff09; 外键就是一个表中的一个字段引用了另一个表中的主键&#xff0c;引用的表叫做子表&#xff0c;被引用的表叫做主表&#xff0c;外键是一种约束&#xff0c;描述的是表之…

数据库常用命令之外键(foreign key)多对多(总结,基础)

我是小白&#xff0c;刚接触MySQL不久&#xff0c;现阶段正在学习&#xff0c;为此在这里留下自己的学习笔记。如果有错误的地方还请大家见谅&#xff0c;评论或者私发我错误的地方哦&#xff0c;谢谢大家&#xff0c;嘿嘿~ 外键&#xff08;foreign key&#xff09; 引言&…

MySQL中的外键(foreign key)

阅读目录 前言一、外键作用及其限制条件1 外键的定义2 外键的作用3 外键创建限制 二、外键创建方法1 创建外键的语法2 举例&#xff08;1&#xff09;创建两张表&#xff08;2&#xff09;创建外键&#xff08;3&#xff09;查看表结构 三、验证外键作用1 先向主表中添加数据2 …

显示gsensor即时数据的apk 用gsensor来判断手机的静和动

即时显示gsensor的数据&#xff0c;可以在调试重力感应器驱动和测试手机性能时起到很好的作用。类似的&#xff0c;SensorEventListener还可以用在其他感应器的场合&#xff0c;比如光感应、地磁感应。这里用两种方式来完成读取并显示gsensor数据的功能&#xff0c;一种是activ…

老化测试Gsensor失败分析

在log中搜Gsensor可以看到如下&#xff1a; 在Y:\1\18045c1老化\bug127302c1_slog\last_log\2015-01-01-06-19-23\android\0-events-06-19-24.log中搜到如下&#xff1a; 行号 500 - 01-01 06:36:08.996 664 2050 I am_create_activity: [0,509924699,15,com.wingtech.runin…

MTK 9.0平台调试gsensor

MTK 9.0平台调试gsensor ----型号为&#xff1a;stk8baxx 1 查看原理图可以知道stk8baxx重力传感器 使用i2c1通道进行通讯&#xff0c;由于该重力传感器是不使用中断模式的进行触发的&#xff0c;所以不需要配置中断引脚。由此可以配置stk8baxx重力传感器的dts dts文件配置如…

APK无法识别gsensor问题剖析

APK无法识别gsensor问题的原因有很多&#xff0c;这里只是提供一条思路&#xff0c;解决现有项目遇到的问题。 1、确保驱动层可以工作。 2、打印LOGCAT数据&#xff0c;分析sensorservice流程 1、移植流程&#xff1a; 步骤&#xff1a;移植gsensor驱动&#xff0c;mc3413&am…

mtk平台gsensor,msensor方向确定方法

在gsensor和msensor驱动调试中&#xff0c;一个很重要的参数就是direction。 direction与芯片、layout和结构三者结合&#xff0c;才能最终确定该参数值。 mtk平台中该参数的示意图 在mtk10.0的kernel中提供了一个简单的调试接口&#xff0c;用于确认该参数值。 内核节点 /…

Gsensor驱动概述

本文以Bma250驱动为例子&#xff0c;详细介绍Gsensor设计的一个模板。 gsensor驱动在系统中的层次如下图所示&#xff1a; 图中包含三个部分&#xff1a;hardware,driver, input&#xff1a; n Hardware&#xff1a;其实我们可以认为Gsensor也是一个I2C设备。整个Gsens…

MTK平台Android Gsensor数据校准与数据获取

http://blog.csdn.net/morixinguan/article/details/76850600 上节,写WIFI MAC地址的时候我们已经知道,MTKAndroid系统的Gsensor校准的数据其实也是存储在NVRAM中的,Gsensor隶属于传感器系统架构。 接下来我们来看下Gsensor校准的基准图像: 那么如何来校准Gsensor的X,Y,Z三…

android g sensor,android gsensor 休眠震动唤醒功能怎么实现

一、唤醒源 设备休眠后&#xff0c;通过触发唤醒源使设备恢复正常工作模式。设备唤醒源有多种&#xff0c;对于Android设备常见的就有PowerKey、来电唤醒、Alarm唤醒等。 唤醒源的实现处于内核空间&#xff0c;本文重点讨论下PowerKey作为唤醒源的具体实现。 二、PowerKey唤醒源…

G-sensor 介绍

转自&#xff1a;http://blog.chinaunix.net/uid-29595319-id-4200772.html G-sensor G-sensor是加速度传感器&#xff0c;可以通过其来获得分别来自三个不同轴向上的加速度用以通知上层应用做出相应处理。 由于地球的引力作用&#xff0c;gsensor平放时&#xff0c;Z轴方向能…

G-sensor概述及常用概念整理【转】

本文转载自:http://www.jianshu.com/p/d471958189a0?nomobile=yesG 本文对G-sensor进行整理,先介绍G-sensor的一些基本概念,再具体讲解BOSCH、ST、ADI三家的G-sensor,其中BOSCH的G-sensor重点讲BMA222E,ST的G-sensor重点讲LIS2DH12,ADI的G-sensor具体讲ADXL362。 一、G-…

初次使用Fleck+redis订阅发布实现学习小demo

https://www.cnblogs.com/SupPilot/p/10396333.html 首先安装Fleck的程序包添加引用下面是客户端代码&#xff1a; 客户端代码&#xff1a; 运行效果&#xff1a; 遇到的问题&#xff1a; Q:通常每个套接字地址(协议/网络地址/端口)只允许使用一次 A:是因为本萌新把WebSocke…

core+Fleck+redis

1.新建core版控制台程序引用 2.初始化websocket class Program { //客户端url以及其对应的Socket对象字典 static IDictionary<string, IWebSocketConnection> dic_Sockets new Dictionary<string, IWebSocketConnection>(); static …