精华内容
下载资源
问答
  • 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外键

    2010-10-29 21:28:00
    SQl外键 子表,父表的定义: 拥有外键的表是子表。主键被其它表引用的表是父表。换句话说:因为父表的标识被很多个子表中的记录引用,所以叫父表。拥有外键关系,并且可以随便删除数据,不影响其它表的数据的那个表...

    SQl外键

     

    子表,父表的定义: 拥有外键的表是子表。主键被其它表引用的表是父表。换句话说:因为父表的标识被很多个子表中的记录引用,所以叫父表。拥有外键关系,并且可以随便删除数据,不影响其它表的数据的那个表叫子表。

     

    使用的时候谁做为谁的外键,主要从以下两点考虑:

     

    1,删除是如何相互影响的,删除记录受约束的那个是父表,不受约束的那个是子表; 2/,记录必须先存在的是父表; 图3-4 外键关于外键、关系以两种用途:1/, 最常用的一种: 减少重复数据.表A中拥有外键,表B的数据基本是不允许删除的.这时选择对 INSERT 和 UPDATE 强制关系即可.

     

    2,其次,是增加一个从属表. 如果表A删除一条记录时,表B中也随着删除一条相关联的记录,那么外键关系中,表A的主键是表B的外键。这种关系,实际上表B是表A的从属表(即表A是父表),选择对 INSERT 和 UPDATE 强制关系时,如果向表B中插入数据,表A中必须已经存在对应的记录。选择级联删除相关的字段时,删除表A中的一条记录,就会删除对应的表B中的一条记录。

    展开全文
  • sql外键

    2016-11-16 22:54:42
    create table grade(  gid int primary key,  gname VARCHAR(20),  gdesc VARCHAR(20) ); create table student(  sid int primary key,  sname VARCHAR(20),  sex char(2), gid int ...AL
    create table grade(
     gid int primary key,
     gname VARCHAR(20),
     gdesc VARCHAR(20)
    );
    
    
    
    create table student(
     sid int primary key,
     sname VARCHAR(20),
     sex char(2),
      gid int
    );
    
    
    
    ALTER table student add CONSTRAINT fk_student_gid FOREIGN KEY(gid) REFERENCES grade(gid);
    
    
    


    展开全文
  • sql 外键

    2014-02-25 16:20:47
    alter table a(外键表) add constraint id_fk  foreign key (id) references b (id)(主键表)
    alter table a(外键表)
    add constraint id_fk  foreign key (id) references b (id)(主键表)
    展开全文
  • SQL外键

    2012-02-27 20:59:44
    外键用来与某些数据表建立联系,保证数据一致性   create table users ( id int identity not null, names varchar(50) not null, n_id int not null, primary key(n_id), ) create table books ( id ...
  • SQL外键约束

    2020-04-06 22:44:26
    SQL外键约束 SQL使用inner join内连接实现联合查询 SQL数据库关系图
  • SQL外键

    2010-01-06 15:25:00
    创建外键约束CREATE TABLE order_sample(orderid int PRIMARY KEY,cust_id int FOREIGN KEY REFERENCES cuts_sample(cust_id) ON DELETE NO CASCADE)ON DELETE--用于控制尝试删除外键相关联的主表指向行时采取的操作...
  • SQL 外键

    2021-05-11 21:19:38
    备忘 非原创仅备忘记录,用于学习
  • flask sql外键使用Basically, Foreign Key represents relationship between tables. 基本上, 外键代表表之间的关系 。 Syntax: 句法: column-name data_type (size) CONSTRAINT constraint-name ...
  • sql 外键约束实例

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

    2007-05-26 17:34:17
    sql外键约束解释,foreign tag
  • SQL外键引用无效表???

    千次阅读 2020-05-24 12:17:02
    ???SQL外键引用了无效的表
  • sql 外键约束

    2019-08-11 11:50:21
    sql server中建立外键约束有3中方式: 1.Enterprise Manager中,Tables,Design Table,设置Table的properties, 可以建立constraint, reference key; 2.Enterprise Manager中,Diagrams, new Diagrams,建立两个表...
  • 获得SQL外键集合

    2011-10-13 10:08:58
    获得Microsoft SQL server外键集合,方便开发人员查看所有的外键,简化查询
  • sql 外键 添加

    2020-04-13 19:47:18
    https://www.runoob.com/sql/sql-foreignkey.html
  • 003.Sql外键

    2019-02-27 15:31:30
    外键:  多张表, 通过一个字段 使多张表关联起来, 这个字段叫做“外键” 可通过navicat 软件实现外键依赖, 也可通过sql语句添加外键
  • sql外键的建立文档

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

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

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

    2019-09-01 14:50:38
    首先介绍一下什么是外键外键用于与另外一张表的关联,保证数据的完整性。 创建外键的语法是: foreign key(外键名称)references 父表 举个例子: 创建父表: create table my_class(id int primary ...
  • sql 外键(foreignkey)

    2012-10-30 10:41:23
    sql 外键(foreignkey) (1) 外键的使用: 外键的作用,主要有两个:  一个是让数据库自己通过外键来保证数据的完整性和一致性  一个就是能够增加ER图的可读性  有些人认为外键的建立会给开发时操作数据库...
  • sql外键使用说明

    2020-02-02 22:09:33
    sql中外键一般是用到多表查询,便于多个表的数据统一和完整。它是依附于另外一个表的主键,相当于是一个引用,它的值必须在另外表的主键值范围,不能超界,否则会出现异常错误。 它的创建可以是如下两种:(从表...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,521
精华内容 3,808
关键字:

sql外键