精华内容
下载资源
问答
  • 定义外键约束

    千次阅读 2019-06-26 18:05:24
    定义外键约束: from sqlalchemy import ForeignKey 例如: emp_no = Column(Integer, ForeignKey('employees.emp_no', ondelete='CASCADE'), primary_key=True)

    定义外键约束:

    from sqlalchemy import ForeignKey
    例如:
    emp_no = Column(Integer, ForeignKey('employees.emp_no', ondelete='CASCADE'), primary_key=True)

    展开全文
  • 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. 外键已被删除。
      在这里插入图片描述
    展开全文
  • MySQL的外键约束是用来在两个表之间建立链接的,其中一个表发生变化,另外一个表也发生变化。从这个特点来看,它主要是为了保证表数据的一致性和完整性的。 对于两个通过外键关联的表,相关联字段中主键所在的表是主...
  • 外键约束

    千次阅读 2018-09-27 18:09:19
    如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键

    外键约束

    如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键

    外键(FOREIGN KEY)

    什么是外键

    假设有有AB两张数据表,A表有一个字段id用来唯一标识A中的一条记录,B表有一个字段a_id来关联A表的一条记录,则字段a_id被称为B表的外键。

    外键、主键的区别

    • 定义

      • 主键:唯一标识一条记录,不能有重复,不允许为空,一张数据表只能有一个主键
      • 外键:表的外键是另一张表中可以唯一标识的字段(如主键,一般都是主键),外键可以有重复值,可以是空值,一张数据表可以有多个外键
    • 作用

      • 主键:用来保证数据完整性
      • 外键:用来关联其他数据表,保持数据一致性,完整性,主要目的是控制存储在外键表中的数据

    外键的功能

    外键功能具有两种形式。

    1、 阻止执行

    • 从表插入新行,其外键值不是主表的主键值便阻止插入
    • 从表修改外键值,新值不是主表的主键值便阻止修改
    • 主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表的相关行)
    • 主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行)

    2、级联执行

    • 主表删除行,连带从表的相关行一起删除
    • 主表修改主键值,连带从表相关行的外键值一起修改

    两种方法提供给用户选择。无论选取哪种方法,从表里都不会有多余行。从另一个角度理解,用拒绝同一事物在从表中的标志与主表不一致来实现与主表中的标志一致。

    MySQL中外键的介绍

    • MySQL中只有InnoDB支持外键
    • 由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。
    • 设置外键约束的两个表之间会具有父子关系,即子表中外键的字段的取值范围由父表所决定
    • 设置外键一定程度上降低数据库的速度
    • 子表的外键字段的数据类型和父表中要一致

    外键约束的相关语法(MySQL)

    创建标识生成外键约束(CREATE TABLE)

    语法

    CREATE TABLE table_name
    (
    	.
        .
        key_name ...
    	...
        CONSTRAINT constraint_name
    	FOREIGN KEY foreign_key_name (column_name1)
    	REFERENCES parent_table (column_name2)
    	ON DELETE action1
    	ON UPDATE action2
    )
    

    语法关键字详解:

    • key_name:用来当做外键的字段,用于下面FOREIGN KEY子句
    • CONSTRAINT:为外键约束定义约束名称constraint_name,如果省略它,MySQL将自动生成一个名称
    • FOREIGN KEY:指定子表中关联父表中记录的字段column_name1,可以在FOREIGN KEY子句后放置一个外键名称foreign_key_name,或者MySQL自动创建一个名称
    • REFERENCES:指定父表parent_table及其在子表中被引用的列column_name2
    • ON DELETE:定义当父表中的记录被删除时,子表的记录要执行的操作action1,如果省略ON DELETE子句并删除父表中的记录,则MySQL将拒绝删除子表中相关联的数据。action1有以下几个选项:
      • RESTRICT(约束):当在父表(即外键的来源表)中删除一条或多条记录时,首先检查该记录是否有对应外键,如果有则不允许删除。
      • NO ACTION:在MySQL中,同RESTRICT,如果存在从数据,不允许删除主数据
      • CASCADE(级联):当在父表(即外键的来源表)中删除一条或多条记录记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。
      • SET NULL:当在父表(即外键的来源表)中删除一条或多条记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(注意:此时要求该外键允许为null)
    • ON UPDATE:定义在父表中的记录更新时,子表中的记录要执行的操作action2,当父表中的行被更新时,如果省略ON UPDATE子句,MySQL将拒绝对子表中的行的任何更新。action2有以下几个选项:
      • RESTRICT(约束):当在父表(即外键的来源表)中更新一条或多条记录时,首先检查该记录是否有对应外键,如果有则不允许更新。
      • NO ACTION:在MySQL中,同RESTRICT,如果存在从数据,不允许更新主数据
      • CASCADE(级联):当在父表(即外键的来源表)中更新一条或多条记录的主键值时,首先检查该记录是否有对应外键,有则更新子表中对应外键的值
      • SET NULL:当在父表(即外键的来源表)中更新一条或多条记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(注意:此时要求该外键允许为null)。

    示例

    收货地址表中用户IDuser_id设置为外键,并定义约束

    CREATE TABLE `address` (
      `id` int(11) NOT NULL,
      `user_id` int(11) DEFAULT NULL,
      `address` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`),
      CONSTRAINT `c_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    修改表结构时添加外键约束(ALTER TABLE)

    语法

    ALTER table_name
    ADD CONSTRAINT constraint_name
    FOREIGN KEY foreign_key_name(column_name1)
    REFERENCES parent_table(column_name2)
    ON DELETE action1
    ON UPDATE action2;
    

    语法关键字含义同上

    示例

    创建收货地址表address,给该表增加外键约束:用户IDuser_id设置为外键,并定义约束

    # 生成address表
    CREATE TABLE `address` (
      `id` int(11) NOT NULL,
      `user_id` int(11) DEFAULT NULL,
      `address` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`),
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    # 添加外键约束
    ALTER `address`
        ADD CONSTRAINT `c_user_id`
        FOREIGN KEY `fk_user_id`(`user_id`)
        REFERENCES `users`(`id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE;
    

    撤销外键约束

    ALTER TABLE table_name DROP FOREIGN KEY constraint_name;
    

    语法关键字含义同上

    示例

    ALTER TABLE `address` DROP FOREIGN KEY `c_user_id`;
    


    展开全文
  • Oracle定义约束 外键约束 实验详解
  • 数据库中的外键约束

    2021-09-02 00:53:34
    Mysql 下,外键设置: on delete 规则: ...(即外键约束主键表) 3、SET NULL 当取值为Set Null时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值.

    Mysql 下,外键设置:

    on delete  规则:

    1、CASCADE:级联

    所谓的级联删除,就是删除主键表的同时,外键表同时删除。


    2、NO ACTION(非活动,默认)、RESTRICT:约束/限制
    当取值为No Action或者Restrict时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。(即外键表约束主键表)


    3、SET NULL
    当取值为Set Null时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null

    含有外键的是从表

    展开全文
  • 附件包含的内容为MySQL数据库中关于外键的内容,包括外键定义,作用,添加和删除
  • 表的完整性约束-外键约束

    千次阅读 2021-01-24 16:18:00
    表的完整性约束-外键约束 外键约束(FOREIGN KEY,缩写FK)是用来实现数据库表的参照完整性的。外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性。 外键是指表中某个...
  • 外键及外键约束理解

    万次阅读 多人点赞 2018-08-20 20:11:27
    数据库(外键及其约束理解) 一:首先是外键定义  如果一个字段X在一张表(表一)中是主关键字,而在另外一张表(表二)中不是主关键字,则字段X称为表二的外键;换句话说如果关系模式R1中的某属性集不是自己的...
  • 下面介绍如何设置外键约束 1.创建表时就设置外键约束。 为了插入数据不规范报错能够更快的找到错误的地方,外键一般都会设置一个别名来表示外键约束。外键所引用的另一个表的属性要是主键。 我们可以直接在...
  • MySQL:简述MySQL外键约束

    千次阅读 2019-01-11 11:39:48
    MySQL:简述MySQL的外键约束 MySQL有两种常用的引擎类型:MyISAM和InnoDB。目前只有InnoDB引擎类型支持外键约束。 1、外键约束的含义:
  • MySQL外键约束

    2020-07-22 10:28:38
    1.添加外键约束 外键指的是在一个表中引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束,从而保证数据的一致性和完整性. 被用的表称为主表 引用外键的表称为从表 [ CONSTRAINT symbol] FOREIGN ...
  • SQL添加外键约束

    万次阅读 多人点赞 2019-03-14 11:05:42
    --1,sql语句创建表的同时添加外键约束 CREATE TABLE tb_UserAndRole --用户角色表 ( ID INT PRIMARY KEY IDENTITY(1,1), UserID INT NOT NULL,--用户ID RoleID INT NOT NULL,--角色ID foreign key(UserID) ...
  • 添加外键约束名字一定不能重复
  • 1、约束的含义: 是一种限制,对表的行或列进行限制。 2、约束的类型: 1)非空约束:not null ,字段的值不能为空。若添加数据时没有指定值,会报错。 添加非空约束 方式1:在创建表时添加非空约束 create...
  • MySQL外键约束(FOREIGN KEY)是什么?

    千次阅读 2020-05-16 18:02:40
    对MySQL中的外键约束从基础知识开始,说明了创建外键约束的原则,语法及特性,用案例的方式对外键约束进行解说。
  • 参照完整性约束(外键约束(Foreign key)) 用户定义完整性约束 参照完整性 属于表间规则,用来保持表之间的关系,确保插入到表中的数据是有效的。 可以使用外键***foreign key*** 来实现 创建外键 问题:如果不加...
  • 关闭数据库外键约束

    千次阅读 2017-08-06 19:54:27
    当向数据库中插入数据的时候,如果有表之间的关系十分复杂,尤其是是存在各种外键关系,这是需要暂时关闭这种针对外键约束的检查,本文针对以下三种数据库进行了一个总结
  • 使用外键约束

    2019-01-10 09:24:52
    外键的主要作用是保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的行。外键的作用是保持数据的一致性、完整性。 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个...
  • 定义一个教师表、一个学生表;在学生表中引用教师表ID create table teachers(teacherID int not null auto_increment primary key,teacherName varchar(8)); create table students(studentID int not null auto_...
  • --新闻分类表 if exists(select * from sysobjects where name='NewsCategory') drop table NewsCategory go create table ...不然就会报错,这就是所谓的外键约束,这个外键约束着News表中对CatergoryId的修改。
  • 外键约束和表关系

    2021-03-10 16:54:59
    表关系数据存储问题:外键约束外键特点基础语法表和表之间的关系1对11对多,多对1多对多自关联 今天主要总结一下关于mysql中表和表之间的关系和约束语法 数据存储问题: 数据冗余 引发问题: 增删改异常和数据...
  • MySQL8.0-外键约束

    2021-08-13 13:18:05
    1、创建订单表(ordes) 订单表(orders) orders(id,customerId,saleId,orderDate,notes) orders表数据 订单ID 客户ID 销售员ID 订单日期 ...为customerId字段设置外键约束,参照客户表(customer)
  • 外键约束 -- 创建db2数据库 CREATE DATABASE db2; -- 使用db2数据库 USE db2; /* 外键约束 标准语法: CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主表主键列名) */ -- 建表时添加外键...
  • 建立外键SQL语法 ALTER TABLE yourtablename ADD [CONSTRAINT 外键名] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col_name, ...) [ON DELETE {CASCADE | SET NULL | NO ACTION | RESTR...
  • MySQL外键约束详解

    2019-07-11 15:40:17
    MySQL外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。 外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键的值必须等于另一...
  • 外键指定一个列(或一组列)的值必须符合另一个表的一些行的值。我们说这是维持关联表的参照完整性。...删除时 下拉列表定义采取行动的类型。 No Action:这是默认的动作。参考键值将不会更新或删除。 CASCADE:分

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,999
精华内容 27,599
关键字:

外键约束定义