2016-04-04 16 views
1

Ich brauche ein frisches Paar Augen, um zu sehen, was genau ich hier falsch mache.Mysql Fehler: 1215 Kann Fremdschlüssel-Einschränkung nicht hinzufügen [Fremdschlüssel gleichen Typs, innodb]

CREATE TABLE IF NOT EXISTS `spring_normalize`.`users` (
    `username` VARCHAR(60) NOT NULL, 
    `password` VARCHAR(80) NULL, 
    `authority` VARCHAR(45) NULL, 
    `name` VARCHAR(100) NULL, 
    `enabled` TINYINT(1) NULL, 
    `email` VARCHAR(60) NULL, 
PRIMARY KEY (`username`)) 
ENGINE = InnoDB; 

CREATE TABLE IF NOT EXISTS `spring_normalize`.`offers` (
    `id` INT NOT NULL AUTO_INCREMENT, 
    `text` VARCHAR(100) NULL, 
    `users_username` VARCHAR(60) NOT NULL, 
PRIMARY KEY (`id`, `users_username`), 
INDEX `fk_offers_users_idx` (`users_username` ASC), 
CONSTRAINT `fk_offers_users` 
    FOREIGN KEY (`users_username`) 
    REFERENCES `spring_normalize`.`users` (`username`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

Von anderen Menschen, die das gleiche Problem:

  1. Ist Db InnoDB? Ja
  2. Sind alle Tabellen InnoDB? Ja
  3. Ist der eindeutige Index auf der Referenztabelle vorhanden? Ja
  4. Sind referenzierte und referenzierende Spalten genau vom selben Typ? Ja

Frage was mache ich falsch? Danke im Voraus!

+0

[Kann nicht wiederholt werden] (http://sqlfiddle.com/#!2/d2f001), wurde auch lokal mit einer 'spring_normalize'-Datenbank versucht, die erstellt wurde, und den vollständigen Datenbanknamen. Sind Sie sicher, dass keine der Tabellen in einer vorherigen - anderen - Form existiert, da Sie nur erstellen, wenn nicht existiert? –

+1

Ihr Code - minus den Datenbanknamen - funktioniert gut mit SQL Fiddle: http://www.sqlfiddle.com/#!9/d2f00. –

+0

Das Problem ist nicht reproduzierbar, Sie haben etwas falsch gemacht. Es arbeitet auch an MariaDB 10. Der Fehler stammt von einem anderen Skript. – DanFromGermany

Antwort

0

Wie die anderen in den Kommentaren erwähnt, sind Ihre Anfragen korrekt

Paar Dinge können Sie versuchen:


Wählen Sie Ihre Datenbank zuerst und entfernen Sie sie aus 2 create table

USE `spring_normalize`; 


CREATE TABLE IF NOT EXISTS `users` (
    `username` VARCHAR(60) NOT NULL, 
    `password` VARCHAR(80) NULL, 
    `authority` VARCHAR(45) NULL, 
    `name` VARCHAR(100) NULL, 
    `enabled` TINYINT(1) NULL, 
    `email` VARCHAR(60) NULL, 
PRIMARY KEY (`username`)) 
ENGINE = InnoDB; 

CREATE TABLE IF NOT EXISTS `offers` (
    `id` INT NOT NULL AUTO_INCREMENT, 
    `text` VARCHAR(100) NULL, 
    `users_username` VARCHAR(60) NOT NULL, 
PRIMARY KEY (`id`, `users_username`), 
INDEX `fk_offers_users_idx` (`users_username` ASC), 
CONSTRAINT `fk_offers_users` 
    FOREIGN KEY (`users_username`) 
    REFERENCES `users` (`username`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

Versuchen Sie dies vor den Create-Tabellen zu spezifizieren, falls die Engine wo ULD (weirdly) versuchen, die Tabelle offers vor users zu erstellen:

-- Do not check foreign key constraints 
SET FOREIGN_KEY_CHECKS = 0; 

und schließlich, wenn nichts sie löst, dies zu tun, nachdem der Fehler erhalten haben, wird es Ihnen weitere Informationen geben

SHOW ENGINE INNODB STATUS; 
Verwandte Themen