42
CREATE DATABASE my_db;

CREATE TABLE class (
  classID int NOT NULL AUTO_INCREMENT,
  nameClass varchar(255),
  classLeader varchar(255),
  FOREIGN KEY (classLeader) REFERENCES student(studentID),
  PRIMARY KEY (classID));

CREATE TABLE student (
  studentID int NOT NULL AUTO_INCREMENT,
  lastName varchar(255),
  firstName varchar(255),
  classID int,
  FOREIGN KEY (classID) REFERENCES class(classID),
  PRIMARY KEY (studentID));

DBMS がエラーをチェックできるように、外部キーを使用してテーブル間のデータの一貫性を確保しようとしています。しかし、何らかの理由でそれができないようです。エラーは何ですか?代替手段はありますか?また、外部キーを持つテーブルに入力すると、外部キー用に予約されているフィールドに入力できませんよね? また、外部キーはまったくキーと見なされますか?

4

11 に答える 11

8

とのFOREIGN KEY (classLeader) REFERENCES student(studentID) データ型が異なるため、このエラーが発生しています。主キー列と外部キー列のデータ型は同じである必要があります。studentIDclassLeader

MySQL サイトから:

外部キーと参照されるキーの対応する列は、同様のデータ型である必要があります。整数型のサイズと符号は同じでなければなりません。文字列型の長さは同じである必要はありません。非バイナリ (文字) 文字列列の場合、文字セットと照合は > 同じでなければなりません。

于 2013-07-17T05:07:34.580 に答える
0

SQLダンプにヘッダーとフッターがあることを確認してください。そうしないと、データベースを復元するときにあらゆる種類のエラーが表示されます

ヘッダーは以下のようになります -:

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

フッターは以下のようになります -:

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

上記が役立つことを願っています

乾杯S

于 2015-05-03T08:53:36.507 に答える
0

エラーは解決されます:

このようなテーブルの外部キーを作成するには

CREATE TABLE USERS_SO (
    USERNAME VARCHAR(10) NOT NULL,
    PASSWORD VARCHAR(32) NOT NULL,
    ENABLED SMALLINT,
    PRIMARY KEY (USERNAME)
);

以下のコードは正常に動作します

CREATE TABLE AUTHORITIES_SO (
    USERNAME VARCHAR(10) NOT NULL,
    AUTHORITY VARCHAR(10) NOT NULL,
    FOREIGN KEY (USERNAME) REFERENCES USERS_SO(USERNAME)
);
于 2015-04-15T12:45:29.660 に答える
-1

キーの終了基準点を「固有」に設定します

于 2017-01-30T18:15:12.313 に答える