Mysql外键使用
我正在尝试为一个简单的博客创建一个mysql数据库。我很难理解外键及其适当的关系。如果有人能用“外行”的语言来解释,我会很高兴的 我有一个名为users的表,其中包含字段的基本信息(用户名、电子邮件、密码等),我创建了一个user\u type字段并将其设置为INT。我创建了一个名为user\u type的对应表,并添加了两个字段(一个是type\u id=primary key,另一个是type=VARCHAR) 我的问题是: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的外键
我的理解正确吗?我将用户表中的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子句是一样的。再次感谢-解释时非常简单,老实说,我不知道他们为什么不这样解释-这使学习变得更加容易。