韦德国际1946英国 > 计算机网络 > 外键约束,关于MySQL外键的简单学习教程

原标题:外键约束,关于MySQL外键的简单学习教程

浏览次数:85 时间:2019-08-03

[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, …) 
REFERENCES tbl_name (index_col_name, …) 
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] 
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] 

关于MySQL外键的简命理术数习课程,mysql教程

在MySQL中,InnoDB引擎类型的表支持了外键约束。
外键的利用原则:
1.七个表必须是InnoDB表,MyISAM表暂且不帮忙外键(据悉现在的本子有非常大希望协理,但至少如今不扶助);
2.外键列必须构造建设了目录,MySQL 4.1.2后头的本子在创建外键时会自动创制索引,但若是在较早的版本则须求体现构建;
3.外键关系的多个表的列必须是数据类型相似,也正是足以并行调换类型的列,举例int和tinyint能够,而int和char则不得以;
外键的收益:能够使得两张表关联,保障数据的一致性和落实部分级联操作;
外键的定义语法:
代码如下:

[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, …) 
REFERENCES tbl_name (index_col_name, …) 
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] 
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] 

该语法能够在 CREATE TABLE 和 ALTE福特Explorer TABLE 时使用,就算不钦赐CONSTRAINT symbol,MYSQL会自动生成三个名字。
ON DELETE、ON UPDATE表示事件触发限制,可设参数:

  • REST福睿斯ICT(限制外表中的外键改换)
  • CASCADE(跟随外键退换)
  • SET NULL(设空值)
  • SET DEFAULT(设暗中认可值)
  • NO ACTION(无动作,默认的)

要是子表试图创造叁个在父表中不设有的外键值,InnoDB会拒绝任何INSERT或UPDATE操作。假若父表试图UPDATE可能DELETE任何子表中存在或同盟的外键值,最终动作取决于外键约束定义中的ON UPDATE和ON DELETE选项。InnoDB援救5种不一致的动作,若无钦点ON DELETE可能ON UPDATE,私下认可的动作为REST福特ExplorerICT:

  1. CASCADE: 从父表中删去或更新对应的行,同临时间自动的去除或更新自表中相配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支撑。

  2. SET NULL: 从父表中剔除或更新对应的行,同不时候将子表中的外键列设为空。注意,那几个在外键列未有被设为NOT NULL时才使得。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支撑。

  3. NO ACTION: InnoDB拒绝删除可能更新父表。

  4. RESTQashqaiICT: 拒绝删除或然更新父表。钦点REST普拉多ICT(或许NO ACTION)和忽略ON DELETE也许ON UPDATE选项的功力是一律的。

  5. SET DEFAULT: InnoDB最近不援救。

  外键约束使用最多的二种状态无外乎:

  1)父表更新时子表也更新,父表删除时借使子表有特别的项,删除退步;

  2)父表更新时子表也更新,父表删除时子表相称的项也删除。

  前一种情景,在外键定义中,我们选用ON UPDATE CASCADE ON DELETE REST哈弗ICT;后一种景况,能够利用ON UPDATE CASCADE ON DELETE CASCADE。

  InnoDB允许你利用ALTE路虎极光 TABLE在一个业已存在的表上增添贰个新的外键:

ALTER TABLE tbl_name
  ADD [CONSTRAINT [symbol]] FOREIGN KEY
  [index_name] (index_col_name, ...)
  REFERENCES tbl_name (index_col_name,...)
  [ON DELETE reference_option]
  [ON UPDATE reference_option]

  InnoDB也支撑选取ALTE冠道 TABLE来删除此而外键:
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;

在MySQL中,InnoDB引擎类型的表支持了外键约束。 外键的行使原则: 1.多个表必须是InnoDB表,MyISAM表...

外键的概念:

只要表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。

  5. SET DEFAULT: InnoDB前段时间不补助。

--此时article中的category_id也会被更新成3

UPDATE test.category SET id = '3' WHERE category外键约束,关于MySQL外键的简单学习教程。.id =2;

  InnoDB也补助使用ALTE大切诺基 TABLE来删除了这几个之外键:
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;

--增多外键

ALTER TABLE article ADD CONSTRAINT fk_1 FOREIGN KEY ( category_id )
REFERENCES category ( id )
ON DELETE CASCADE ON UPDATE CASCADE

ALTER TABLE tbl_name
  ADD [CONSTRAINT [symbol]] FOREIGN KEY
  [index_name] (index_col_name, ...)
  REFERENCES tbl_name (index_col_name,...)
  [ON DELETE reference_option]
  [ON UPDATE reference_option]
--此时article中的记录也会被删除

delete from category where id=1;

  2. SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这个在外键列未有被设为NOT NULL时才使得。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支撑。

外键的成效

  • 贯彻参照完整性
  • 以往和过去非常差别样外键约束措施使两张表紧凑结合
  • 级联操作(修改只怕去除)使日常维护工作特别轻便
  • 保险数据的完整性和一致性

您大概感兴趣的稿子:

  • 详解MySQL中的外键约束难题
  • MySQL 成立主键,外键和复合主键的口舌
2.在article中插入一条记下

INSERT INTO article (id, category_id, name) VALUES
(1, 1, '文章1');

本文由韦德国际1946英国发布于计算机网络,转载请注明出处:外键约束,关于MySQL外键的简单学习教程

关键词: mysql

上一篇:韦德1946国际:css无效的原因及解决方法,javasc

下一篇:没有了