旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

MySQL怎样设置外键束缚?【MySQL教程】,MySQL,外键约束

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:68评论:0


导读:MySQL外键束缚(FOREIGNKEY)用来在两个表的数据之间竖立链接,它可所以一列或许多列。一个表能够有一个或多个外键。外键对应的是参照完整性,一个表的外键能够为空...

MySQL 外键束缚(FOREIGN KEY)用来在两个表的数据之间竖立链接,它可所以一列或许多列。一个表能够有一个或多个外键。

外键对应的是参照完整性,一个表的外键能够为空值,若不为空值,则每一个外键的值必需即是另一个表中主键的某个值。

外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不许可删除另一个表中具有关联关联的行。

外键的重要作用是坚持数据的一致性、完整性。比方,部门表 tb_dept 的主键是 id,在员工表 tb_emp5 中有一个键 deptId 与这个 id 关联。主表(父表):关于两个具有关联关联的表而言,相干联字段中主键地点的表就是主表。从表(子表):关于两个具有关联关联的表而言,相干联字段中外键地点的表就是从表。

拔取设置 MySQL 外键束缚的字段

定义一个外键时,须要恪守以下划定规矩:

父表必需已存在于数据库中,或许是当前正在建立的表。假如是后一种状况,则父表与子表是同一个表,如许的表称为自参照表,这类构造称为自参照完整性。

必需为父表定义主键。

主键不能包括空值,但许可在外键中涌现空值。也就是说,只需外键的每一个非空值涌现在指定的主键中,这个外键的内容就是准确的。

在父表的表名背面指定列名或列名的组合。这个列或列的组合必需是父表的主键或候选键。

外键中列的数量必需和父表的主键中列的数量雷同。

外键中列的数据范例必需和父表主键中对应列的数据范例雷同。

在建立表时设置外键束缚

在数据表中建立外键运用 FOREIGN KEY 关键字,细致的语法划定规矩以下:

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

个中:外键名为定义的外键束缚的称号,一个表中不能有雷同称号的外键;字段名示意子表须要增加外健束缚的字段列;主表名即被子表外键所依靠的表的称号;主键列示意主表中定义的主键列或许列组合。

示例:为了展示表与表之间的外键关联,本例在 test_db 数据库中建立一个部门表 tb_dept1,表构造以下表所示。

建立 tb_dept1 的 SQL 语句运转效果以下所示。

mysql> CREATE TABLE tb_dept1
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(22) NOT NULL,
    -> location VARCHAR(50)
    -> );
Query OK, 0 rows affected (0.37 sec)

建立数据表 tb_emp6,并在表 tb_emp6 上建立外键束缚,让它的键 deptId 作为外键关联到表 tb_dept1 的主键 id,输入的 SQL 语句和运转效果以下所示。

mysql> CREATE TABLE tb_emp6
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> CONSTRAINT fk_emp_dept1
    -> FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
    -> );
Query OK, 0 rows affected (0.37 sec)
mysql> DESC tb_emp6;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  | MUL | NULL    |       |
| salary | float        | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (1.33 sec)

以上语句实行胜利以后,在表 tb_emp6 上增加了称号为 fk_emp_dept1 的外键束缚,外键称号为 deptId,其依靠于表 tb_dept1 的主键 id。

提醒:关联指的是关联数据库中,相干表之间的联络。它是经由过程雷同的属性或属性组来示意的。子表的外键必需关联父表的主键,且关联字段的数据范例必需婚配,假如范例不一样,则建立子表时会涌现毛病“ERROR 1005(HY000):Can't create table'database.tablename'(errno:150)”。

在修正表时增加外键束缚

在修正数据表时增加外键束缚的语法划定规矩为:

ALTER TABLE <数据表名> ADD CONSTRAINT <索引名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);

示例:修正数据表 tb_emp2,将字段 deptId 设置为外键,与数据表 tb_dept1 的主键 id 举行关联,输入的 SQL 语句和运转效果以下所示。

mysql> ALTER TABLE tb_emp2
    -> ADD CONSTRAINT fk_tb_dept1
    -> FOREIGN KEY(deptId)
    -> REFERENCES tb_dept1(id);
Query OK, 0 rows affected (1.38 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> SHOW CREATE TABLE tb_emp2\G
*************************** 1. row ***************************
       Table: tb_emp2
Create Table: CREATE TABLE `tb_emp2` (
  `id` int(11) NOT NULL,
  `name` varchar(30) DEFAULT NULL,
  `deptId` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_tb_dept1` (`deptId`),
  CONSTRAINT `fk_tb_dept1` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312
1 row in set (0.12 sec)

删除外键束缚

关于数据库中定义的外键,假如不再须要,能够将其删除。外键一旦删除,就会消除主表和从表间的关联关联,MySQL 中删除外键的语法花样以下:

ALTER TABLE <表名> DROP FOREIGN KEY <外键束缚名>;

示例:删除数据表 tb_emp2 中的外键束缚 fk_tb_dept1,输入的 SQL 语句和运转效果以下所示。

mysql> ALTER TABLE tb_emp2
    -> DROP FOREIGN KEY fk_tb_dept1;
Query OK, 0 rows affected (0.19 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> SHOW CREATE TABLE tb_emp2\G
*************************** 1. row ***************************
       Table: tb_emp2
Create Table: CREATE TABLE `tb_emp2` (
  `id` int(11) NOT NULL,
  `name` varchar(30) DEFAULT NULL,
  `deptId` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_tb_dept1` (`deptId`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312
1 row in set (0.00 sec)

能够看到,tb_emp2 中已不存在 FOREIGN KEY,原有的称号为 fk_emp_dept 的外键束缚删除胜利。

以上就是MySQL怎样设置外键束缚?的细致内容,更多请关注ki4网别的相干文章!

标签:MySQL外键约束


欢迎 发表评论: