Kolom referensi kunci asing meja kerja mysql tidak berfungsi

FOREIGN KEY adalah bidang (atau kumpulan bidang) dalam satu tabel, yang merujuk ke PRIMARY KEY di tabel lain

Tabel dengan kunci asing disebut tabel anak, dan tabel dengan kunci utama disebut tabel referensi atau induk

Perhatikan dua tabel berikut

Tabel Orang

PersonIDLastNameFirstNameAge1HansenOla302SvendsonTove233PettersenKari20

Tabel Pesanan

OrderIDOrderNumberPersonID1778953244678332245624245621

Perhatikan bahwa kolom "PersonID" di tabel "Pesanan" mengarah ke kolom "PersonID" di tabel "Orang"

Kolom "PersonID" di tabel "Orang" adalah PRIMARY KEY di tabel "Orang"

Kolom "PersonID" di tabel "Pesanan" adalah FOREIGN KEY di tabel "Pesanan"

Batasan FOREIGN KEY_ mencegah data yang tidak valid dimasukkan ke dalam kolom kunci asing, karena itu harus menjadi salah satu nilai yang terkandung dalam tabel induk



KUNCI ASING pada CREATE TABLE

SQL berikut membuat FOREIGN KEY_ pada kolom "PersonID" saat tabel "Pesanan" dibuat

BUAT TABEL Pesanan (
OrderID int BUKAN NULL,
OrderNumber int BUKAN NULL,
int PersonID,
KUNCI UTAMA (IDPesanan),
REFERENSI KUNCI ASING (PersonID) Orang (PersonID)
);

Untuk mengizinkan penamaan batasan FOREIGN KEY, dan untuk menentukan batasan FOREIGN KEY pada banyak kolom, gunakan sintaks SQL berikut

Kesalahan terjadi saat menambahkan tabel Person (dan saya menduga pesan tabel juga dapat memberikan masalah yang sama)

Mencari solusi

Secara keseluruhan, masalah yang paling mungkin muncul adalah kurangnya indeks dari entitas induk (pengidentifikasi) tempat beberapa kolom diindeks

lihat 1) 2) - Kemungkinan penyebab kesalahan 1215

Mencari di DBA Stackexchange, kesalahan manusia yang sederhana menyebabkan masalah, tampaknya tidak ada yang terkait dengan masalah saya. - posting - posting lain

Saya telah memeriksa kolom pada kedua tabel, dan keduanya cocok sebaik yang saya bisa buat. Salah satunya adalah CHAR(21) bukan kunci utama nol, dan yang lainnya adalah CHAR(21) bukan nol

Sunting (lagi). (kedua tabel)

Pertama, tabel asli yang saya coba tautkan

    CREATE TABLE IF NOT EXISTS `db`.`Employee` (
      `employeeId` CHAR(21) NOT NULL,
      `departmentId` CHAR(21) NULL DEFAULT NULL,
      `chatStatusId` CHAR(21) NOT NULL DEFAULT 'd15a558946afbbd4a6046',
      `employeeNum` INT(4) NOT NULL,
      `payrollNum` INT(11) UNSIGNED NULL DEFAULT '0',
      `title` VARCHAR(50) NULL DEFAULT NULL,
      `dateHired` DATE NOT NULL,
      `terminationDate` DATE NULL DEFAULT NULL,
      `LastLogin` DATETIME NULL DEFAULT NULL,
      `rightMask` INT(11) NOT NULL COMMENT 'we should be using the right table instead',
      `teamId` INT(11) UNSIGNED NULL DEFAULT NULL COMMENT 'this is no longer really used',
      `IsTeamLead` TINYINT(4) NOT NULL DEFAULT '0',
      `bioId` INT(11) UNSIGNED NULL DEFAULT NULL,
      `emailSignature` TEXT NULL DEFAULT NULL,
      `notes` TEXT NULL DEFAULT NULL,
      PRIMARY KEY (`employeeId`),
      UNIQUE INDEX `employeeNum` (`employeeNum` ASC),
      INDEX `departmentId` (`departmentId` ASC),
      INDEX `chatStatusId` (`chatStatusId` ASC),
      INDEX `teamId` (`teamId` ASC),
      CONSTRAINT `Employee_ibfk_1`
        FOREIGN KEY (`employeeId`)
        REFERENCES `db`.`Person` (`personId`)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
      CONSTRAINT `Employee_ibfk_10`
        FOREIGN KEY (`teamId`)
        REFERENCES `db`.`HaloTeam` (`teamId`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT,
      CONSTRAINT `Employee_ibfk_8`
        FOREIGN KEY (`departmentId`)
        REFERENCES `db`.`Department` (`departmentId`),
      CONSTRAINT `Employee_ibfk_9`
        FOREIGN KEY (`chatStatusId`)
        REFERENCES `db`.`ChatStatus` (`chatStatusId`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_general_ci

Dan ini adalah tabel baru yang saya coba buat kunci asing ke tabel asli

CREATE TABLE IF NOT EXISTS `db`.`ArticleNote` (
  `ArticleNoteID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `ArticleID` INT(10) UNSIGNED NOT NULL,
  `Created` TIMESTAMP NOT NULL,
  `employeeId` CHAR(21) NOT NULL,
  `Note` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`ArticleNoteID`),
  INDEX `fk_ANote_Article_idx` (`ArticleID` ASC),
  INDEX `fk_ANote_Employee_idx` (`employeeId` ASC),
  CONSTRAINT `fk_ANote_Article`
    FOREIGN KEY (`ArticleID`)
    REFERENCES `db`.`Article` (`ArticleID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_ANote_Employee`
    FOREIGN KEY ()
    REFERENCES `db`.`Employee` ()
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_general_ci
_

Dan ini adalah contoh tabel yang sudah memiliki kunci asing (menggunakan kolom yang sama) dengan yang saya coba buat di tabel baru saya

Bisakah kunci asing mereferensikan kolom kunci asing?

Kunci Asing . Jika kolom diberi kunci asing, setiap baris kolom itu harus berisi nilai yang ada di kolom 'asing' yang dirujuknya .

Bagaimana menemukan referensi kunci asing di MySQL?

pilih * dari INFORMATION_SCHEMA. TABLE_CONSTRAINTS di mana CONSTRAINT_TYPE = 'FOREIGN KEY'; . .
To see all FKs in your table: USE ''; SELECT i. .. .
Untuk melihat semua tabel dan FK di skema Anda. .
Untuk melihat semua FK di database Anda

Bagaimana Anda mengidentifikasi semua referensi kunci asing dalam sebuah tabel?

Untuk melihat atribut kunci asing dari suatu hubungan dalam tabel tertentu. Buka Desainer Tabel untuk tabel berisi kunci asing yang ingin Anda lihat, klik kanan pada Desainer Tabel, dan pilih Hubungan dari menu pintasan .

Bagaimana cara membuat kolom kunci asing di meja kerja MySQL?

Untuk menambahkan kunci asing, klik baris terakhir di daftar Nama Kunci Asing. Masukkan nama untuk kunci asing dan pilih kolom atau beberapa kolom yang ingin Anda indeks dengan mencentang nama kolom di daftar Kolom . Anda dapat menghapus kolom dari indeks dengan menghapus tanda centang dari kolom yang sesuai.