asp.net - 将外键应用于表时mysql中的错误代码1005

标签 asp.net mysql

我有两个表tbluserlogindetailtblRoles

tbluserlogindetail如下

CREATE TABLE `tbluserlogindetail` (
`LoginID` varchar(45) NOT NULL,
`Name` varchar(45) DEFAULT NULL,
`Password` varchar(45) DEFAULT NULL,
 PRIMARY KEY (`LoginID`),
 UNIQUE KEY `LoginID_UNIQUE` (`LoginID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1$$

编辑doratestingtbluserlogindetail

我的第二个表tblRoles如下

CREATE TABLE `tblroles` (
  `RoleID` int(11) NOT NULL,
  `LoginID` varchar(45) NOT NULL,
  PRIMARY KEY (`RoleID`,`LoginID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1$$

我尝试了以下方法为 tblroles 表中的 LoginID 列分配主键,但我不知道我哪里出错了,任何人都可以帮助我。

我已阅读文档,但无法纠正错误,因此请帮助我

ALTER TABLE tblroles 添加外键(loginid) 引用文献 tbluserlogindetail(loginid)

最佳答案

引用的列在引用的表中必须是唯一的。尝试以下选项之一:

  • tbluserlogindetail 上的主键是 (ID, loginid),因此您可以使用它作为外键,而不是 (loginid)。这将要求您向 tblroles 添加列 tbluserlogindetail_ID
  • 尝试向 tbluserlogindetail 表的 LoginID 列添加唯一索引。只有当它确实是唯一的时,这才有可能。

此外,为什么 tbluserlogindetail 上的主键定义为 PRIMARY KEY (ID, LoginID)ID 字段是一个自增字段,并且已经是唯一的。那么为什么还要将 LoginID 作为主键的一部分呢?我认为您需要回到表设计并重新考虑选择哪些列作为主键。

关于asp.net - 将外键应用于表时mysql中的错误代码1005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7618296/

相关文章:

mysql - 为什么使用 ActiveRecord 而不是 MySql API

c# - 如何在加载某些控件时显示进度条?

c# - 动态改变CSS

带有外部缓存提供程序的 ASP.NET MVC OutputCacheAttribute

java - 在 MySql 中存储形状

MySQL查询只拉取最新记录

php - 使用 allocateIdentifier() 更新对象而不是使用 Doctrine 插入

c# - 来自字符串帮助的日期。我可以转换成我想要的字符串,但我无法转换回来

c# - 导出当前gridview数据

php - Eloquent 具有多对多 (belongsToMany)