0

私はいくつかのテーブルでデータベースを作成しています。これまでのところ、テーブルを作成し、いくつかのデモ データで更新することができましたが、2 つのテーブルを接続するための新しいテーブルを作成しようとすると、これを取得できません。何をしてもテーブルエラーを作成します。エンティティの名前をまったく別の名前に変更しようとしましたが、それが問題かもしれませんが、そうではありませんでした。

CREATE DATABASE IF NOT EXISTS ETR;

CREATE TABLE Hallgato (
OktAzonosito INT(6) PRIMARY KEY,
EHAazonosito VARCHAR(11),
TeljesNev VARCHAR(50),
Szemelyazonosito INT(6),
AnyaNyelv VARCHAR(20),
VegzettsegSzint VARCHAR(25),
AnyjaNeve VARCHAR(35),
SzuletesiHely VARCHAR(30),
SzuletesiEv DATE,
Allampolgarsag VARCHAR(30),
Neme VARCHAR(5),
Adoazonosito INT(6),
TAJszam INT(6),
BankszamlaSzam INT(9)
) ENGINE = InnoDB;

CREATE TABLE OktAdat (
OktAzonosito INT(6),
NyelvVizsgaNyelve VARCHAR(15),
NyVegzesDatuma DATE,
NyIntezmeny VARCHAR(35),
EgyebVegzetteseg VARCHAR(15),
EgyVegzesDatuma DATE,
ID INT(5) PRIMARY KEY NOT NULL auto_increment,
FOREIGN KEY (OktAzonosito) REFERENCES Hallgato(OktAzonosito) ON DELETE CASCADE
) ENGINE = InnoDB;

CREATE TABLE Oktato (
TEHAazonosito VARCHAR(11) PRIMARY KEY,
Nev VARCHAR(50),
SzuletesiEv DATE,
Szakterulet VARCHAR(25),
Telefonszam INT(9),
Email VARCHAR(50)
) ENGINE = InnoDB;

CREATE TABLE Kurzus (
KurzusKod VARCHAR(8) PRIMARY KEY,
KurzusNev VARCHAR(30),
Idotartam INT(3),
EloadasHelye VARCHAR(25),
Tipus CHAR(3),
Vizsgatipus VARCHAR(7),
KreditErtek INT(2),
OktatoKod VARCHAR(11)
) ENGINE = InnoDB;

CREATE TABLE Terem (
Sorszam INT(3) PRIMARY KEY NOT NULL,
Epuletszam INT(1),
Kapacitas INT(3),
IRszam INT(4),
Utca CHAR(25),
Hazszam INT(2)
) ENGINE = InnoDB;

CREATE TABLE DiakKurz (
kd_id INT (5) PRIMARY KEY NOT NULL auto_increment,
DKKod VARCHAR(8),
EHA VARCHAR(11),
FOREIGN KEY (EHA) REFERENCES Hallgato(EHAazonosito) ON DELETE CASCADE,
FOREIGN KEY (DKKod) REFERENCES Kurzus(KurzusKod) ON DELETE CASCADE
) ENGINE = InnoDB;

問題は、DiakKurz テーブルの作成にあります。

4

4 に答える 4

1

テーブルHallgatoの列EHAazonositoにINDEXを設定する必要があります

CREATE TABLE Hallgato (
OktAzonosito INT(6) PRIMARY KEY,
EHAazonosito VARCHAR(11), INDEX (EHAazonosito),
TeljesNev VARCHAR(50),
Szemelyazonosito INT(6),
AnyaNyelv VARCHAR(20),
VegzettsegSzint VARCHAR(25),
AnyjaNeve VARCHAR(35),
SzuletesiHely VARCHAR(30),
SzuletesiEv DATE,
Allampolgarsag VARCHAR(30),
Neme VARCHAR(5),
Adoazonosito INT(6),
TAJszam INT(6),
BankszamlaSzam INT(9)
) ENGINE = InnoDB;
于 2012-11-17T23:20:14.323 に答える
1

これ

FOREIGN KEY (EHA) REFERENCES Hallgato(EHAazonosito) ON DELETE CASCADE,

テーブルEHAazonositoの主キーではないため、機能しません。Hallgato外部キーは、主 (または一意の) キーのみを参照できます。

ところで: in が列の値を制限すること6int(6)ないことを知っていますか?

それは何もしません。int(6)と同じintです。列を表示する桁数の6ヒント (!) をクライアント アプリケーションに提供するためだけに存在します。何も強制しません。

于 2012-11-17T23:14:23.497 に答える
0

スキーマ全体のダンプ後に私にも起こりました。助けになったのは、ダンプ全体を無効な外部キーチェック内にラップすることでした

SET foreign_key_checks=0;

...dump

SET foreign_key_checks=1;
于 2013-01-22T10:47:21.753 に答える
0

エラーを調べてみましたか?

MySQL が CREATE TABLE ステートメントからエラー番号 1005 を報告し、エラー メッセージがエラー 150 を参照している場合、外部キー制約が正しく形成されていないため、テーブルの作成に失敗しました。同様に、ALTER TABLE が失敗し、エラー 150 を参照する場合、変更されたテーブルの外部キー定義が正しく形成されていないことを意味します。サーバーの最新の InnoDB 外部キー エラーの詳細な説明を表示するには、SHOW ENGINE INNODB STATUS を発行します。

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

于 2012-11-17T23:14:13.743 に答える