1

dept_masterのdept_idを参照する外部キーを持つfac_masterというテーブルを作成しています。テーブルは作成されていますが、外部キーはこのテーブルに適用されていません。また、dept_masterに外部キーがあります。これは非常にうまく機能しますが、このテーブルでは機能しません。

create table Dept_Master
(   dept_id smallint unsigned auto_increment not null comment 'Department/Branch ID',
    dept_name varchar(100) not null comment 'Department Name such as Computer Engineering',
    prog_id tinyint unsigned not null comment 'Program ID under which this department falls',
    PRIMARY KEY(dept_id),
    CONSTRAINT fk_dept FOREIGN KEY(prog_id) REFERENCES Prog_Master(prog_id) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=InnoDB COLLATE latin1_general_ci;


create table Fac_Master
(   fac_id smallint unsigned auto_increment not null comment 'Faculty ID',
    dept_id smallint unsigned not null comment 'Department Id of the department in which this faculty works',
    fac_name varchar(30) not null comment 'Name of the Faculty',
    fac_father_name varchar(30) comment 'Father\'s name of the faculty',
    fac_surname varchar(30) comment 'Surname of the faculty',
    fac_designation varchar(30) not null comment 'Designation of the faculty',
    fac_mail_id varchar(50) comment 'E-mail id of the faculty',
    fac_mobile bigint(10) unsigned comment 'Mobile number of the faculty',
    fac_address varchar(100) comment 'Permanent Address of the faculty',
    fac_status varchar(1) not null comment 'Status of Faculty: A=Active D=Deactive',
    fac_joining_date date comment 'Joining Date of the Faculty',
    PRIMARY KEY(fac_id),
    CONSTRAINT fk_faculty FOREIGN KEY(dept_id) REFERENCES Dept_Master(dept_id) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=InnoDB COLLATE latin1_general_ci;

「prog_master」の「prog_id」に存在しない「dept_master」の「prog_id」に値を追加しようとすると、fk制約エラーが発生しますが、「dept_id」に値を追加しようとすると、 「dept_master」の「dept_id」に存在しない「fac_master」は追加されますが、fk制約エラーが発生するはずです。また、情報スキーマで外部キー制約を確認したところ、テーブルfac_masterに外部キー制約がないことがわかりました。Windows 7HP64ビットバージョンでWAMPサーバー2.2を使用しています。

何が問題ですか?助けてください..

編集:

alter table Fac_Master
add constraint fk_faculty FOREIGN KEY(dept_id) REFERENCES Dept_Master(dept_id) ON DELETE RESTRICT ON UPDATE RESTRICT;

上記のようにaltertableを使用すると機能しますが、createtableで使用した場合は機能しません。その理由は何でしょうか?

4

1 に答える 1

3

問題の原因は、での脱出方法にあるよう'です'Father\'s name of the faculty'。で変更すると'Father''s name of the faculty'、外部キー制約が正しく作成されていることがわかります。

マニュアルによれば、一重引用符を含める両方の方法が正しいので、それはバグです。このMySQLバグチケットを参照してください。

于 2013-03-27T08:21:36.457 に答える