1

みなさん、こんにちは。主キーと外部キーを持つテーブルを作成したいと思います。ただし、外部キーは同じテーブルの主キーを参照します。オンラインで読んだところ、この種の制約を追加するには、まずこの制約を削除し、データをロードしてから、ALTER コマンドを使用して制約を追加する必要があることがわかりました。ただし、これは機能していないようです。クエリは次のとおりです。

DROP TABLE employee;
CREATE TABLE employee (
  fname    varchar(15) not null, 
  minit    varchar(1),
  lname    varchar(15) not null,
  ssn      char(9),
  bdate    date,
  address  varchar(50),
  sex      char,
  salary   decimal(10,2),
  superssn char(9),
  dno      integer(4),
  primary key (ssn),
  foreign key (superssn) references employee(ssn),
  foreign key (dno) references department(dnumber)
);

これがテーブルにデータをロードする方法です。

LOAD DATA LOCAL INFILE "employee.dat" 
INTO TABLE employee 
FIELDS ENCLOSED BY "\"" TERMINATED BY ","
;

これを実現する方法のヒントを教えていただければ幸いです。

4

3 に答える 3

0

考えられる最初の回答: (うまくいきませんでした)

DROP TABLE employee;

CREATE TABLE employee (
  fname    varchar(15) not null, 
  minit    varchar(1),
  lname    varchar(15) not null,
  ssn      char(9),
  bdate    date,
  address  varchar(50),
  sex      char,
  salary   decimal(10,2),
  superssn char(9),
  dno      integer(4),
  primary key (ssn),
  foreign key (dno) references department(dnumber)
) ENGINE = InnoDB;

LOAD DATA LOCAL INFILE "employee.dat" 
INTO TABLE employee 
FIELDS ENCLOSED BY "\"" TERMINATED BY ",";

ALTER TABLE employee ADD FOREIGN KEY (superssn) REFERENCES employee(ssn);

外部キーを使用する場合に必要なテーブルエンジン形式を InnoDB に設定するように、テーブル作成クエリを設定しました。

考えられる 2 番目の答え:

この一連のクエリでは、データの挿入は必要なく、これら 2 つのクエリを開発中の MySQL サーバーでエラーを発生させることなく実行できたことに注意することが重要です。 部門テーブルの FK を追加する必要があります。

CREATE  TABLE `test_schema`.`employees` (
  `fname` VARCHAR(15) NOT NULL ,
  `minit` VARCHAR(1) NULL ,
  `lname` VARCHAR(15) NOT NULL ,
  `ssn` CHAR(9) NOT NULL ,
  `bdate` DATE NULL ,
  `address` VARCHAR(50) NULL ,
  `sex` CHAR NULL ,
  `salary` DECIMAL(10,2) NULL ,
  `superssn` CHAR(9) NULL ,
  `dno` INT(4) NULL ,
  PRIMARY KEY (`ssn`) ) ENGINE = InnoDB;

ALTER TABLE `test_schema`.`employees` 
  ADD CONSTRAINT `superssn`
  FOREIGN KEY (`superssn` )
  REFERENCES `test_schema`.`employees` (`ssn` )
  ON DELETE NO ACTION
  ON UPDATE NO ACTION
, ADD INDEX `superssn_idx1` (`superssn` ASC) ;
于 2012-09-16T20:45:41.620 に答える