Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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
Php 外键mysql_Php_Mysql_Sql - Fatal编程技术网

Php 外键mysql

Php 外键mysql,php,mysql,sql,Php,Mysql,Sql,我有以下表格: PROFILE table { user_id INT, apitype enum('facebook' , 'main') } USER table { id INT } PROFILE.user\u id是指向用户表中id的外键,但仅当PROFILE.apitype='main' 因此,如果PROFILE.apitype!='主“ 如何在MYSQL中实现这一点?好吧,因为这是逻辑,应该在应用程序中处理,而不是在数据库中处理 您可以将概要文件表中的user_id添加为nu

我有以下表格:

PROFILE table {
user_id INT, 
apitype enum('facebook' , 'main')
}

USER table {
id INT
}
PROFILE.user\u id
是指向用户表中id的外键,但仅当
PROFILE.apitype='main'

因此,如果
PROFILE.apitype!='主“


如何在MYSQL中实现这一点?

好吧,因为这是逻辑,应该在应用程序中处理,而不是在数据库中处理


您可以将概要文件表中的user_id添加为null,使连接成为可选的,并且根据您使用的存储引擎,您可以尝试使用触发器(虽然在mysql中不太了解触发器)。

好吧,这是逻辑,应该在应用程序中处理,而不是在数据库中处理


您可以将概要文件表中的用户id添加为可空,使连接成为可选连接,并且根据您使用的存储引擎,您可以尝试使用触发器(虽然在mysql中不太了解触发器)。

您可能可以使用在insert/update之前触发的,并检查
apitype
的值。甚至有一些方法可以在MySQL触发器中抛出错误,例如检查。

您可能可以使用在插入/更新之前触发的,并检查apitype的值。甚至有一些方法可以在MySQL触发器中抛出错误,例如check。

我认为在MySQL中用简单的方法无法实现这一点

例如,在Postgres中,您有一个检查约束,您可以检查apitype是否为main,然后用户id必须为null


在Mysql中,您只能使用触发器来实现这一点,这并不容易。我认为对你来说,最简单也是最可靠的方法就是在你的应用程序中检查它。但是您仍然可以在user_id上设置一个外键,即使它有时为空

我认为您无法在Mysql中轻松实现这一点

例如,在Postgres中,您有一个检查约束,您可以检查apitype是否为main,然后用户id必须为null

在Mysql中,您只能使用触发器来实现这一点,这并不容易。我认为对你来说,最简单也是最可靠的方法就是在你的应用程序中检查它。但是您仍然可以在user_id上设置外键,即使它有时为null