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

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

    外键约束

    • 一个表中的 FOREIGN KEY(外键) 指向另一个表中的 PRIMARY KEY(主键)
    • FOREIGN KEY 约束用于预防破坏表之间连接的动作
    • FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一

    通过两个表举例外键:
    student表
    在这里插入图片描述
    class表
    在这里插入图片描述

    • student表里的cid作为外键指向class表里的id
    • student表里的cidstudent表里的外键
    • class表里的idclass表里的主键

    注意:

    • 给表studentcid赋值时这个值必须存在于表classid里,例如id的值有1和2,如果赋值给cid的值是3,那么就会报错
    • 如果删除id字段或修改id字段的值时,先判断cid里的值是否存在此id字段的值,如果存在则会报错

    添加外键约束

    • 创建表时添加外键约束

      [CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…] REFERENCES <主表名> 主键列1 [,主键列2,…]

    • 代码示例
      CREATE TABLE student(
      		id int(10) PRIMARY key,
      		NAME	varchar(10),
      		cid int(10),
      		CONSTRAINT fk_cid FOREIGN KEY (cid) REFERENCES class(id)
      );
      
    • 给已存在表的字段添加外键约束

      ALTER TABLE 表名 ADD CONSTRAINT (外键名字) FOREIGN KEY (外键字段名) REFERENCES 外表表名(主键字段名);

    • 代码示例
      ALTER TABLE student ADD	CONSTRAINT fk_cid FOREIGN KEY (cid) REFERENCES class(id);
      

    删除外键约束

    ALTER TABLE student DROP FOREIGN KEY 外键名;

    代码示例

    ALTER TABLE student DROP FOREIGN KEY fk_cid;
    
    展开全文
  • T-SQL外键约束

    2020-07-03 09:06:24
    如果在创建外键之前就已经在test02中有了不在test01的id1范围内的数据,则创建外键会失败 alter table test02 drop constraint fk_id11; insert into test02 values(1,1); alter table test02 add constraint fk_id...

    首先创建测试表

    复制代码

    use test;
    create table test01
    (
    id1 int not null,
    id2 int not null
    );
    create table test02
    (
    id11 int not null,
    id22 int not null
    );
    alter table test01 add constraint pk_id1
      primary key(id1);

    复制代码

    考虑如下关系

    test02表中的id11依赖于test01中的id1,因此为test02创建外键

    alter table test02 add constraint fk_id11
      foreign key(id11) references test01(id1);

    注意:test01表中的id1必须为主键或者唯一索引,否则无法创建基于id1的外键。

     

    创建外键之后,我们将发现无法在test02中输入不在test01的id1范围内的数据

    insert into test02 values(1,1);

    消息 547,级别 16,状态 0,第 1 行
    INSERT 语句与 FOREIGN KEY 约束"fk_id11"冲突。该冲突发生于数据库"test",表"dbo.test01", column 'id1'。
    语句已终止。

    如果在创建外键之前就已经在test02中有了不在test01的id1范围内的数据,则创建外键会失败

    alter table test02 drop constraint fk_id11;
    insert into test02 values(1,1);
    alter table test02 add constraint fk_id11
      foreign key(id11) references test01(id1);

    消息 547,级别 16,状态 0,第 1 行
    ALTER TABLE 语句与 FOREIGN KEY 约束"fk_id11"冲突。该冲突发生于数据库"test",表"dbo.test01", column 'id1'。

    此时可以通过with nocheck选项,强制跳过现有数据检查

    alter table test02 with nocheck
      add constraint fk_id11
      foreign key(id11) references test01(id1);

    虽然在test01表中id1设置为了主键,不允许null,但是在test02表中的id2可以允许null值

    alter table test02 alter column id11 int null;
    insert into test02 values(null,1);

     

    当我们从test01进行删除或修改数据操作的时候,如果在test02表中也有相关数据则会报错,拒绝操作;

    insert into test01 values(2,1);
    insert into test02 values(2,1);
    update test01 set id1=3 where id1=2;

    消息 547,级别 16,状态 0,第 1 行
    UPDATE 语句与 REFERENCE 约束"fk_id11"冲突。该冲突发生于数据库"test",表"dbo.test02", column 'id11'。
    语句已终止。

    此时我们可以通过级联操作来同步删除或修改两个表中的数据。

    alter table test02 drop constraint fk_id11;
    alter table test02 with nocheck
        add constraint fk_id11
        foreign key(id11) references test01(id1)
        on update cascade;
    update test01 set id1=3 where id1=2;

    这样test02表中的数据也会相应修改

     

    级联操作包括cascade/set null/set default,跟在操作on delete/on update之后

    其中cascade是做相同修改;set null是test02表中相应数据修改为null;set default则是相应数据修改为默认值。

    展开全文
  • sql 外键约束【表关系绑定】

    千次阅读 2019-03-01 11:32:29
    外键 外键必须是表中的一个字段但不一定是该表的主键,但要对应的必须是另一张表的主键,外键的主要作用就是啊...当两张表之间有有关联时可以采用外键约束进行绑定。 示例:有两张表分别为 tb_book【书 】 、 tb_r...

    外键

    外键必须是表中的一个字段但不一定是该表的主键,但要对应的必须是另一张表的主键,外键的主要作用就是啊要保持数据的完整性,定义外键后不允许删除在另外一张表中具有关联关系的行【一条数据】。

    • 主表(父表):主键所在的表即为主表。
    • 从表(子表):外键所在的表即为从表。

    什么时候使用外键约束

    当两张表之间有有关联时可以采用外键约束进行绑定。

    示例:有两张表分别为 tb_book【书 】 、 tb_reader【阅读】 ,显然没有书就无法阅读,所以 tb_book 为主表,tb_reader 为从表
    
    // 创建tb_book
    CREATE TABLE tb_book(
    id int primary key auto_increment,
    book_name varchar(50));
    // 创建tb_reader
    CREATE TABLE tb_reader(
    id int primary key auto_increment,
    bookId int,
    constraint fk_book_id foreign key(bookId) references tb_book(id));
    insert into book (book_name) values('喀尔巴阡古堡');
    // 正确操作
    insert into reader (readPage) values(45);
    insert into reader (bookId, readPage) values (1, 30);
    
    // 错误操作
    delete from book where id = 1;
    insert into reader (bookId, readPage) values (2, 30);
    

    使用外键时注意

    • 一个表可以有一个或者多个外键。
    • 外键对应的是参照完整性,一个表的外键可以为空值,如果不为空值,则每一个外键的值必须是另一个表中主键的某一个值,否则会提示如下错误:
     insert into reader (bookId, readPage) values (30, 1);
     Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`test_db`.`reader`, 
     CONSTRAINT `fk_book_id` FOREIGN KEY (`bookId`) REFERENCES `book` (`id`)) 
    
    • 如果删除在另一张表中具有关联关系的行【一条数据】则会出一下异常:
    delete from book where id = 1;
    Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`test_db`.`reader`, 
    CONSTRAINT `fk_book_id` FOREIGN KEY (`bookId`) REFERENCES `book` (`id`))
    

    如果创建时没有添加外键约束可以使用 alter table add 添加

    alter table reader add constraint fk_book_id foreign key(bookNameId) references tb_book(id);
    
    展开全文
  • sql 外键约束实例

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

    结论

    当一个表A的列a为另一个表B的列b的外键时

    1. 如果A的列a中删除的值在B的b列中存在,执行被禁止
    2. 如果B的列b中插入的值在A中的a列中没有,执行被禁止

    在Oracle中的测试

    1.创建table cc 其中ID 是主键
    在这里插入图片描述
    2.在主键上插入数据,并测试主键唯一性
    在这里插入图片描述

    3.创建表 ccpre
    在这里插入图片描述
    4.建立外键约束,把ccpre中的u_id设为外键
    在这里插入图片描述
    5.外键性质测试
    5.1在ccpre中插入u_id在cc表中不存在
    cc表中id有以下两条:
    在这里插入图片描述
    在ccpre中插入一条数据u_id 为3的数据
    在这里插入图片描述
    5.2.删除cc表中的id=1的行,这行在ccpre中有u_id=1的表
    在这里插入图片描述
    5.3删除cc表中的id=2的行,这行在ccpre中没有u_id=2的表
    在这里插入图片描述

    在MySQL中的测试

    在这里插入图片描述

    展开全文
  • sql外键约束

    2007-05-26 17:34:17
    sql外键约束解释,foreign tag
  • --新闻分类表 if exists(select * from sysobjects where name='NewsCategory') drop table NewsCategory go create table ...不然就会报错,这就是所谓的外键约束,这个外键约束着News表中对CatergoryId的修改。
  • 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) ...
  • SQL编程:外键约束

    2020-11-29 20:50:20
    外键约束 foreign key约束用于预防破坏表之间连接的行为,也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。【主要目的是确保表的数据的完整性,唯一性】 主表删除某条记录时,从表中与之对应...
  • SQL删除外键约束

    万次阅读 2019-06-14 02:18:23
    2019独角兽企业重金招聘Python工程师标准>>> ...使用如下SQL语句查询出表中外键约束名称: ... 外键约束名       转载于:https://my.oschina.net/weisenz/blog/200655
  • SQL server 外键约束操作

    万次阅读 2019-03-25 14:49:21
    创建数据库时就是有主键的创建了主键,但是表之间的关系没有联系,要建数据库关系图只有主键没有外键时不行的。 建外键的前提是此外键必须是另外一个表的主键。建外键的步骤: 第一步、打开要建外键的表设计器,...
  • SQL Server 2012 外键约束(定义外键、删除外键)

    万次阅读 多人点赞 2019-04-21 20:00:26
    文章目录准备知识定义外键使用SSMS工具定义外键使用SQL方式定义外键删除外键使用SSMS工具删除外键方式一:在对象资源管理器中删除主键方式二:在表设计器中删除主键使用SQL方式删除外键 准备知识     外键...
  • NO ACTION 指定如果试图删除/修改某一行,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 DELETE/UPDATE语句。 CASCADE、SET NULL 和 SET DEFAULT 允许通过删除或更新键值来影响指定具有外键关系的表...
  • SQL 外键约束

    千次阅读 2013-12-22 16:03:10
    外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。 在sqlite中,针对 delete和update有以下约束: set null: 父值被删除...
  • 20171012 SQL外键约束

    2017-10-12 13:49:58
    SQL FOREIGN KEY 约束 SQL Primary Key SQL Check SQL FOREIGN KEY 约束 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。 让我们通过一个例子来解释外键。请看下面两个表: ...
  • My SQL外键约束

    千次阅读 2015-10-12 15:30:30
    外键约束对子表的含义:如果在父表中找不到对应的候选键,则不能对子表进行insert/update操作 外键约束对父表的含义:在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取...
  • 外键约束涉及到父表(主表)和子表(副表),一个表的记录被另外一个表引用 举例说明:假设现在我们有两个表,班级表和学生表。 班级表的创建如下: create table classes( id int primary key, name ...
  • SQL Server查询外键约束与删除外键约束: 'WC_User'是表名 exec sp_helpconstraint 'WC_User' select name  from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id ...
  • sql 外键约束

    2013-04-21 18:49:22
    外键约束 文章分类:数据库 关键字: 外键约束, 外键 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表...
  • SQL中的外键约束

    2020-12-22 15:38:20
    外键约束 如有两个表 学生表 id 主键约束 名字 性别 成绩表 id 学生id 成绩 给成绩表的学生id加上外键约束 create table 成绩表( id int, 学生id int, 成绩 int, constraint 外键约束名 foreign key (学生id) ...
  • SQL - 外键约束

    千次阅读 2015-07-30 10:22:44
    我在 CSDN 学院发布的 SQL 入门视频教程。 外键用于连接两个表。外键也称为引用键。 外键是一个或一组匹配另一个表的主键的列。 如果一个表存在主键,那么主键列上的值不能重复。 示例 考虑以下两个表: ...
  • sql外键约束简单说明

    2015-03-07 21:33:34
    上面这条语句说明:child表是依附prarent表存在的,如果想删除父类,会告诉你想消灭我,先过了我儿子那关(我只是想说明得删除所有与parent相关外键),才能删除parant) mysql> drop table parent; ERROR 1217 ...
  • Sql 多重外键约束

    千次阅读 2014-10-14 23:40:13
    多重外键约束这个名称可能并不准确,它是多个外键约束情况的一个特例,它指的是外键表有存在两个及以上外键关联到同一个主键表,例如一个部门,有正副两个管理者 首先看看不含多重外键的多个外键约束的一般情况,...
  • Day08一、SQL约束1、主键约束2、非空约束3、唯一约束4、自动增长二、外键约束三、多表关系1、一对多2、多对多3、一对一四、多表查询1、笛卡尔积现象2、子查询 一、SQL约束 1、主键约束 PRIMARY KEY 约束,用于标识...
  • MySQL的外键约束是用来在两个表之间建立链接的,其中一个表发生变化,另外一个表也发生变化。从这个特点来看,它主要是为了保证表数据的一致性和完整性的。 对于两个通过外键关联的表,相关联字段中主键所在的表是主...
  • SQL Sever 小技巧之解决外键约束(禁用、启用外键约束) 因为有外键约束的存在,在从表中,修改主表不存在的数据是不合法的;在主表中,删除从表中已存在的主表信息也是不合法的。 当然方法总比困难多,以下两种方法各有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 87,343
精华内容 34,937
关键字:

sql外键约束