栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

同一列是否可以对另一列具有主键和外键约束

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

同一列是否可以对另一列具有主键和外键约束

这应该没有问题。考虑以下示例:

CREATE TABLE table2 (   id int PRIMARY KEY,   name varchar(20)) ENGINE=INNODB;CREATE TABLE table1 (   id int PRIMARY KEY,    t2_id int,    FOREIGN KEY (t2_id) REFERENCES table2 (id)) ENGINE=INNODB;INSERT INTO table2 VALUES (1, 'First Row');INSERT INTO table2 VALUES (2, 'Second Row');INSERT INTO table1 VALUES (1, 1);INSERT INTO table1 VALUES (2, 1);INSERT INTO table1 VALUES (3, 1);INSERT INTO table1 VALUES (4, 2);

这些表现在包含:

SELECt * FROM table1;+----+-------+| id | t2_id |+----+-------+|  1 |     1 ||  2 |     1 ||  3 |     1 ||  4 |     2 |+----+-------+4 rows in set (0.00 sec)SELECt * FROM table2;+----+------------+| id | name       |+----+------------+|  1 | First Row  ||  2 | Second Row |+----+------------+2 rows in set (0.00 sec)

现在我们可以成功删除这样的行:

DELETe FROM table1 WHERe id = 1;Query OK, 1 row affected (0.00 sec)DELETe FROM table1 WHERe t2_id = 2;Query OK, 1 row affected (0.00 sec)

但是,我们将无法删除以下内容:

DELETe FROM table2 WHERe id = 1;ERROR 1451 (23000): A foreign key constraint fails

如果我们

table1
使用
CASCADE
选项定义了外键,那么我们将能够删除父项,并且所有子项都将被自动删除:

CREATE TABLE table2 (   id int PRIMARY KEY,   name varchar(20)) ENGINE=INNODB;CREATE TABLE table1 (   id int PRIMARY KEY,    t2_id int,    FOREIGN KEY (t2_id) REFERENCES table2 (id) ON DELETe CASCADE) ENGINE=INNODB;INSERT INTO table2 VALUES (1, 'First Row');INSERT INTO table2 VALUES (2, 'Second Row');INSERT INTO table1 VALUES (1, 1);INSERT INTO table1 VALUES (2, 1);INSERT INTO table1 VALUES (3, 1);INSERT INTO table1 VALUES (4, 2);

如果我们要重复之前失败的操作

DELETE
table1
则将删除其中的子行以及其中的父行
table2

DELETE FROM table2 WHERe id = 1;Query OK, 1 row affected (0.00 sec)SELECt * FROM table1;+----+-------+| id | t2_id |+----+-------+|  4 |     2 |+----+-------+1 row in set (0.00 sec)SELECt * FROM table2;+----+------------+| id | name       |+----+------------+|  2 | Second Row |+----+------------+1 row in set (0.00 sec)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517455.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号