1

找不到任何真正帮助我的问题,所以这是另一个问题。

我正在尝试在表(部门)上设置外键约束并将其链接到表(员工)上的主键,该列在员工上称为(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)
4

2 回答 2

1

是不是正确的表结构应该是,

具有外键 deptID 的员工。

例如

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

如果您有能力更改设计,我建议您保留 dept 父级,并将其 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
(),
(),
(),
(),
()
;

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

于 2012-12-04T03:05:19.997 回答
1

可能,其中一个字段是未签名的,另一个是签名的。

您可以通过SHOW CREATE TABLE检查您的列 。

更多信息在这里:MySQL 错误号 1005 无法创建表 '.\mydb#sql-328_45.frm' (errno: 150)

于 2012-12-04T02:34:29.187 回答