2017-06-07 7 views
0

MySQLテーブルのテキストブックの例に問題があります。 トリックは、Windows OS上で動作しますが、いくつかの奇妙な理由で、Linuxでは動作しません。私はデフォルトのエンジンを設定しようとしましたが、InnoDBは確かにボットですが、何らかの奇妙な理由のためにまだ動作していません。自己参照外部キーのMySQL - InnoDBがオン(Ubuntu 16.04)(エラーコード:1215)でも外部キーが機能しない

CREATE TABLE radnik(
    Mbr integer NOT NULL, 
    Ime varchar(20) NOT NULL, 
    Prz varchar(25) NOT NULL, 
    Sef integer, 
    Plt decimal(10, 2), 
    Pre decimal(6, 2), 
    God date NOT NULL, 
    CONSTRAINT radnik_PK PRIMARY KEY (Mbr), 
    CONSTRAINT radnik_FK FOREIGN KEY (Sef) REFERENCES radnik (Mbr), 
    CONSTRAINT radnik_CH CHECK (Plt>500)  
)engine=innodb; 

CREATE TABLE projekat(
    Spr integer NOT NULL, 
    Ruk integer NOT NULL, 
    Nap varchar(50), 
    Nar varchar(50), 
    CONSTRAINT projekat_PK PRIMARY KEY (Spr), 
    CONSTRAINT projekat_FK FOREIGN KEY (Ruk) REFERENCES radnik (Mbr), 
    CONSTRAINT projekat_UK UNIQUE (Nap) 
)engine=innodb; 
CREATE TABLE radproj(
    Spr integer NOT NULL, 
    Mbr integer NOT NULL, 
    Brc integer NOT NULL, 
    CONSTRAINT radproj_PK PRIMARY KEY (Spr, Mbr), 
    CONSTRAINT radproj_rad_FK FOREIGN KEY (Mbr) REFERENCES radnik(Mbr), 
    CONSTRAINT radproj_prj_FK FOREIGN KEY (Spr) REFERENCES projekat(Spr) 
); 
+0

あなたはそれがうまくいかないという意味ですか? – Barmar

+0

エラー1215、外部キー制約を追加できません –

+0

'CHECK 'はMySQLで認識されますが無視されます。 MySQLの兄弟MariaDBは、10.2.1(7/2016)以降、「CHECK」(https://mariadb.com/kb/en/sql-99/constraint_type-check-constraint/)を処理します。 https://mariadb.com/kb/en/mariadb/check-constraints-support/ –

答えて

0

、私はあなたがCREATE TABLE文で外部キー制約を置くことができるとは思いません。最初にテーブルを作成してから、ALTER TABLEという制約を追加する必要があります。

これは私のために働く。

CREATE TABLE radnik(
    Mbr integer NOT NULL, 
    Ime varchar(20) NOT NULL, 
    Prz varchar(25) NOT NULL, 
    Sef integer, 
    Plt decimal(10, 2), 
    Pre decimal(6, 2), 
    God date NOT NULL, 
    CONSTRAINT radnik_PK PRIMARY KEY (Mbr) 
)engine=innodb; 

ALTER TABLE radnik ADD CONSTRAINT radnik_FK FOREIGN KEY (Sef) REFERENCES radnik (Mbr); 

ところで、MySQLはCHECKという制約を無視します。

+0

を参照してください。どうもありがとう 。 しかしそれはまだ私にとって謎です。なぜそれがWindows上で、Linux上ではなくWindows上で動作するのでしょうか。 –

+0

あなたは別のMySQLバージョンを実行していますか? – Barmar

+0

Win PCに余裕がないので、正しいバージョンを確認できませんでした。おそらく、Ubuntuパッケージのmysql-serverは最新ではありません。エラーコード:1452.子行を追加または更新できません:外部キー制約が失敗しました 編集:これはmysqlの最新バージョンです。 Win PCは最新バージョンであるため、バージョンは問題ではありません。 –

関連する問題