精华内容
下载资源
问答
  • sql 外键
    2020-04-13 19:47:18

    https://www.runoob.com/sql/sql-foreignkey.html

    (学习用,侵删)

    更多相关内容
  • 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外键

    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 replication in foreign keys.

    在本文中,我们回顾了创建SQL外键,更新和删除规则,启用外键约束,禁用外键约束以及不用于外键复制的不同方法。

    什么是外键? (What is a foreign key?)

    A Foreign key is constraint that enforces referential integrity in SQL server database. It uses a column or combination of columns that is used establish link between the data in two tables to control the data that can be stored in the foreign key table.

    外键是在SQL Server数据库中强制引用完整性的约束。 它使用一列或多列组合,用于在两个表中的数据之间建立链接,以控制可存储在外键表中的数据。

    创建外键约束 (Creating a Foreign key constraint)

    To create a SQL foreign key constraint, the parent table should have primary key column or column with UNIQUE constraint.

    要创建SQL外键约束,父表应具有主键列或具有UNIQUE约束的列。

    In this case, table Dept is parent table which has Primary key and will be referenced in child tables having foreign key.

    在这种情况下,表Dept是具有主键的父表,将在具有外键的子表中被引用。

    CREATE TABLE Dept (
      DeptID INT CONSTRAINT PK_Dept PRIMARY KEY
      ,DeptName VARCHAR(10)
      )
    

    创建表时创建外键 (Create a foreign key while creating a table)

    Below is the example of a T-SQL script to create a SQL foreign key while creating the table without defining the constraint name. If we do not specify the name of constraint, SQL server creates foreign key constraint with random name.

    以下是在不定义约束名称的情况下创建表时创建SQL外键的T-SQL脚本示例。 如果未指定约束的名称,则SQL Server将使用随机名称创建外键约束。

    CREATE TABLE Emp (
      EmpID INT
      ,EmpFname VARCHAR(50)
      ,EmpLname VARCHAR(50)
      ,DeptID INT  FOREIGN KEY REFERENCES  Dept(DeptID)
      ,IsActive BIT
      )
    

    Below is the example of a T-SQL script to create a foreign key while creating the table with specific constraint name.

    以下是在创建具有特定约束名称的表时创建外键的T-SQL脚本示例。

    CREATE TABLE Emp (
      EmpID INT
      ,EmpFname VARCHAR(50)
      ,EmpLname VARCHAR(50)
      ,DeptID INT CONSTRAINT FK_Emp FOREIGN KEY REFERENCES  Dept(DeptID)
      ,IsActive BIT
      )
    

    创建表后创建外键 (Create a foreign key after creating a table)

    Let us create the child table first and create a SQL foreign key constraint later. Below is example of creating foreign key constraint after creating table by specifying the constraint name.

    让我们先创建子表,然后再创建SQL外键约束。 下面是通过指定约束名称在创建表之后创建外键约束的示例。

    CREATE TABLE Emp (
      EmpID INT
      ,EmpFname VARCHAR(50)
      ,EmpLname VARCHAR(50)
      ,DeptID INT 
      ,IsActive BIT
      )  
     
    ALTER TABLE [dbo].[Emp]  WITH CHECK ADD  CONSTRAINT [FK_Emp] FOREIGN KEY([DeptID])
    REFERENCES [dbo].[Dept] ([DeptID])
    GO
     
    ALTER TABLE [dbo].[Emp] CHECK CONSTRAINT [FK_Emp]
    GO
    

    Below is example of creating foreign key after creating table without specifying the constraint name.

    以下是在不指定约束名称的情况下创建表后创建外键的示例。

    ALTER TABLE [dbo].[Emp]  WITH CHECK ADD  FOREIGN KEY([DeptID])
    REFERENCES [dbo].[Dept] ([DeptID])
    GO
     
    ALTER TABLE [dbo].[Emp] CHECK CONSTRAINT [FK_Emp]
    GO
    

    创建外键而不检查现有数据 (Create a foreign key without checking for an existing data)

    In a few cases, the referencing table may already exist and have data which violates the SQL foreign key constraint you are going to create.

    在某些情况下,引用表可能已经存在并且包含违反您要创建SQL外键约束的数据。

    If we create a constraint with a check it will throw the below error as the data which already exist is violating the rule.

    如果我们通过检查创建约束,则将抛出以下错误,因为已经存在的数据违反了规则。

    create foreign key error

    If you still want to create a foreign key constraint by ignoring the existing data and validate the rule for further changes use “WITH NOCHECK”. The constraint you created is marked as not trusted.

    如果您仍然想通过忽略现有数据来创建外键约束并验证规则以进行进一步更改,请使用“ WITH NOCHECK”。 您创建的约束被标记为不可信。

    ALTER TABLE [dbo].[Emp]  WITH NOCHECK ADD  CONSTRAINT [FK_Emp] FOREIGN KEY([DeptID])
    REFERENCES [dbo].[Dept] ([DeptID])
    GO
     
    ALTER TABLE [dbo].[Emp] CHECK CONSTRAINT [FK_Emp]
    GO
    

    使用DELETE / UPDATE规则创建外键 (Create a foreign key with DELETE/UPDATE rules)

    We can create a SQL foreign key constraint by specifying the what action to happen on referencing table when delete and update happens on primary key in parent table. Let us see some scenarios.

    我们可以通过指定在父表中的主键上进行删除和更新时对引用表执行什么操作来创建SQL外键约束。 让我们看看一些情况。

    We can see the data exist in both parent and child table.

    我们可以看到数据存在于父表和子表中。

    Data check

    Let us create a foreign key with delete cascade and delete the primary key value in parent table.

    让我们创建一个带有删除级联的外键,并删除父表中的主键值。

    ALTER TABLE [dbo].[Emp]  WITH CHECK ADD  CONSTRAINT [FK_Emp2] FOREIGN KEY([DeptID])
    REFERENCES [dbo].[Dept] ([DeptID]) ON DELETE CASCADE
    GO
     
    ALTER TABLE [dbo].[Emp] CHECK CONSTRAINT [FK_Emp2]
    GO
     
     
    delete from Dept where DeptID =1
    

    After executing the above statement, we can see the that data is deleted in the child table as well.

    执行完上面的语句后,我们可以看到子表中的数据也被删除了。

    Delete Cascade

    Let us create a foreign key with update cascade and update the primary key in the parent table.

    让我们用更新级联创建一个外键并更新父表中的主键。

    Data check
    ALTER TABLE [dbo].[Emp]  WITH CHECK ADD  CONSTRAINT [FK_Emp3] FOREIGN KEY([DeptID])
    REFERENCES [dbo].[Dept] ([DeptID])
    ON UPDATE CASCADE
    GO
     
    ALTER TABLE [dbo].[Emp] CHECK CONSTRAINT [FK_Emp3]
    GO
     
    update Dept set DeptID =3 where DeptID=2
    

    After executing the above statement, we can see DeptID is updated to 3 for records having DeptID 2 in the child table as well.

    执行完上面的语句后,我们可以看到子表中DeptID为2的记录的DeptID也更新为3。

    Update cascade

    Similarly, we have the following actions.

    同样,我们有以下操作。

    • SET NULL – Sets the SQL foreign key column value to null when the primary key value is either deleted or updated to a new value. If the column does not allow null values, the update/delete on primary key column fails and throw error

      SET NULL –当主键值被删除或更新为新值时,将SQL外键列值设置为null。 如果该列不允许使用空值,则主键列上的更新/删除失败并抛出错误





    • SQL foreign key - Validation error

    • NO ACTION – If the update or delete on primary key column fails the constraint rule then the change is rolled back

      无操作–如果对主键列的更新或删除未通过约束规则,则将回滚更改

    To modify the existing foreign key using T-SQL we must drop the foreign key constraint first and then re create it with new changes.

    要使用T-SQL修改现有外键,我们必须先删除外键约束,然后使用新的更改重新创建它。

    禁用和启用外键约束 (Disabling and enabling the foreign key constraint)

    禁用约束 (Disable constraint)

    To disable a SQL foreign key constraint, we need to use below statement. Replace the table name and constraint name. When the foreign key constraint is disabled the constraint is marked as not trusted.

    要禁用SQL外键约束,我们需要使用以下语句。 替换表名称和约束名称。 禁用外键约束后,该约束将标记为不可信。

    ALTER TABLE [Emp] NOCHECK CONSTRAINT [FK_Emp2]
    

    启用约束 (Enable constraint)

    To enable the constraint back use below statement.

    要启用约束,请使用下面的语句。

    ALTER TABLE [Emp] CHECK CONSTRAINT [FK_Emp2]
    

    通过检查现有数据启用约束 (Enable constraint with checking existing data)

    To force foreign key to check existing data while enabling the constraint use below statement. In this case if validation is success and constraint is enabled then the constraint is marked back to trusted.

    要在启用约束的同时强制外键检查现有数据,请使用以下语句。 在这种情况下,如果验证成功并且启用了约束,则将该约束标记回可信状态。

    ALTER TABLE [Emp] 
     WITH CHECK CHECK CONSTRAINT [FK_Emp2]
     GO
    

    不用于复制 (Not for replication)

    When a foreign key is set “NOT FOR REPELCIATION”, the validation is done only when user inserts, deletes or updates data.

    当外键设置为“ NOT FOR REPELCIATION”时,仅当用户插入,删除或更新数据时才进行验证。

    The validation is not fired when the replication agents sync the changes made by user to other end (i.e. subscriber in case of transactional and both subscriber and publisher in case of merge replication).

    当复制代理将用户所做的更改同步到另一端时(即,在事务复制的情况下为订户,在合并复制的情况下为订户和发布者都将其同步),则不会触发验证。

    To create a SQL foreign key with “NOT FOR REPELCIATION”, use below script. By default, the constraint is marked as not trusted.

    要使用“ NOT FOR REPELCIATION”创建一个SQL外键,请使用以下脚本。 默认情况下,该约束被标记为不可信。

    ALTER TABLE [dbo].[Emp]  WITH CHECK ADD  CONSTRAINT [FK_Emp2]  FOREIGN KEY([DeptID])
    REFERENCES [dbo].[Dept] ([DeptID]) 
    NOT FOR REPLICATION 
    GO
    

    Even though we create the foreign key with “FOR REPLICATION” on the publisher, the snapshot agent scripts it as “NOT FOR REPLICATION” and foreign key is created as not for replication in subscriber when the snapshot is applied.

    即使我们在发布服务器上使用“ FOR REPLICATION”创建外键,快照代理也会将其脚本化为“ NOT FOR REPLICATION”,并且在应用快照时,外键的创建不会在订户中进行复制。

    索引外键列 (Indexing foreign keys columns)

    When a table is being referenced by a SQL foreign key, modifications on the primary key column in primary table will check the data in the child table. If the child table has a lot of data, it may slow down your change on the primary table. We may even encounter deadlocks in such cases.

    当使用SQL外键引用表时,对主表中主键列的修改将检查子表中的数据。 如果子表中有大量数据,则可能会减慢主表上的更改。 在这种情况下,我们甚至可能会遇到僵局。

    Creating an index on a foreign key column helps in such cases.

    在这种情况下,在外键列上创建索引会有所帮助。

    翻译自: https://www.sqlshack.com/sql-foreign-key/

    sql外键

    展开全文
  • sql外键约束

    2022-01-13 11:50:56
    sql外键约束对于已经存在的字段添加外键约束在创建数据表时设置外键约束删除外键约束 外键约束:对外键字段的值进行更新和插入时会和引用表中字段的数据进行验证,数据如果不合法则更新和插入会失败,保证数据的有效...


    外键约束:对外键字段的值进行更新和插入时会和引用表中字段的数据进行验证,数据如果不合法则更新和插入会失败,保证数据的有效性

    对于已经存在的字段添加外键约束

    -- 为cls_id字段添加外键约束
    alter table students add foreign key(cls_id) references classes(id);
    

    在创建数据表时设置外键约束

    -- 创建学校表
    create table school(
        id int not null primary key auto_increment, 
        name varchar(10)
    );
    
    -- 创建老师表
    create table teacher(
        id int not null primary key auto_increment, 
        name varchar(10), 
        s_id int not null, 
        foreign key(s_id) references school(id)
    );
    

    删除外键约束

    -- 需要先获取外键约束名称,该名称系统会自动生成,可以通过查看表创建语句来获取名称
    show create table teacher;
    
    -- 获取名称之后就可以根据名称来删除外键约束
    alter table teacher drop foreign key 外键名;
    
    展开全文
  • sql 外键约束

    2021-07-14 23:48:28
    创建有外键约束的数据库表 首先创建父表 这里用的学生信心录入为例子 -- 创建父表:班级表 create table t_class( cno int (4) primary key auto_increment, cname varchar(10) not null, room char(4) ) 再...

    创建有外键约束的数据库表

    首先创建父表
    这里用的学生信心录入为例子

    -- 创建父表:班级表
    create table t_class(
    	cno int (4) primary key auto_increment,
    	cname varchar(10) not null,
    	room char(4)
    
    )
    

    再创建子表

    create table t_student(
            sno int(6) primary key auto_increment, 
            sname varchar(5) not null, 
            classno int(4),
    );
    

    为了建立两表之间的关系 子表需要添加外键约束

    alter table t_student add constraint fk_stu_classno foreign key (classno) references t_class (cno)
    

    我们先添加一下两个表一些内容
    添加父表内容

    -- 添加班级信息
    insert into t_class VALUES(null,'计科02','r201'),(null,'大数据01','r202'),(null,'自然语言处理03','r203');
    

    添加子表内容

    -- 添加学生信息
    insert into t_student values (null,'张三',1),(null,'李四',1),(null,'王五',2),(null,'朱六',3);
    

    现在父类的班级删改的话,可能会出错。因为子表有些学生信息绑定着这个班级,删除无法直接执行。需要在外键约束上再添加一些附加条件
    第一种:
    用cascade级联约束:父表的改动同时影响子表关联内容
    先删除外键约束在重新添加:

    -- 先删除之前的外键约束:
    alter table t_student drop foreign key fk_stu_classno;
    -- 重新添加外键约束:
    alter table t_student add constraint fk_stu_classno foreign key (classno) references t_class (cno) on update cascade on delete cascade;
    

    这种方法的使用需要谨慎,因为一但你有什么误操作,连带很多子表列也将被删除
    第二种
    set null 置空操作
    这种操作下,父类删除不会连带子类列删除 只置空关联内容。
    同样先删重写

    -- 先删除之前的外键约束:
    alter table t_student drop foreign key fk_stu_classno;
    -- 重新添加外键约束:
    alter table t_student add constraint fk_stu_classno foreign key (classno) references t_class (cno) on update set null on delete set null;
    

    第三种:
    前两种方法可以混着使用
    修改时级联,删除时置空

    展开全文
  • SQL外键约束

    千次阅读 2020-07-25 14:47:23
    SQL外键约束外键约束添加外键约束删除外键约束 外键约束 一个表中的 FOREIGN KEY(外键) 指向另一个表中的 PRIMARY KEY(主键) FOREIGN KEY 约束用于预防破坏表之间连接的动作 FOREIGN KEY 约束也能防止非法数据...
  • 数据库SQL外键设置

    千次阅读 2021-01-31 18:03:40
    创建约束 alter table user_relation add CONSTRAINT `fk_deleteUser` FOREIGN KEY (`account`) REFERENCES `sys_user` (`... 表名 外键名 表字段 外键关联表 外键关联字段 删除时 级联模式 更新时 不做任何操作
  • sql外键使用说明

    千次阅读 2020-02-02 22:09:33
    sql中外键一般是用到多表查询,便于多个表的数据统一和完整。它是依附于另外一个表的主键,相当于是一个引用,它的值必须在另外表的主键值范围,不能超界,否则会出现异常错误。 它的创建可以是如下两种:(从表...
  • SQL脚本将生成一个脚本,以删除并创建数据库中的所有外键
  • SQL 外键条件说明

    千次阅读 2019-09-01 14:50:38
    首先介绍一下什么是外键外键用于与另外一张表的关联,保证数据的完整性。 创建外键的语法是: foreign key(外键名称)references 父表 举个例子: 创建父表: create table my_class(id int primary ...
  • sql外键约束,多表查询,级联删除,子查询
  • –删除外键 语法:alter table 表名 drop constraint 外键约束名 如: alter table Stu_PkFk_Sc drop constraint FK_s alter table Stu_PkFk_SC drop constraint FK_c –添加外键 语法:alter table 表名 add ...
  • SQL外键

    2020-12-29 18:05:28
    在本教程中,将学习SQL外键以及如何创建FOREIGN KEY约束以强制表之间的关系。1. SQL外键约束简介外键是一列或一组列,用于强制两个表中的数据之间的链接。 在外键引用中,第一个表的主键列(或多个列)由第二个表的列...
  • sql_外键

    2021-05-20 10:25:47
    一、外键的定义 1. 外键是一种索引,是通过一张表中的一列指向另一张表的主键,使得这两张表产生关联 2. 是某个表中的一列,它包含在另一个表的主键中 3. 一张表中可以有一个外键也可以有多个外键 二、外键的...
  • sql 外键约束实例

    千次阅读 2019-07-11 09:48:45
    sql外键约束实例结论在oracle 中的测试在MySQL中的测试 结论 当一个表A的列a为另一个表B的列b的外键时 如果A的列a中删除的值在B的b列中存在,执行被禁止 如果B的列b中插入的值在A中的a列中没有,执行被禁止 在...
  • 数据sql设置外键约束

    2022-03-21 17:34:04
    外键的取值要么取父表中字段对应的值,要么取NULL值 严重受限于父表 父表:被引用的字段要具有唯一性(绝大多数都是用的父表的主键) 理论上是可以一张表里的一个字段引用另一个字段,但一般都是用两张表 外键...
  • 获得SQL外键集合

    2011-10-13 10:08:58
    获得Microsoft SQL server外键集合,方便开发人员查看所有的外键,简化查询
  • 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. ...
  • sql外键的建立文档

    2013-05-27 11:15:34
    针对于初学者sqlserver外键的建立,详细的介绍了建立外键的几种方法。
  • sql外键

    2013-07-02 17:50:12
    (1) 外键的使用:  外键的作用,主要有两个:   一个是让数据库自己通过外键来保证数据的完整性和一致性  一个就是能够增加ER图的可读性   有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为...
  • SQL Server外键约束

    2022-04-28 15:22:16
    SQL Server外键约束 SQL Server外键约束简介 外键是一个表中的一列或一组列,它唯一地标识另一个表的行。 vendor_groups 和v endor 表,它们的结构如下: 每个供应商属于供应商组,每个供应商组可能有零个或...
  • sql设置外键(设置外键sql语句)

    千次阅读 2021-02-01 02:46:07
    sql设置外键(设置外键sql语句)2020-07-24 11:44:03共8个回答sql怎么设置外键创建数据库时就是有主键的创建了主键,但是表之间的关系没有联系,要建数据库关系图只有主键没有外键时不行的。建外键的前提是此外键...
  • SQL外键创建条件

    2020-04-10 17:58:14
    创建外键约束失败 创建外键约束时提示:在被引用表中没有与外键 ‘FK_ID’ 中的引用列列表匹配的主键或候选键。无法创建约束。 1.要引用作为外键的列必须是被引用表的主键,非主键的字段不能被引用做为外键。 2.被...
  • SQL外键定义与测试

    2014-04-17 09:27:36
    外键 (Foreign Key)如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的...
  • SQL添加外键

    2021-10-07 20:58:12
    [CONSTRAINT] [外键名] FOREIGN KEY (外键的列名) REFERENCES 主表名(列名) ); []中括号内容可以省略。 创建表结束后添加外键 ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (外键字段) REFERENCES 主表名称...
  • 003.Sql外键

    2019-02-27 15:31:30
    外键:  多张表, 通过一个字段 使多张表关联起来, 这个字段叫做“外键” 可通过navicat 软件实现外键依赖, 也可通过sql语句添加外键
  • sql组合键设置外键_学习SQL外键

    千次阅读 2020-07-17 22:09:28
    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 ...
  • SQL--外键约束

    2021-10-28 11:32:42
    外键约束 标志:FOREIGN KEY t_student Sno 主键 (父亲表) t_department Sno 外键 (孩子表) ALTER TABLE [dbo].[t_department] WITH CHECK ADD CONSTRAINT [FK_t_SD_Sno] FOREIGN KEY([Sno]) REFERENCES [dbo]....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 193,591
精华内容 77,436
关键字:

sql 外键

友情链接: 拟合曲线.rar