精华内容
下载资源
问答
  • 在使用约束前,比如insert前看看调用db.execSQL("PRAGMA foreign_keys = ON;");enable foreign key功能,因为默认是关闭的。 SQLite文档:https://www.sqlite.org/foreignkeys.html

    在使用约束前,比如insert前看看调用db.execSQL("PRAGMA foreign_keys = ON;");enable foreign key功能,因为默认是关闭的。

    SQLite文档:https://www.sqlite.org/foreignkeys.html

    展开全文
  • 原文:SQLServer之修改FOREIGN KEY约束使用SSMS数据库管理工具修改FOREIGN KEY约束 1、连接数据库,选择数据表-》右键点击-》选择设计(或者展开键,选择要修改的外键,右键点击,选择修改,后面修改步骤相同)。 ...
    原文:SQLServer之修改FOREIGN KEY约束

    使用SSMS数据库管理工具修改FOREIGN KEY约束

    1、连接数据库,选择数据表-》右键点击-》选择设计(或者展开键,选择要修改的外键,右键点击,选择修改,后面修改步骤相同)。

    2、在表设计窗口中-》选择要修改的外键列-》右键点击-》选择关系。

    3、在外键关系弹出框中-》选中要修改的外键-》点击修改表和列规范。

    4、在表和列弹出框中-》输入要修改的外建名-》选择要修改的主键基表-》选择要修改的主键基表的数据列-》选择要修改的外键基表-》选择要修改的外键基表数据列-》点击确定。

    5、在外键关系弹出框中-》输入要修改的外键名称-》输入要修改的外键描述-》表设计规则可根据实际情况选择-》点击关闭。

    6、点击保存(或者ctrl+s)-》关闭表设计器-》刷新表-》打开外键查看修改结果。

    使用T-SQL脚本修改FOREIGN KEY约束

    若要使用Transact-SQL修改FOREIGN KEY约束,必须先删除现有的FOREIGN KEY约束,然后再用新定义重新创建该约束。

    语法:

    --声明数据库
    use 数据库名;
    go

    --判断如果存在外键则删除
    if exists(select * from sysobjects where name=约束名)
    alter table 表名 drop constraint 约束名;
    go

    --添加外键约束
    alter table 表名 --外键基表,显示哪个表包含用作所选关系中外键的列。
    [with check | with nocheck] --强制用于复制,指示当复制代理对此表执行插入、更新或删除操作时是否强制约束。
    add constraint 约束名--标识类别,外键名称。
    foreign key(列名) --外键列,显示哪个列用作所选关系的外键。
    references 表名--主/唯一键基表,显示哪个表包含用作所选关系中主键(或唯一键)的列。
    (列名) --主/唯一键列,显示哪个列用作所选关系的主键(或唯一键)。
    --更新规则
    --no action:不执行任何操作,错误消息告知用户不允许进行更新并将回滚 UPDATE。
    --cascade:级联,更新所有包含外键关系所涉及数据的行。 如果该表将包含在使用逻辑记录的合并发布中,则不要指定 CASCADE。
    --set null:设置null,如果表的所有外键列都可接受 Null 值,则将该值设置为 Null。
    --set default:设置默认值,如果表的所有外键列均已定义默认值,则将值设置成为该列定义的默认值。
    on update [no action | cascade | set null | set default]
    --删除规则
    --no action:不执行任何操作,错误消息告知用户不允许进行删除并将回滚 DELETE。
    --cascade:级联,删除所有包含外键关系所涉及数据的行。 如果该表将包含在使用逻辑记录的合并发布中,则不要指定 CASCADE。
    --set null:设置null,如果表的所有外键列都可接受 Null 值,则将该值设置为 Null。
    --set default:设置默认值,如果表的所有外键列均已定义默认值,则将值设置成为该列定义的默认值。
    on delete [no action | cascade | set null | set default]
    go

    --强制外键约束
    --指示如果对关系中列数据的更改会使外键关系的完整性失效,是否允许进行这样的更改。 如果不允许这样的更改,则选择 “是” ;如果允许这样的更改,则选择 “否” 。
    alter table 表名 [nocheck | check] constraint 约束名;
    go

    --添加外键约束描述
    execute sp_addextendedproperty N'MS_Description',N'约束描述',N'schema',N'dbo',N'table',N'表名',N'constraint',N'约束名';
    go

    示例:

    --声明数据库
    use testss;
    go

    --判断如果存在外键则删除
    if exists(select * from sysobjects where name='foreign1')
    alter table test1 drop constraint foreign1;
    go

    --添加外键约束
    alter table test1 --外键基表,显示哪个表包含用作所选关系中外键的列。
    with check --强制用于复制,指示当复制代理对此表执行插入、更新或删除操作时是否强制约束。
    add constraint foreign1 --标识类别,外键名称。
    foreign key(classid) --外键列,显示哪个列用作所选关系的外键。
    references test2 --主/唯一键基表,显示哪个表包含用作所选关系中主键(或唯一键)的列。
    (id) --主/唯一键列,显示哪个列用作所选关系的主键(或唯一键)。
    --更新规则
    --no action:不执行任何操作,错误消息告知用户不允许进行更新并将回滚 UPDATE。
    --cascade:级联,更新所有包含外键关系所涉及数据的行。 如果该表将包含在使用逻辑记录的合并发布中,则不要指定 CASCADE。
    --set null:设置null,如果表的所有外键列都可接受 Null 值,则将该值设置为 Null。
    --set default:设置默认值,如果表的所有外键列均已定义默认值,则将值设置成为该列定义的默认值。
    on update cascade
    --删除规则
    --no action:不执行任何操作,错误消息告知用户不允许进行删除并将回滚 DELETE。
    --cascade:级联,删除所有包含外键关系所涉及数据的行。 如果该表将包含在使用逻辑记录的合并发布中,则不要指定 CASCADE。
    --set null:设置null,如果表的所有外键列都可接受 Null 值,则将该值设置为 Null。
    --set default:设置默认值,如果表的所有外键列均已定义默认值,则将值设置成为该列定义的默认值。
    on delete cascade
    go

    --强制外键约束
    --指示如果对关系中列数据的更改会使外键关系的完整性失效,是否允许进行这样的更改。 如果不允许这样的更改,则选择 “是” ;如果允许这样的更改,则选择 “否” 。
    alter table test1 nocheck constraint foreign1;
    go

    --添加外键约束描述
    execute sp_addextendedproperty N'MS_Description',N'修改外键约束',N'schema',N'dbo',N'table',N'test1',N'constraint',N'foreign1';
    go

    修改FOREIGN KEY优缺点

    优点:

    1、保证数据的完整性。

    2.、关联查询时,可以用到FK 的统计信息。

    3、合理使用外键,可以增加查询效率。

    缺点:

    1、删队或更新关联数据时需要做检查,效率会很低。

    2、数据量很大,并发量很大,会影响性能。

    3、外键虽然保证完整性,但是对于主表删除这种操作,都级联扫描一遍所有的子表取删除,数据越大越慢,锁粒度也会大。

    4、导入导出,其它高可用等手工调数据时非常麻烦给。

    posted on 2018-09-10 16:30 NET未来之路 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/9620654.html

    展开全文
  • 2、如果 FOREIGN KEY 约束的列输入非 NULL 值,则此值必须被引用列存在;否则,将返回违反外键约束的错误信息。若要确保验证了组合外键约束的所有值,请对所有参与列指定 NOT NULL。3、FOREIGN KEY 约束仅能...

    FOREIGN KEY约束添加规则

    1、外键约束并不仅仅可以与另一表的主键约束相链接,它还可以定义为引用另一个表中 UNIQUE 约束的列。

    2、如果在 FOREIGN KEY 约束的列中输入非 NULL 值,则此值必须在被引用列中存在;否则,将返回违反外键约束的错误信息。 若要确保验证了组合外键约束的所有值,请对所有参与列指定 NOT NULL。

    3、FOREIGN KEY 约束仅能引用位于同一服务器上的同一数据库中的表。 跨数据库的引用完整性必须通过触发器实现。

    4、FOREIGN KEY 约束可引用同一表中的其他列。 此行为称为自引用。

    5、在列级指定的 FOREIGN KEY 约束只能列出一个引用列。 此列的数据类型必须与定义约束的列的数据类型相同。

    6、在表级指定的 FOREIGN KEY 约束所具有的引用列数目必须与约束列列表中的列数相同。 每个引用列的数据类型也必须与列表中相应列的数据类型相同。

    7、对于表可包含的引用其他表的 FOREIGN KEY 约束的数目或其他表所拥有的引用特定表的 FOREIGN KEY 约束的数目, 数据库引擎 都没有预定义的限制。 尽管如此,可使用的 FOREIGN KEY 约束的实际数目还是受硬件配置以及数据库和应用程序设计的限制。 表最多可以将 253 个其他表和列作为外键引用(传出引用)。 SQL Server 2016 (13.x) 将可在单独的表中引用的其他表和列(传入引用)的数量限制从 253 提高至 10,000。 (兼容性级别至少必须为 130。)数量限制的提高带来了下列约束:

    DELETE 和 UPDATE DML 操作支持大于 253 个外键引用。 不支持 MERGE 操作。

    对自身进行外键引用的表仍只能进行 253 个外键引用。

    列存储索引、内存优化表和 Stretch Database 暂不支持进行超过 253 个外键引用。

    8、对于临时表不强制 FOREIGN KEY 约束。

    9、如果在 CLR 用户定义类型的列上定义外键,则该类型的实现必须支持二进制排序。

    10、仅当 FOREIGN KEY 约束引用的主键也定义为类型 varchar(max) 时,才能在此约束中使用类型为varchar(max) 的列。

    使用SSMS数据库管理工具添加外键约束

    本示例演示当表结构已存在时添加外键约束,创建表时添加外键约束步骤和表结构存在时添加外键步骤相同。示例演示如下:

    1、连接数据库,打开要添加外键的数据表-》右键点击-》选择设计。

    5b7f859368ddffa70d90f93b24480d1c.png

    2、在表设计窗口-》选择要添加外键的数据行-》右键点击-》选择关系。

    ea94b0973f214cc61f357bacd6d93772.png

    3、在外键关系窗口中-》点击添加。

    3c06cb7f72b1e84e06eb298b628a89a0.png

    4、添加完毕后-》首先修改表和列规范。

    1a9ec52490f81afc286a1604deb276b9.png

    5、在表和列窗口中-》输入外键名-》在左边选择主表和关联的列-》在右边选择从表和作为外键的列-》点击确定。

    2b3e38733f74b0751d72198e9cccb712.png

    6、在外键关系窗口中-》可选择添加或者不添加外键描述-》可选择添加或者不添加修改或者删除数据时级联操作-》可选择添加或者不添加强制外键约束-》可选择添加或者不添加强制用于复制-》点击关闭。

    906c8781fb3f0eef1fdcce4dfd2fed67.png

    7、点击保存按钮(ctrl+s)-》此时表会弹出警告窗口,点击是-》刷新查看外键是否添加成功。

    00f68c67656e09dbc346abd8fa1abe77.png

    1995d2394602a4c65b613193ec56a436.png

    使用T-SQL脚本添加外键约束

    当表结构已存在时

    如果要添加约束的表已存在外键约束,需要先删除外键约束再添加外键约束。如果不存在外键约束可以添加外键约束。

    语法:

    if exists(select * from sysobjects where name=约束名)

    alter table 数据库名.[dbo].表名 drop constraint 约束名;

    alter table 数据库名.[dbo].表名 with check add constraint 约束名 foreign key(列名)

    references 数据库名.[dbo].表名(列名)

    on delete cascade

    on update cascade;

    go

    示例:

    if exists(select * from sysobjects where name='t1_t2')

    alter table [testss].[dbo].[test1] drop constraint t1_t2;

    alter table [testss].[dbo].[test1] with check add constraint t1_t2 foreign key(classid)

    references [testss].[dbo].[test2](id)

    on delete cascade

    on update cascade;

    go

    4fc6f2c083b42926b2b41cfce196081d.png

    在新表中创建外键

    示例:

    if exists( select * from sysobjects where name=表名 and type ='U')

    drop table 表名;

    go

    --当表结构不存在时

    --建表语法声明

    create table 表名

    (

    --字段声明

    列名 int identity(1,1) not null,

    列名 int,

    primary key clustered(id asc) with(ignore_dup_key=off) on [primary], --主键索引声明

    constraint 外键名 foreign key(列名)

    references 主表名(列名)

    on update cascade--是否级联操作

    on delete cascade

    )on [primary]

    --字段注释声明

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列说明' , @level0type=N'SCHEMA',

    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列说明' , @level0type=N'SCHEMA',

    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

    go

    示例:

    if exists( select * from sysobjects where name='test1'and type ='U')

    drop table test1;

    go

    --当表结构不存在时

    --建表语法声明

    create table test1

    (

    --字段声明

    id int identity(1,1) not null,

    name nvarchar(50) null,

    sex nvarchar(50) null,

    age nvarchar(50) null,

    classid int,

    primary key clustered(id asc) with(ignore_dup_key=off) on [primary], --主键索引声明

    constraint t3_t4 foreign key(classid)

    references test2 (id)

    on update cascade

    on delete cascade

    )on [primary]

    --字段注释声明

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'id主键' , @level0type=N'SCHEMA',

    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'id';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'姓名' , @level0type=N'SCHEMA',

    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'name';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'性别' , @level0type=N'SCHEMA',

    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'sex';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'年龄' , @level0type=N'SCHEMA',

    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'age';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'班级id' , @level0type=N'SCHEMA',

    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'classid';

    go

    a87a16ac0510e1bd3853797ea39da77b.png

    FOREIGN KEY约束优缺点

    优点:

    1、保证数据的一致性,完整性,更可靠。

    2、关联查询时,可以用到FK 的统计信息。

    3、有主外键的数据库设计可以增加ER图的可读性。

    缺点:

    1、删队或更新关联数据时需要做检查,效率会很低。

    2、手工调数据时,会存在主从表校验,会比较麻烦。

    3、批量导入数据时,会存在外键校验,需要先关闭外键约束,导入完成再打开外键约束,操作比较麻烦。

    展开全文
  • flask sql外键使用Basically, Foreign Key represents relationship between tables. 基本上, 外键代表表之间的关系 。 Syntax: 句法: column-name data_type (size) CONSTRAINT constraint-name ...

    flask sql外键使用

    Basically, Foreign Key represents relationship between tables.

    基本上, 外键代表表之间的关系

    Syntax:

    句法:

        column-name data_type (size) CONSTRAINT constraint-name  
        References  Table-name (Column-name)
    
    

    Example:

    例:

    Table 1:

    表格1:

    Foreign-table-1

    Table 2:

    表2:

    Foreign-table-2

    First create a primary key in first table which is also called unique key.

    首先在第一个表中创建一个主键,也称为唯一键。

    Like this:

    像这样:

    create table student 
    (enroll number(6) primary key, s_name varchar(25), address varchar2(20), 
    contact number(10) );
    
    

    Second create foreign key by using second table.

    第二个通过使用第二个表创建外键。

    Like this:

    像这样:

    create table student_fees
    (enroll number(6) constraint en_fk References Student (enroll) , course_fee number(8), 
    status varchar2(6), amount number(10) );
    
    

    Query to find student name, address, contact from the database.

    查询以从数据库中找到学生的姓名,地址和联系方式。

    Foreign result

    Conclusion:

    结论:

    In this article, we have learnt how to use foreign key and how it works and useful for us to retrieve data from the relational database? I hope you understand the concept; if you have any query, feel free to ask in the comment section.

    在本文中,我们学习了如何使用外键以及它如何工作以及对我们从关系数据库中检索数据有用吗? 希望您理解这个概念; 如果您有任何疑问,请随时在评论部分提问。

    翻译自: https://www.includehelp.com/sql/how-to-use-foreign-key-in-sql.aspx

    flask sql外键使用

    展开全文
  • MySQL使用ForeignKeys创建表并给出errno:150我试图用两个外键MySQL创建一个表,这两个外键引用了另外两个表的主键,但是我得到了一个errno:150错误,它不会创建这个表。以下是所有3个表的SQL:...
  • MySQL使用ForeignKeys创建表并给出errno:150我试图用两个外键MySQL创建一个表,这两个外键引用了另外两个表的主键,但是我得到了一个errno:150错误,它不会创建这个表。以下是所有3个表的SQL:...
  • Innodb foreign keysql standards的区别: sel statement 的inserts,deletes,updates 很多行的时候,fk 会一行一行检查。 innodb是设置 shared row_level locks 父表或者子表上,MySQL CHECK 会立即检查...
  • Key约束、Foreign Key约束、Unique约束、Default约束和Check约束,今天使用SQL Server2008来演示下这几种约束的创建和使用的方法。 1、Primary Key约束  常有一列或多列的组合,其值能唯一标识表...
  • SQLServer有五种约束,Primary Key约束、Foreign Key约束、Unique约束、Default约束和Check约束,今天使用SQL Server2008来演示下这几种约束的创建和使用的方法。1、Primary Key约束 常有一列或多列的组合...
  • 错误如下: ...解决方法是Mysql取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sql语句,重新创建此表后,再把数据使用sql导入, 然后再设置外键约束: SET FOREIGN_KEY_CHE...
  • 上篇文章主要介绍了SQL语句的关键字用法,这篇文章,将进行创建表时的约束关键字的用法! 学习内容: 学习时间: 2021.3.17 学习产出: 写前面: 对数据库字段的约束可以创建表的时候进行约束,也可以...
  • sel statement 的inserts,... innodb是设置 shared row_level locks 父表Innodb foreign keysql standards的区别: sel statement 的inserts,deletes,updates 很多行的时候,fk 会一行一行检查。 inn...
  • 需要实现级联删除的情况下,使用FOREIGN KEY的ON DELETE CASCADE选项非常方便,但同一张表,如果有两个外键引用外表数据,那么最多只能将一个外键设为ON DELETE CASCADE,其他的引用约束需要使用触发器实现...
  • 判断数据库对象是否存在 if object_id(N'对象名',N'对象类型') is not null 执行语句 可选对象类型: ...F = FOREIGN KEY 约束 FN = SQL 标量函数 FS = 程序集 (CLR) 标量函数 FT = 程序集 (CLR) ...
  • 转载自这里 ...ps:如果想 MySQL 資料庫中使用外鍵限制,必需讓資料表使用 InnoDB 儲存引擎。讓我們簡單了解一下什麼是外鍵: 這是一個客戶資料表 customers 而這是客戶訂單的資料表 orders
  • 是的,您可以始终保留外键约束,但随后您将对数据的完整性负责.如果使用外键约束,则不必担心表之间的引用完整性....您可以选择不这些表之间定义任何关系,这对任何SQL解决方案都适用.当用户开始购物时,您可以...
  • 1. 数据库设计的过程往往会想让2张表进行关联而使用Foreign从而加强2张表之间的约束(如图) 以前有个问题一直没弄明白,那就是外键列的值的情况,正常情况下表的列的值可以是null或者满足该列所...
  • django外键使用 一对一因为django处于安全和方便将数据库的表封装成模型,所以很多sql原生的功能无法使用, 比如 left join,但是我们可以使用外键(foreignkey)来满足表表直接的关系。设置模型# models.py ...
  • 解决方法是Mysql取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sql语句,重新创建此表后,再把数据使用sql导入, 然后再设置外键约束: SET FOREIGN_KEY_CHECKS=1; 转自:...
  • 一直关注软件设计方面,数据库方面就忽略了很多,最近设计数据库时遇到了一些小麻烦,主要是数据库约束和性能调优方面的应用,以前学习 Sql Server 2000,还有后来的 Sql Server 2005 数据库时进行了总结,...
  • Mysql如果表和表之间建立... 然后将原来表的数据导出到sql语句,重新创建此表后,再把数据使用sql导入,然后再设置外键约束: SET FOREIGN_KEY_CHECKS=1; 查看当前FOREIGN_KEY_CHECKS的值可用如下命令SELECT @@FOR...
  • 因为django处于安全和方便将数据库的表封装成模型,所以很多sql原生的功能无法使用, 比如 left join,但是我们可以使用外键(foreignkey)来满足表表直接的关系。 设置模型 # models.py 添加 # Person ...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 272
精华内容 108
关键字:

key在sql中使用foreign