Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL外键:因为理解RESTRICT&;更新_Mysql_Sql - Fatal编程技术网

MySQL外键:因为理解RESTRICT&;更新

MySQL外键:因为理解RESTRICT&;更新,mysql,sql,Mysql,Sql,我有两张桌子: 1) 种类基础(子基础数据) 2) liste_land(国家列表) 它们之间存在关联: ALTER TABLE `kind_basis` ADD CONSTRAINT `fk_geburtsland_id` FOREIGN KEY ( `geburtsland_id` ) REFERENCES `liste_land` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE ; 为什么下面的查

我有两张桌子:

1) 种类基础(子基础数据)

2) liste_land(国家列表)

它们之间存在关联:

ALTER TABLE `kind_basis` 
    ADD CONSTRAINT `fk_geburtsland_id` 
    FOREIGN KEY ( `geburtsland_id` ) 
    REFERENCES `liste_land` (`id`) 
    ON DELETE RESTRICT 
    ON UPDATE CASCADE ; 
为什么下面的查询是可能的

DELETE 
    FROM  `liste_land` 
    WHERE `liste_land`.`id` = 6
我是否应该得到这样一条消息:“您不能删除该行,因为它用于另一个表(种类基础)


如果我更新列表中的一行,它是否也会以实物形式更新?

ON DELETE RESTRICT
表示如果子行引用父行的值,则无法删除父行,因此您可能没有该子行。

避免尝试删除,因为它会同时放置您正在使用的所有数据的表错误,避免打破你的头脑,试图破解捏,或者干脆为什么不尝试使用另一个工具来开发这些表oracle,有mysqlWorkbench,这是非常好的超级简单,在youtube上有很多视频他的课,因为我相信你已经有了创建和操作的智慧,很容易,我的提示invez尝试删除或更新c创建一个已经存在的新表,即不必不断更新或删除的实体和属性,然后将其导入到您想要的位置

关于“如果我更新列表中的一行,它是否也会以实物为基础进行更新?”?,否。这取决于更新。在您的示例中,您希望删除父表的主键。这可能是不允许的,因为外键很好。但是,如果您只是更新另一个字段,子表中的记录将不会受到影响,但涉及两个表的查询将返回父表中的新值。例如,如果您拼写了一个国家名称错误,并且有一段时间没有注意到,这将非常有用。您只需在liste_land表中更正它,工作就会完成。在我上面的例子中,什么是父,什么是子?child是外键所在的表,parent是引用的表(liste_land)但我可以成功地删除父表(liste_land)中的一行,尽管该行上有一个引用(从种类基础->删除->限制).我的推理错误是什么?在geburtsland_id in kind_基础上和在liste_land中,在您的示例中,删除限制必须具有值6才能生效。噢,我现在明白了,该值必须在之前存在?
ALTER TABLE `kind_basis` 
    ADD CONSTRAINT `fk_geburtsland_id` 
    FOREIGN KEY ( `geburtsland_id` ) 
    REFERENCES `liste_land` (`id`) 
    ON DELETE RESTRICT 
    ON UPDATE CASCADE ; 
DELETE 
    FROM  `liste_land` 
    WHERE `liste_land`.`id` = 6