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

おそらく、フィールドの 1 つが UNSIGNED で、もう 1 つが SIGNED です。

SHOW CREATE TABLEで列を確認できます 。

詳細はこちら: MySQL エラー番号 1005 Can't create table '.\mydb#sql-328_45.frm' (errno: 150)

于 2012-12-04T02:34:29.187 に答える
1

正しいテーブル構造ではないでしょうか。

外部キー deptID を持つ従業員。

例えば

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

デザインを変更できる場合は、dept を親として保持し、参照整合性のためにその ID を employee にプルすることをお勧めします。:-)

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 に答える