添加外键约束

时间:2012-12-04 02:31:44

标签: mysql

找不到任何真正对我有帮助的问题。

我正在尝试在表(dempartment)上设置外键约束,并将其链接到表(employee)上的主键,该列在employee上调用(dno)并在部门上调用(dnumber)。两个字段都是相同的类型,但我一直在

mysql> alter table department
    -> add foreign key (dnumber)
    -> references employee (dno);
ERROR 1005 (HY000): Can't create table 'dba110.#sql-938_3' (errno: 150)

有什么建议吗?

更新: 所以我想看看我的dno和dnumber列是签名还是未签名。

mysql> show create table employee;
+----------+-------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
| Table    | Create Table


+----------+-------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
| employee | CREATE TABLE `employee` (
  `Fname` varchar(8) DEFAULT NULL,
  `Minit` varchar(2) DEFAULT NULL,
  `Lname` varchar(8) DEFAULT NULL,
  `SSN` varchar(9) NOT NULL,
  `Bdate` date DEFAULT NULL,
  `Address` varchar(27) DEFAULT NULL,
  `Sex` varchar(1) DEFAULT NULL,
  `Salary` float NOT NULL,
  `Superssn` varchar(9) DEFAULT NULL,
  `Dno` int(1) NOT NULL,
  PRIMARY KEY (`SSN`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+----------+-------------------------------------------
-------------------------------------------------------
-------------------------------------------------------
1 row in set (0.00 sec)

mysql> show create table department;
+------------+-----------------------------------------
-------------------------------------+
| Table      | Create Table
                                     |
+------------+-----------------------------------------
-------------------------------------+
| department | CREATE TABLE `department` (
  `dnumber` int(1) NOT NULL,
  `dname` varchar(15) DEFAULT NULL,
  `mgrssn` varchar(9) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+------------+-----------------------------------------
-------------------------------------+
1 row in set (0.00 sec)

2 个答案:

答案 0 :(得分:1)

可能其中一个字段是UNSIGNED,另一个是SIGNED。

您可以按SHOW CREATE TABLE检查列。

更多信息在这里:MySQL Error Number 1005 Can’t create table ‘.\mydb#sql-328_45.frm’ (errno: 150)

答案 1 :(得分:1)

不应该是正确的表结构,

具有外键deptID的员工。

E.g。

alter table employee add foreign key (dnumber) references department (dno);

如果您有能力更改设计,我建议您将部门保留为父级,并将其ID转入员工以获得参照​​完整性。 :-)

根据OP的评论进行编辑

PS:在移动设备上,因此代码段不会包含代码标记。并希望我能在SQLFIDDLE中为您提供示例。

步骤:

create table department
(dno int not null primary key, 
 dname varchar(15), 
 mgrno int UNSIGNED null)

Insert into department    
(dno, dname, mgrno)    
Values    
(),
(),
()
;

Create table employee
(eid int not null primary key, 
 ename varchar(25), 
 mid int not null, 
did int not null,
foreign key (did) references 
 department (dno))

Insert into employee
(eid, ename, mid, did)
Values
(),
(),
(),
(),
()
;

请尝试以上结构。因此,您的主键已设置,外键已设置。我只为这两个表添加了大多数主要字段。您可以添加其他列。