Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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外键使用_Mysql_Foreign Key Relationship - Fatal编程技术网

Mysql外键使用

Mysql外键使用,mysql,foreign-key-relationship,Mysql,Foreign Key Relationship,我正在尝试为一个简单的博客创建一个mysql数据库。我很难理解外键及其适当的关系。如果有人能用“外行”的语言来解释,我会很高兴的 我有一个名为users的表,其中包含字段的基本信息(用户名、电子邮件、密码等),我创建了一个user\u type字段并将其设置为INT。我创建了一个名为user\u type的对应表,并添加了两个字段(一个是type\u id=primary key,另一个是type=VARCHAR) 我的问题是: 我的理解正确吗?我将用户表中的user\u type INT的外键

我正在尝试为一个简单的博客创建一个mysql数据库。我很难理解外键及其适当的关系。如果有人能用“外行”的语言来解释,我会很高兴的

我有一个名为users的表,其中包含字段的基本信息(用户名、电子邮件、密码等),我创建了一个user\u type字段并将其设置为INT。我创建了一个名为user\u type的对应表,并添加了两个字段(一个是type\u id=primary key,另一个是type=VARCHAR)

我的问题是:


我的理解正确吗?我将用户表中的user\u type INT的外键链接设置为引用user\u type表中的type\u id,从而将两个表连接在一起?

您的理解是正确的

一个表中的外键指向另一个表中的主键

因此,在您的示例中,表用户类型中的
user\u type
id将是主键,而表用户中的
user\u type
int将是外键条目


这强制表用户类型中的条目必须存在,才能在表用户中使用。

从用户到用户类型的引用:

n个用户有一个用户类型

如果使用sql语句创建表,则在用户部分中应包含如下内容:

DROP TABLE IF EXISTS `user` ;

CREATE  TABLE IF NOT EXISTS `user` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `username` VARCHAR(55) NOT NULL ,
  `email` VARCHAR(55) NOT NULL ,
  `password` VARCHAR(55) NOT NULL ,
  `user_type` INT NOT NULL ,
  PRIMARY KEY (`ID`) ,
  INDEX `user_to_usertype_idx` (`user_type` ASC) ,
    CONSTRAINT `user_to_usertype`
    FOREIGN KEY (`user_type` )
    REFERENCES `user_type` (`type_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)

ENGINE = InnoDB;

在创建用户之前,必须先创建用户类型,否则会失败。

在你把头撞到墙上之前:你需要使用
InnoDB
表格;如果您使用
MyISAM
,外键将不会被强制执行(但不会被警告)。当您说-您必须首先创建用户类型时,您的意思是我必须首先创建表还是每个sql语句都必须以用户类型字段开头?如果您希望引用具有约束,则必须首先创建表。如果没有用户类型表,则无法创建约束,并且将出现错误。您也可以不受约束地工作。。。但是,您可能有无效用户类型的用户(用户类型可能不存在)。约束帮助您在数据库中拥有干净的数据。我是否需要对CASCADE、NO ACTION等执行任何操作,或者我可以将其留空?请看一看,谢谢,但这太技术化了,需要三级解释吗?CASCADE:从父表中删除或更新行,并自动删除或更新子表中的匹配行。限制:拒绝父表的删除或更新操作。指定RESTRICT(或NO ACTION)与省略ON DELETE或ON UPDATE子句是一样的。再次感谢-解释时非常简单,老实说,我不知道他们为什么不这样解释-这使学习变得更加容易。