精华内容
下载资源
问答
  • SQL Server 2012 外键约束(定义外键、删除外键

    万次阅读 多人点赞 2019-04-21 20:00:26
    文章目录准备知识定义外键使用SSMS工具定义外键使用SQL方式定义外键删除外键使用SSMS工具删除外键方式一:在对象资源管理器中删除主键方式二:在表设计器中删除主键使用SQL方式删除外键 准备知识     外键...







    准备知识

        外键(FK)是用于建立或加强两个表数据之间的链接的一列或多列。
        通过将表中主键值的一列或多列添加到另一个表中,可创建两个表之间的连接,这个列就成为第二个表的外键
        FK约束的目的是控制存储在外表中的数据,同时可以控制对主键表中数据的修改
        例如:publishers表中记录出版商的信息,titles表中记录书的信息,如果在publishers的表中删除一个出版商,而这个出版商的ID在titles表中记录书的信息时被使用了,则这两个表之间关联的完整性将被破坏,即titles表中该出版商的书籍因为与publisher表中的数据没有链接而变的孤立。
        FK约束可以防止这种情况的发生,如果主键表中数据的更改使得与外键表中数据的链接失效,则这种更改是不能实现的;如果试图删除主键表中的行或试图修改主键值,而该主键值与另一个表的FK约束值相关,则该操作不可实现。若要成功的更改或删除FK约束的行,可以现在外键表中删除外键数据或更改外键数据,然后将外键连接到不同的主键数据上去
        外键主要是用来控制数据库中的数据完整性的,当对一个表的数据进行操作时,和他有关联的一个表或多个表的数据能够同时发生改变



    两个数据表结构如下所示:
    (1)student表
    在这里插入图片描述
    (2)class表
    在这里插入图片描述

    定义外键

    使用SSMS工具定义外键
    1. 右击需要添加外键的数据表,选择“设计”。
      在这里插入图片描述
    2. 进入表设计器界面,选择工具栏上的关系图标,或者右击数据表中的行,在弹出的对话框中选择“关系”。
      在这里插入图片描述
      在这里插入图片描述
    3. 进入外键关系对话框,单击“添加”。
      在这里插入图片描述
    4. 点击右侧网格中的“表和列规范”,再点击右侧的“…”按钮。
      在这里插入图片描述
    5. 进入表和列对话框,从主键表中选择需要外键所在的数据表。
      在这里插入图片描述
    6. 在主键表下方的表格中,选择此表中的主键列,在相邻的网格中选择外键表中相应的外键列。
      在这里插入图片描述
    7. 在“关系名”中填写适合的关系名,点击“确定”。
      在这里插入图片描述
    8. 关闭外键关系对话框,点击保存键,或者按Ctrl+F5键进行保存。展开刚开打开的数据表,再展开“键”,就可以看到刚才定义的外键。
      在这里插入图片描述
      注意:
      (1)定义外键约束的列的数据类型必须和引用的主键列的数据类型相通
      (2)在定义外键约束之前,外键所在的表必须已经定义了主键

    使用SQL方式定义外键
    方式一:在创建数据表的时候定义外键
    1. 在SSMS工具栏中单击“新建查询”,打开“SQL编辑器”窗口
      在这里插入图片描述
    2. 输入创建SQL代码
    USE schoolDB                                                 --打开数据库schoolDB
    GO
    IF EXISTS(SELECT * FROM sysobjects WHERE name='student') 
    DROP TABLE student                --检查student是否已经存在,如果存在,则删除
    GO
    CREATE TABLE student                                           --表名为student
    (
    	  StuID int NOT NULL,                                           --学生学号
    	  StuName varchar(15) NOT NULL,                                 --学生姓名
    	  Sex char(2) NULL,                                             --性别
    	  Major varchar(20) NULL,                                      --所选专业
    	  ClassID int NULL FOREIGN KEY REFERENCES class(ClassID)
    
    )
    
    
    1. 点击“分析”按钮,或按住Ctrl+F5,对SQL代码进行语法分析,确保SQL语句语法正确。
      在这里插入图片描述
    2. 点击“执行”按钮,或按住F5,执行SQL代码。
      在这里插入图片描述
    3. 刷新并查看数据表中的键。
      在这里插入图片描述

    方式二:修改数据表定义外键
    1. 在SSMS工具栏中单击“新建查询”,打开“SQL编辑器”窗口
      在这里插入图片描述
    2. 输入创建SQL代码
    USE schoolDB
    GO
    ALTER TABLE student --打开schoolDB数据库
    ADD CONSTRAINT FK_student_class FOREIGN KEY(ClassID) REFERENCES class(ClassID)     
                              --在表product的CatID列上定义与表category的外键关系
    
    
    1. 点击“分析”按钮,或按住Ctrl+F5,对SQL代码进行语法分析,确保SQL语句语法正确。
      在这里插入图片描述
    2. 点击“执行”按钮,或按住F5,执行SQL代码。
      在这里插入图片描述
    3. 刷新并查看数据表中的键。
      在这里插入图片描述


    删除外键

    使用SSMS工具删除外键
    方式一:在对象资源管理器中删除外键
    1. 展开需要删除外键的数据表,然后再展开“键”。
      在这里插入图片描述
    2. 右击需要删除的外键,选择“删除”。
      在这里插入图片描述
    3. 在删除对象界面,点击“确定”,即可完成外键删除。
      在这里插入图片描述
    方式二:在表设计器中删除外键
    1. 右击需要删除外键的数据表,选择“设计”。
      在这里插入图片描述
    2. 进入表设计器界面,右击鼠标,选择“关系”。
      在这里插入图片描述
    3. 在外键关系对话框中选择需要删除的外键,点击“删除”,完成外键删除。
      在这里插入图片描述
    使用SQL方式删除外键
    1. 在SSMS工具栏中单击“新建查询”,打开“SQL编辑器”窗口
      在这里插入图片描述

    2. 输入创建SQL代码

    USE schoolDB --打开schoolDB数据库
    GO
    ALTER TABLE student 
    DROP CONSTRAINT FK_student_class   --删除表student的外键FK_student_class
    
    
    1. 点击“分析”按钮,或按住Ctrl+F5,对SQL代码进行语法分析,确保SQL语句语法正确。
      在这里插入图片描述
    2. 点击“执行”按钮,或按住F5,执行SQL代码。
      在这里插入图片描述
    3. 外键已被删除。
      在这里插入图片描述
    展开全文
  • sql server设置外键

    万次阅读 2019-04-28 10:21:04
    然后单击随便选择一字段,选择“关系” 选择“表和列规范” 在主键表那里选择外键的数据来源表,比如score的外键courseid完全来源于course表的courseid,所以这里选择course表,表选择结束后,再选择作为...

    首先选择设置外键的表,右键“设计”

    然后单击随便选择一个字段,选择“关系”

    选择“表和列规范”

    在主键表那里选择外键的数据来源表,比如score的外键courseid完全来源于course表的courseid,所以这里选择course表,表选择结束后,再选择作为外键匹配的字段

    完成后点击确定即可

     

    展开全文
  • SQL中的外键约束及表查询 外键约束 foreign key 实体:数据库中的表,就可以看作一实体,实体和实体之间有一些关系 比如说做一网上商城的项目,里面有用户表,商品表,订单表 一对的关系:用户和订单 用户和...

    SQL中的外键约束及多表查询

    外键约束

    foreign key

    实体:数据库中的表,就可以看作一个实体,实体和实体之间有一些关系

    比如说做一个网上商城的项目,里面有用户表,商品表,订单表

    一对多的关系:用户和订单

    用户和订单,用户表属于单表一方,订单表属于多表,意思是一个用户可以有多张订单

    --创建用户表
    create table user(
    	id int primary key auto_increment,
        username varchar(10)
    );
    --创建订单表
    create table orders(
    	id int primary key auto_increment,
        totalprice double,
        user_id int
    );
    
    --我们要添加外键约束,让两张表之间产生制衡,我们就在多表一方添加外键约束,去关联主表一方的主键
    
    --修改表来添加主键约束
    alter table orders add foreign key(user_id) references user(id)
    
    --添加了外键约束,主表一方不能删除多表还在引用的数据,多表一方不能添加主表没有描述的数据
    
    --开发中处理一对多:在多表中添加一个外键,名称一般为主表的名称id,字段类型一般和主表的主键类型保持一致,为了保证数据的有效性和完整性,在多表的外键上添加外键约束即可。
    
    

    多对多的关系:商品和订单

    每个商品可以属于不同的订单

    --创建商品表
    create table product(
    	id int primary key auto_increment,
        name varchar(20),
        price double
    );
    --创建中间表
    create table orderitem(
    	oid int,
        pid int
    );
    --添加外键约束
    订单和中间表
    alter table orderitem add foreign key(oid) references orders(id);
    商品和中间表
    alter table orderitem add foreign key(pid) references product(id);
    
    --开发中处理多对多:引入一张中间表,存放两张表的主键,一般会将这两个字段设置为联合主键,这样就将多对多的关系拆分为两个一对多了,为了保证数据的有效性和完整性,需要在中间表上添加两个外键约束即可。
    

    多表查询

    多张表的无条件的联合查询,没有任何意义

    select a.*,b.* from a,b;
    

    (1)内连接:

    格式一:显式的内连接

    select a.*,b.* from a [inner] join b on ab的连接条件
    

    格式二:隐式的内连接

    select a.*,b.* from a,b where ab的连接条件
    

    (2)外连接

    左外连接:

    select a.*,b.* from a left [outer] join b on 连接条件;    --outer可以不写
    意思:先展示join左边的(a)表的所有数据,根据条件关联查询join右边的表(b),符合条件则展示出来,不符合以null值展示。
    

    右外连接:

    select a.*,b.* from b right [outer] join a on 连接条件;  --outer可以不写
    意思:先展示join右边的表(a)表的所有数据,根据条件关联查询join左边的表(b),符合条件则展示出来,不符合以null值展示。
    

    (3)查看用户名确定的订单

    查看用户为张三的订单详情

    1.先查询张三的id
    select id from User where username = '张三';
    2.select * from orders where user_id = ?;
    --判断条件,当id相同时的订单的内容
    两个合二为一  注意:后面的条件 把括号带上
    select * from orders where user_id = (select id from User where username = '张三'); 
    

    (4)查询出订单价格>300的用户的所有信息

    1.先查询出订单价格>300的用户的id
    select user_id from orders where price >300;//(3,3,5,null)
    2.select * from user where id =?;
    		
    两个合二为一:
    select * from user where id =(select user_id from orders where price >300);
    

    (5)查询订单价格大于300的订单信息及相关用户信息

    方式一:内连接
    select orders.*,user.* from orders,user where user.id=orders.user_id  and orders.price>300 ;
    
    方式二:子查询    是将一张表的查询结果作为一张临时表
    --先查出 订单大于三百的 订单  然后可以作为一个临时表    select * from orders where price>300
    --合二为一条  注意给临时表 起个别名 注意给表起别名 名字不要带引号
    其实用的就是内链接 查两张表 注意把临时表用户括号括起来
    select user.*,tmp.* from user,(select * from orders where price>300) as tmp where user.id=tmp.user_id;
    
    展开全文
  • 在mySql操作中,java进行表插入时,注意有外键的表,必须先让外键表先插入数据,含有外键的这表后插入,不然报外键错误,fk_0002...也就是表A表B中,先将A表中的数据插入,再插入B表数据,才能成功.....虽然之前学过,...

    表A


    id   name


    表B

    id  Aid



    在mySql操作中,java进行多表插入时,注意有外键的表,必须先让外键这个表先插入数据,含有外键的这个表后插入,不然报外键错误,fk_0002...也就是表A表B中,先将A表中的数据插入,再插入B表数据,才能成功.....虽然之前学过,但是实践过程中还是会忘....


    再有,删除时,要先删除表B的数据,才能删除表A的数据

    展开全文
  • sql外键_SQL外键

    千次阅读 2020-07-27 05:46:11
    sql外键 In this article let us review different ways to create a SQL foreign key, rules on updates and deletes, enabling foreign key constraints, disabling foreign key constraints and not for ...
  • SQL 主键和外键约束

    2015-04-30 11:38:11
    SQL的主键和外键的作用:   外键取值规则:空值或参照的主键值。 (1)插入非空值时,如果主键表中没有这值,则不能插入。 (2)更新时,不能改为主键表中没有的值。 (3)删除主键表记录时,你可以在建外键时选定...
  • SQL编程:外键约束

    2020-11-29 20:50:20
    外键(foreign key) 一个表中的foreign key指向另一个表中的unique key(唯一约束的键) 对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表...一个表可以有一个或者多个外键,外键可以为空值,若不为
  • 1.分区函数:为什么分区一直报错“数据库中已经存在对象” 代码:use food go create partition function pf_eva_date(datetime) as range left ...3.如果美食表中,美食有多个,怎么关联这多个外键
  • SQL 主键与外键的关系

    千次阅读 2018-04-25 10:15:27
    转载:点击打开链接SQL的主键和外键的作用:外键取值规则:空值或参照的主键值。(1)插入非空值时,如果主键表中没有...简而言之,SQL的主键和外键就是起约束作用。主键、外键和索引的区别定义:主键--唯一标识一条记...
  • SQL触发器和外键连用

    2020-06-09 20:18:19
    起因:为防止数据冗余,我建立了两表,一用户表user(表里面只存放了id(主键)、用户名、密码)和用户信息表usr_Info(表中有手机号、邮箱、姓名、家庭地址等字段)。 问题来了:我的想法是每向user里新增加一条数据...
  • SQL中主键外键关系

    千次阅读 热门讨论 2013-07-21 20:08:06
    在学过数据库以后对于约束的概念就不是太陌生了,即:约束(Constraint)是Microsoft SQL Server 提供的自动保持... 主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。主键和外键的设计对物理数据库的性能
  • sql server删除外键约束

    千次阅读 2014-05-25 16:23:39
    我给例子 --测试环境 --主表 create table test1(id int primary key not null,value int) insert test1 select 1,2 go --从表 create table test2(id int references test1(id),value int) go -
  • 答案是可以添加。 多个字段之间对应关系必须是外键所指向的表中的对应关系. 如果在修改数据的时候不满足上述条件,则会报如下错误:
  • sql组合键设置外键 In the previous article, we talked about the primary key (PK). In this one, we’ll check what is the foreign key (FK) and how it’s related to the primary key. This is the final ...
  • SQLSERVER主外键的关联

    2014-07-14 10:15:50
    publishers 表的 title_id 列中放置一个外键约束,以保证这一列中的输入值与 titles 表 title_id 列中的现有值匹配。 在数据库关系图中,当创建从一个附加了主键约束或唯一约束的表到另一个表之间的关系时,外键...
  • sql server 外键 In this article, we will seek an answer to an important question – “What is a foreign key in SQL Server?”. At the same time, we will give some seconder answers to this question. ...
  • Day08一、SQL约束1、主键约束2、非空约束3、唯一约束4、自动增长二、外键约束三、表关系1、一对2、3、一对一四、表查询1、笛卡尔积现象2、子查询 一、SQL约束 1、主键约束 PRIMARY KEY 约束,用于标识...
  • sql主键和外键的区别

    千次阅读 2015-10-13 23:56:20
    这样的一列或者列成为表的主键,通过它可以强制表的实体完整性。当创建或者更改表时可以通过定义PRIMARY KEY约束来创建主键,一表只能有一主键约束,而且主键约束中的列不能是空值,由于主键约束确保唯一数据...
  • 只包括一些简单的教程和查询,只是最基础并没有经过优化设置数据库表主外键约束lter table 外键表名 add constraint 约束名称 foreign key(外键字段) references 主键表名(约束列名) 如表A中的Ids是主键,要约束...
  • 表中,会存很条记录,需要一列来位置标识一条数据 1.主键:唯一标识一条数据; 值不能为空 不能重复 标识列:一旦将一列设置成标识列,它就不能再手动输入值,是插入数据时自动生成的。这列的类型必须的...
  • sql 主键 外键

    2019-08-07 11:58:40
    主键:一关系表,一行数据可以唯一的标识这张表,不使用任何与业务相关的字段作为主键,基本上都是全局唯一GUID类型,自增id什么的来做主键。 外键外键是定义的 class表 id name 1 一班 ...
  • SQL 主键,外键,唯一约束,check约束

    千次阅读 2010-03-26 10:45:00
    外键预算约束可以将一个字段或多个字段组合定义为外键*, 一个表可以定义多个外键.多个父表其中字段成为一子表的外键
  • 这篇文章主要介绍了SQL与Oracle外键约束中的级联删除,更内容请参考下文: 最近软件系统中要删除一条记录,就要关联到同时删除好多张表,它们之间还存在着约束关系.所以考虑到在创建表时加上约束关系,详细内容如下: ...
  • Sql 多重外键约束

    千次阅读 2014-10-14 23:40:13
    多重外键约束这个名称可能并不准确,它是多个外键约束情况的一个特例,它指的是外键表有存在两个及以上外键关联到同一个主键表,例如一个部门,有正副两个管理者 首先看看不含多重外键的多个外键约束的一般情况,...
  • SQl外键

    2010-10-29 21:28:00
    SQl外键 子表,父表的定义: 拥有外键的表是子表。主键被其它表引用的表是父表。换句话说:因为父表的标识被很个子表中的记录引用,所以叫父表。拥有外键关系,并且可以随便删除数据,不影响其它表的数据的那个表...
  • In SQL Server , I got this error -> "There are no primary or candidate keys in the referenced table 'BookTitle' that match the referencing column list in the foreign key 'FK_BookCo...
  • sql外键

    2013-07-02 17:50:12
     一是让数据库自己通过外键来保证数据的完整性和一致性  一就是能够增加ER图的可读性   有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库有时候会由于没有通过外键的检测而使得开发...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 127,117
精华内容 50,846
关键字:

sql多个外键