精华内容
下载资源
问答
  • 2021-01-19 01:22:05

    NO ACTION

    指定如果试图删除/修改某一行,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 DELETE/UPDATE语句。

    CASCADE、SET NULL 和 SET DEFAULT

    允许通过删除或更新键值来影响指定具有外键关系的表,这些外键关系可追溯到在其中进行修改的表。如果为目标表也定义了级联引用操作,那么指定的级联操作也将应用于删除或更新的那些行。不能为具有 timestamp 列的外键或主键指定 CASCADE。

    ON DELETE CASCADE

    指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则也将删除所有包含那些外键的行。

    ON UPDATE CASCADE

    指定如果试图更新某一行中的键值,而该行的键值被其他表的现有行中的外键所引用,则组成外键的所有值也将更新到为该键指定的新值。 (如果 timestamp 列是外键或被引用键的一部分,则不能指定 CASCADE。 )

    ON DELETE SET NULL

    指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为 NULL。目标表的所有外键列必须可为空值,此约束才可执行。

    ON DELETE SET DEFAULT

    指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。目标表的所有外键列必须具有默认值定义,此约束才可执行。如果某个列可为空值,并且未设置显式的默认值,则会使用 NULL 作为该列的隐式默认值。因 ON DELETE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。

    ON UPDATE SET DEFAULT

    指定如果试图更新某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。目标表的所有外键列必须具有默认值定义,此约束才可执行。如果某个列可为空值,并且未设置显式的默认值,则会使用 NULL 作为该列的隐式默认值。因 ON UPDATE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。

    更多相关内容
  • mysql外键作用

    千次阅读 多人点赞 2018-03-23 16:57:03
    mysql中的外键foreign key一、如果一张表中有一个非主键的字段指向了别一张表中的主键,就将该字段叫做外键。 一张表中可以有多个外键。 外键的默认作用有两点: 1.对子表(外键所在的表)的作用:子表在进行写操作...

    mysql中的外键foreign key

    一、如果一张表中有一个非主键的字段指向了别一张表中的主键,就将该字段叫做外键。

      一张表中可以有多个外键。

      外键的默认作用有两点:

      1.对子表(外键所在的表)的作用:子表在进行写操作的时候,如果外键字段在父表中找不到对应的匹配,操作就会失败。

      2.对父表的作用:对父表的主键字段进行删和改时,如果对应的主键在子表中被引用,操作就会失败。

      外键的定制作用----三种约束模式:

        district:严格模式(默认), 父表不能删除或更新一个被子表引用的记录。

        cascade:级联模式, 父表操作后,子表关联的数据也跟着一起操作。

        set null:置空模式,前提外键字段允许为NLL,  父表操作后,子表对应的字段被置空。

      使用外键的前提:

      1. 表储存引擎必须是innodb,否则创建的外键无约束效果。

      2. 外键的列类型必须与父表的主键类型完全一致。

      3. 外键的名字不能重复。

      4. 已经存在数据的字段被设为外键时,必须保证字段中的数据与父表的主键数据对应起来。

    二、新增外键

      1. 在创建时增加

       create table my_tab1(

       id int primary key auto_increment,

       name varchar(10) not null,

       class int,

       foreign key(class) references my_tab2(主键字段名);

       )charset utf8;

      2. 在创建好的表中增加

       alter table my_tab1 add [constraint 外键名] foreign key(外键字段名) references mytab2(主键字段名);

    三、删除外键

      alter table my_tab drop foreign key 外键名字;

    展开全文
  • Mysql外键作用和用法

    千次阅读 2020-12-04 17:24:55
    个人理解,有误请指出。 章节目录语法约束概念示例设置为RESTRICT设置为CASCADE设置为SET NULL注意事项创建外键删除外键 ...约束:在语法添加,约束名不同,作用不同,下面单独说。 约束 概念 navicat

    个人理解,有误请指出。

    语法

    ALTER TABLE 子表 
    ADD CONSTRAINT 外键名 
    FOREIGN KEY (子表列) 
    REFERENCES 主表名(主表列) 
    ON DELETE + 约束
    ON UPDATA + 约束 ;
    

    注明:
    外键名:自己设置,仅仅只是别名,这里有人会认为是关键字。
    约束:在语法添加,约束名不同,作用不同,下面单独说。

    约束

    概念

    navicat for mysql中设置外键
    在这里插入图片描述
    上面语法中在ON DELETE 和 ON UPDATA后面的+约束 ,下面是不同约束的功能

    • CASCADE:主表delete或update数据时,子表对应的数据也会被删除或更新。
    • SET NULL:主表delete或update数据时,子表的对应数据会被变为null。
    • RESTRICT:如果主表想要delete、update数据,但是子表的外键列中有对应的数据,那么主表中的数据不可以被删除。
      通俗的说:子表有数据,主表无法更改。
    • NO ACTION:和RESTRICT作用差不多,现在mysql最新版本已经无法选择了。

    示例

    删除和更新的约束作用一样,这里只演示删除。
    主表:eastchina
    在这里插入图片描述
    子表:city
    在这里插入图片描述

    设置为RESTRICT

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    结果:无法删除。

    设置为CASCADE

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    结果:主表数据删除,子表也会被删除。

    设置为SET NULL

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    结果:主表删除数据,子表外键列变为null。

    注意事项

    创建外键

    1.子表并非只能设置在主表的主键上,但是必须是唯一性索引。通常都设置在主键。
    2.子表外键列的字段类型需要和主表的主键保持一致性。
    3.如果约束需要设置为SET NULL 时,那么子表的外键列不可以设置为not null
    4.外键必须使用相同的存储引擎,mysql的默认存储引擎是innodb,所以可以不用管它。
    5.主表的主键如果是无符号或者自动递,那么外键就不会增加成功。

    删除外键

    注意:外键不支持修改,只能删了重建

    删除:ALTER  TABLE  外键表名  DROP  FOREIGN  KEY  外键名
    
    展开全文
  • mysql外键基本功能与用法详解

    千次阅读 2021-01-19 07:05:58
    本文实例讲述了mysql外键基本功能与用法。分享给大家供大家参考,具体如下:本文内容:什么是外键外键的增加外键的修改和删除外键的约束模式首发日期:2018-04-12什么是外键:外键就是表中存在一个字段指向另外一个...

    本文实例讲述了mysql外键基本功能与用法。分享给大家供大家参考,具体如下:

    本文内容:

    什么是外键

    外键的增加

    外键的修改和删除

    外键的约束模式

    首发日期:2018-04-12

    什么是外键:

    外键就是表中存在一个字段指向另外一个表的主键,那么这个字段就可以称为外键。

    一张表可以有多个外键。

    外键用于约束表与表之间的关系,可以说外键是表之间的映射关系,这个关系可以帮助我们处理表之间关系的紧密性和存在性(比如学生表的cid班级号与班级表的id建立关联,cid应该不能为不存在的,如果不增加外键cid,没有建立上关系,我们就不知道班级号不存在。)。

    或者说,外键是告诉数据库系统,我们所认为的关系,单纯的数据,系统是不知道实际意义的,外键就是告诉系统应该如何处理他们的关系。

    所以,外键的核心是约束。

    外键的增加:

    创建外键的前提是该字段首先是一个索引,如果不是的话,创建外键是会创建成一个普通索引【所以可以不在意】。

    创建外键的另外一个前提是“指向表”已经创建,对于一个不存在的表,将无法使用外键对应上。

    增加的方式:

    1.在创建表的时候定义,在所有字段定义结束后使用foreign key(外键字段) references 指向表(主键)来 定义,比如

    17291702a64b273cb9eb4c954c821f33.png

    2.也可以修改字段来增加: alter table 表名 add [constraint 外键名字] foreign key(外键字段) references 父表(主键字段);

    constraint 外键名字:可以帮助定义外键的名字,但不建议使用,因为要求外键名都唯一,而使用系统自定义的绝对不会重复,

    create table student(

    id int primary key auto_increment,

    name varchar(15) not null,

    gender varchar(10) not null,

    cid int,

    foreign key(cid) references class(id)

    );

    create table class(

    id int primary key auto_increment,

    cname varchar(15)

    );

    补充:

    在Mysql中,如果存储引擎不是innodb,那么无法使外键的约束作用生效,即使是能成功增加外键。

    外键名不能重复,所以不建议使用constraint 外键名字

    外键的修改与删除:

    修改:不能修改外键信息,如外键指向之类的,只能先删除再新增。

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

    这里的外键名不是外键字段,而是外键名。如果没有使用constraint来定义,可以通过show create来查看表创建语句中系统定义的外键名。

    40f5a6c69219088b41a1d75ff05e49c0.png

    补充:

    删除外键时,如果使用desc会看到表结构还有MUL,那是一个索引。因为创建外键时,字段会被创建成一个索引。如果不想保留,可以使用drop index 字段名 on 表名.

    外键的约束模式:

    外键是用来约束表之间的关系的。

    (约定创建外键的表称为子表,指向的表称为父表)

    针对子表:可以约束子表的插入和修改【这种约束是父表对子表的约束】

    涉及到外键的插入和修改时,如果外键字段找不到对应的匹配那么会插入\修改失败(像插入选课记录不可能插入一门课程表中没有的课程)。

    比如:

    8b6a45d416e9eb3de5a93ef90824b62a.png

    针对父表:可以约束父表的删除和更新,通常有可以以下几种约束模式。【这种约束是子表对父表的约束】

    模式:

    strict严格模式:涉及到外键的删除和更新时,如果对应记录的主键数据已经被子表使用时,那么无法删除(像已经有人入学了某个班级,学校不可能犯傻去把某个班级删除,只能删除那些没人入学的班级。)

    cascade级联模式:涉及到外键的删除和更新时,如果字段已经被子表使用,子表中的数据会对应更新(像某个班改了班号,那么学生表中的班别都对应更改;如果某个班被删除,就删除对应班的所有学生)

    set null置空模式:涉及到外键的删除和更新时,如果字段已经被子表使用,那么子表中的外键数据会置空(像某个班被删掉了,不应该删掉所有学生,而是应该给他们先置空再重新分配班别)【子表允许置空的前提是该字段允许为空】

    其实可以给不同操作指定不同模式

    综上所述(根据我的那些举例),实际上,合适的举措是删除时置空(即使某个班太垃圾了,想删除某个班,但也不应该将所有学生退学,而是将它们分到别的班),修改时级联(允许更改班号,而且更改会更新到学生中)

    不同操作设置不同模式的设置方法(在子表中操作):foreign key(外键字段) references 父表(主键) on 操作 模式

    foreign key(外键字段) references 父表 (主键) on delete set null on update cascade;

    -- 实验表结构

    create table class(

    id int primary key auto_increment,

    cname varchar(15)

    );

    create table student2(

    id int primary key auto_increment,

    name varchar(15) not null,

    gender varchar(10) not null,

    cid int,

    foreign key(cid) references class(id) on delete set null on update cascade

    );

    -- 实验表数据:

    insert into class(cname) values("python"),("linux"),("java"),("html5");

    insert into student2(name,gender,cid) values("Alice","female",1);

    insert into student2(name,gender,cid) values("John","female",2);

    insert into student2(name,gender,cid) values("Jack","female",3);

    insert into student2(name,gender,cid) values("Amy","female",4);

    select * from student2;

    select * from class;

    -- 尝试更新级联

    update class set id = 6 where cname="python";

    select * from student2; -- 结果原来的python的cid=6

    -- 尝试删除置空

    delete from class where cname="java";

    select * from student2; -- 结果原来的java的cid=null

    补充:

    需要设置好约束模式,不要在多个子表中使用不同的约束模式,不然会冲突。

    希望本文所述对大家MySQL数据库计有所帮助。

    展开全文
  • mysql建立外键

    2021-01-20 00:11:20
    外键作用: 使两张表形成关联,外键只能引用外表中的列的值! 指定主键关键字: foreign key(列名) 引用外键关键字: references <外键表名>(外键列名) 事件触发限制: on delete和on update , 可设...
  • 本文实例讲述了mysql外键的三种关系。分享给大家供大家参考,具体如下: 因为有foreign key的约束,使得两张表形成了三种了关系: 多对一 多对多 一对一 一对多或多对一 多对一 create table press( id int ...
  • 详解MySQL 外键约束

    2020-12-14 08:20:16
    1.外键作用MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。 2.外键的使用条件 两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持) 外键列必须建立了...
  • MySQL命令行&MySql外键设置详解 .txt
  • MySQL中,InnoDB引擎类型的表支持了外键约束。外键的使用条件:1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);2.外键列必须建立了索引,MySQL 4.1.2以后的版本...
  • MySQL外键使用详解

    2020-12-15 17:17:05
    (3)外键作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值! (4)建立外键的前提: 两个表必须是InnoDB表类型。 使用在外键关系的域必须为...
  • MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。这篇文章还通过外键的使用条件和外键的好处定义语法方面介绍了mysql外键使用及说明,非常不错,具有参考借鉴价值,需要的朋友一起看下吧
  • 1、安装mysql有InnoDB的插件扩展 ./configure –prefix=/usr/local/mysql –with-plugins=csv,innobase,myisam,heap,innodb_plugin 2、找不到主表中 引用的列 3、主键和... 您可能感兴趣的文章:mysql外键(Foreign Key)
  • MySQL外键约束是用来在两个表之间建立链接的,其中一个表发生变化,另外一个表也发生变化。从这个特点来看,它主要是为了保证表数据的一致性和完整性的。 对于两个通过外键关联的表,相关联字段中主键所在的表是主...
  • MySQL外键是MySQL数据库中非常重要的部分,那么,MySQL外键究竟起到哪些作用呢?下文就将带您一探其中的秘密。MySQL外键作用:保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,...
  • 下面小编就为大家带来一篇MySQL外键约束的禁用与启用命令。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 附件包含的内容为MySQL数据库中关于外键的内容,包括外键定义,作用,添加和删除
  • MySQL外键约束详解

    千次阅读 2021-12-19 08:02:01
    今天继续给大家介绍MySQL相关知识,本文主要内容是...一、MySQL外键约束作用 二、外键约束创建 (一)创建外键约束的条件 (二)在创建数据表时创建外键约束 (三)在创建数据表后添加外键约束 三、外键约束功能演示
  • 浅谈 MySQL外键作用

    万次阅读 2018-06-19 00:25:14
    MySQL外键必须使用存储引擎为 innDB 其中MySAM 和MEMORYH这两种引擎不支持 由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的...
  • mysql外键

    2022-01-05 11:12:50
    外键 外键:foreign key,外面的键(键不在自己表中),如果一张表中有一个字段(非主键)指向另外一张表中的主键,那么该字段称之为外键. 增加外键 1.外键可以在创建表的时候或者创建表之后增加(但是要考虑数据的问题) ...
  • mysql外键设置

    2012-08-29 09:43:32
    mysql外键的设置,使用。添加外键的格式: ALTER TABLE yourtablename ADD [CONSTRAINT 外键名] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col_name, ...) [ON DELETE {CASCADE | ...
  • SQL的主键和外键作用外键取值规则:空值或参照的主键值。 (1)插入非空值时,如果主键表中没有这个值,则不能插入。 (2)更新时,不能改为主键表中没有的值。 (3)删除主键表记录时,你可以在建外键...
  •  这里以MySQL为例,总结一下3种外键约束方式的区别和联系。  这里以用户表和用户组表为例,这是一个典型的多对一关系,多个用户对应于一个用户组。  首先创建用户组表:  create table t_group(  id int ...
  • MySQL外键命名规范

    2021-12-28 21:59:34
    数据库 外键命名规范 外键字段:与主表主键字段完全一样 主键:pk_+表名 例如:pk_main 外键:fk_+从表名+_+主表名 例如:fk_sub_main
  • mysql 外键约束

    2022-02-25 18:47:01
    mysql外键约束 概念:外键约束是让两个表数据之间建立连接保证数据的一致性和完整性 语法: – 添加约束 创建表时添加约束 create Table 表名{ 列名 数据类型, …… [constraint] [外键名称] FOREIGN KEY(外键...
  • 详解MySQL外键设置

    2021-01-18 18:22:17
    MySQL外键设置是学习MySQL数据库过程中不能不提的,下面就会为您详细介绍MySQL外键设置的方法,希望对您学习MySQL外键设置方面能有所帮助。外键的作用:保持数据一致性,完整性,主要目的是控制存储在外键表中的数据...
  • 主要介绍了MySQL无法创建外键的原因及解决方法,然后在文中给大家及时了MySQL无法创建外键、查询外键的属性知识,感兴趣的朋友一起看看吧
  • MySQL外键(详解)

    2021-11-17 17:13:28
    MySQL外键(详解) 什么是外键:    外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束(简单来说外键是另一个表的主键或者唯一约束)。外键可以有重复的, 可以是空值,用来...
  • 主要介绍了MySQL外键约束常见操作方法,结合实例形式分析了mysql针对外键约束的查看、添加、修改、删除等相关操作实现方法,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 147,616
精华内容 59,046
关键字:

mysql外键的作用

mysql 订阅