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

    2021-01-05 22:33:40
    外键约束 在新表中添加外键约束语法: constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名) 在已有表中添加外键约束:alter table 从表表名 add constraints 外键约束名称 ...

    外键约束

    • 在新表中添加外键约束语法: constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名)

    • 在已有表中添加外键约束:alter table 从表表名 add constraints 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名)

    • 删除外键语法: alter table 从表表名 drop foreign key 外键名称;

    • 级联操作:

      • 注意:

        在从表中,修改关联主表中不存在的数据,是不合法的

        在主表中,删除从表中已经存在的主表信息,是不合法的。直接删除主表(从表中有记录数据关联) 会包删除失败。

      • 概念: 在修改或者删除主表的主键时,同时它会更新或者删除从表中的外键值,这种 动作我们称之为级联操作。

      • 语法:

        • 更新级联 on update cascade 级联更新 只能是创建表的时候创建级联关系。当更新主表中的主键,从表中的外键字段会同步更新。
        • 删除级联 on delete cascade 级联删除 当删除主表中的主键时,从表中的含有该字段的记录值会同步删除。
      • 操作:

        -- 给从表student添加级联操作
        create table student(
            s_id int PRIMARY key ,
            s_name VARCHAR(10) not null,
            s_c_id int,
        -- constraint  外键约束名称  foreign key(外键的字段名称)  references 主表表名(主键字段名)
        	 CONSTRAINT	stu_cour_id FOREIGN key(s_c_id)	REFERENCES	course(c_id)				-- 给s_c_id 添加外键约束
        	 ON UPDATE CASCADE	ON DELETE CASCADE
        )
        
        insert into student VALUE(1,'小孙',1),(2,'小王',2),(3,'小刘',4);
        insert into student VALUE(4,'小司马',1),(5,'小赵',1),(6,'小钱',1);
        
        -- 查询学生表中的记录
        select * from student;
        
        -- 级联操作。
        -- 更新级联  on update cascade   级联更新 只能是创建表的时候创建级联关系。当更新主表中的主键,从表中的外键字段会同步更新。
        update course set c_id = 10 where c_id = 1;
        -- 删除级联  on delete cascade   级联删除  当删除主表中的主键时,从表中的含有该字段的记录值会同步删除。
        
        delete from course where c_id = 10;
        

    约束总结

    约束名 关键字 描述
    主键 primary key 唯一不为空
    默认 default 插入数据,该字段没有赋值,系统会自动赋指定的默认值
    非空 not null 该字段不能为null(空)
    唯一 unique 该字段的值在整个表中只能出现1次
    外键 foreign key 从表中添加外键字段,关联主表中的主键字段
    展开全文
  • 主外键和外键约束主键主键(primary key):一列(或一组列),其值能够唯一区分表中每个行 。外键外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系什么是外键约束右边的...

    主外键和外键约束

    主键

    主键(primary key):一列(或一组列),其值能够唯一区分表中每个行 。

    外键

    外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系

    什么是外键约束

    右边的DepartmentID是外键。 外键约束是指用于在两个表之间建立关系,需要指定引用主表的哪一列。

    On Delete

    On Delete可能取值如上图为:No Action, Cascade,Set Null, Restrict属性。 1. No Action / Restrict 当取值为No Action或者Restrict时,则当在父表(主表)(即外键的来源表)中删除对应记录时,首先检查该记录对应的从表是否有对应外键,如果有则不允许删除。 2. Cascade(级联) 当取值为Cascade时,则当在父表(主表)(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。(一起删除) 3. Set Null 当取值为Set Null时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

    On Update

    On Update可能取值如上图为:No Action, Cascade,Set Null, Restrict属性。(更新的是外键的值)No Action / Restrict 当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。

    Cascade(级联) 当取值为Cascade时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。

    Set Null 当取值为Set Null时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

    理解示例

    表结构

    学生表(学号,姓名,性别,班级) // 学号唯一,能确定学生表的一行课程表(课程编号,课程名,学分) // 课程编号唯一,能确定课程表的一行成绩表(学号,课程号,成绩) // 学号和课程号才能唯一确定哪个人哪门课得了多少分,学号和课程号这两列为主键

    具体分析

    以上面的成绩表为例,学号和课程号是成绩表的主键,那么学号是成绩表的外键还是学生表的外键?当然是成绩表的外键,因为学号是学生表的主键呀,怎么可能是外键?同理成绩表课程号也应该是成绩表的外键。 其实,外键主要建立与其他表的联系,如果我们想知道成绩表中某一行成绩是谁考的,啥性别,在哪个班级,就可通过成绩表的外键学号与学生表建立一种关系。

    展开全文
  • 禁用外键约束 SET FOREIGN_KEY_CHECKS=0; 启动外键约束 SET FOREIGN_KEY_CHECKS=1; 查看当前FOREIGN_KEY_CHECKS的值 SELECT @@FOREIGN_KEY_CHECKS;
    禁用外键约束
    SET FOREIGN_KEY_CHECKS=0;
    启动外键约束
    SET FOREIGN_KEY_CHECKS=1;
    查看当前FOREIGN_KEY_CHECKS的值
    SELECT  @@FOREIGN_KEY_CHECKS; 
    展开全文
  • 主外键和外键约束主键主键(primary key):一列(或一组列),其值能够唯一区分表中每个行 。外键外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系 什么是外键约束 右边...

    主外键和外键约束

    主键

    主键(primary key):一列(或一组列),其值能够唯一区分表中每个行 。

    外键

    外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系

    什么是外键约束

    d044ab71961b175f657791763b6a4897.png

    右边的DepartmentID是外键。 外键约束是指用于在两个表之间建立关系,需要指定引用主表的哪一列。

    On Delete

    74fd0929e5d9ba5aaae432f2c62f6cc2.png

    On Delete可能取值如上图为:No Action, Cascade,Set Null, Restrict属性。 1. No Action / Restrict 当取值为No Action或者Restrict时,则当在父表(主表)(即外键的来源表)中删除对应记录时,首先检查该记录对应的从表是否有对应外键,如果有则不允许删除。 2. Cascade(级联) 当取值为Cascade时,则当在父表(主表)(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。(一起删除) 3. Set Null 当取值为Set Null时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

    On Update

    bb3027c0d05e9ab251fb061c03ccbe0a.png

    On Update可能取值如上图为:No Action, Cascade,Set Null, Restrict属性。(更新的是外键的值

    1. No Action / Restrict 当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新
    2. Cascade(级联) 当取值为Cascade时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。
    3. Set Null 当取值为Set Null时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

    理解示例

    表结构

    学生表(学号姓名性别班级)  //  学号唯一,能确定学生表的一行
    课程表(课程编号,课程名,学分)   //  课程编号唯一,能确定课程表的一行
    成绩表(学号,课程号,成绩     //   学号和课程号才能唯一确定哪个人哪门课得了多少分学号和课程号这两列为主键

    具体分析

    以上面的成绩表为例,学号和课程号是成绩表的主键,那么学号是成绩表的外键还是学生表的外键?当然是成绩表的外键,因为学号是学生表的主键呀,怎么可能是外键?同理成绩表课程号也应该是成绩表的外键。 其实,外键主要建立与其他表的联系,如果我们想知道成绩表中某一行成绩是谁考的,啥性别,在哪个班级,就可通过成绩表的外键学号与学生表建立一种关系。

    展开全文
  • 详解MySQL 外键约束,西欧,西西里,玛雅,兵种,诺曼详解MySQL 外键约束易采站长站,站长之家为您整理了详解MySQL 外键约束的相关内容。官方文档:...
  • 02-mysql外键约束.md如果表A(category.id)的主关键字是表B(article.category_id)中的字段,则该字段称为表B的外键,表A称为主表(父表),表B称为从表(子表)。外键是用来实现参照完整性的,不同的外键约束方式将可以使...
  • 外键约束 外键必须是另一个表的主键。 外键的作用: 1.实体完整性,确保每个实体是唯一的(通过主键来实施) 2.域完整性,确保属性值只从一套可选的集合里选择 3.关联完整性,确保每个外键或null或含有与相关主键值...
  • 外键约束是为了保持子表与父表的数据一致。InnoDB是mysql内置存储引擎中唯一一个支持外键的。InnoDB会强制外键使用索引。使用外键是有成本的,因为每次修改数据都要在另外一个表中执行查询操作,虽然如上面所说,外....
  • 添加主键约束 直接在创建表的时候添加主键...当主键表已经存在,直接在创建外键表的时候添加外键约束 create table book ( book_id int primary key, title nvarchar(128), description nvarchar(512), published
  • mysql建立外键约束的方法:直接执行【CREATE TABLE stu(sid INT PRIMARY KEY,NAME VARCHAR(50) NOT NULL);】语句即可。添加外键约束CREATE TABLE stu(sid INT PRIMARY KEY,NAME VARCHAR(50) NOT NULL);添加外键约束...
  • 外键约束如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键外键(FOREIGN KEY)假设有有A、B两张数据表,A表有一个字段id用来唯一标识A中的一条记录,B表有一个字段a_id来关联A表的一...
  • 删除所有外键约束 Sql代码 复制代码 select 'alter table '||table_name||' drop constraint '||constraint_name||';' from user_constraints where constraint_type='R' 禁用所有外键约束 Sql代码 select '...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,979
精华内容 5,991
关键字:

外键约束